Chef SoloでRedmineの構築を自動化する
Chef SoloでRuby on Railsの環境構築ができたため、味を占めてRedmineの構築も自動化してみました。
Chefを動かすにはCentOS6にChef Soloをインストールするが必要なので、まず先にやっておきます。
Opscode CommunityでRedmineのCookbookを探してみたところ、redmine2というCookbookがあったためこれを使うことにしました。
今回、Chefで作成する構成は以下のとおりです。
| Redmine | Redmine 2.4.3 |
| OS | Ubuntu 12.04 |
| データベース | MySQL 5.5.37 |
| Webサーバ | nginx 1.1.19 |
| Ruby | 1.9.3-p484 |
まず、chef-repo配下にBerksfileを作成し、README.mdに指定のあったCookbookを設定します。
$ cd chef-repo/ $ vi Berksfile site :opscode cookbook 'rbenv', git: 'https://github.com/fnichol/chef-rbenv' cookbook 'redmine2', git: 'https://github.com/aminin/redmine2-cookbook'
berksコマンドを実行して依存関係のあるCookbookをダウンロードします。
$ berks install
サーバにChefをインストールします。
$ knife solo prepare <ユーザ名>@<サーバのIPアドレス>
redmine2のattribute/default.rbは以下のようになっており、デフォルトのDBはsqliteでしたが、MySQLも利用できる仕様だったため、DBにはMySQLを指定することにしました。*1
default_unless[:redmine] = {}
default[:redmine][:user] = 'redmine'
default[:redmine][:home] = '/home/redmine'
default[:redmine][:host] = 'redmine.example.com'
default[:redmine][:version] = '2.4.3'
default[:redmine][:ruby_version] = '1.9.3-p484'
default[:redmine][:create_db] = true
default_unless[:redmine][:db] = {}
default[:redmine][:db][:type] = 'sqlite'
default[:redmine][:db][:hostname] = 'localhost'
default[:redmine][:db][:dbname] = 'redmine'
default[:redmine][:db][:username] = 'redmine'
default[:redmine][:db][:password] = 'redmine'Redmineのデータベースとパスワード、MySQLのパスワードを指定するため、下記のようにJSONファイルを作成します。*2
$ vi nodes/<サーバのIPアドレス>.json
{
"redmine": {
"host": "redmine.dev",
"db": {
"type": "mysql",
"password": "passw0rd"
}
},
"mysql": {
"password": "passw0rd"
},
"run_list": [
"recipe[mysql::server]",
"recipe[redmine2]"
]
}サーバに対してchef-soloを実行します。
$ knife solo cook <ユーザ名>@<サーバのIPアドレス>
Redmineの構築ができたことを確認するため、「http://<サーバのIPアドレス>」にアクセスし、adminユーザでログインできることを確認します。
実は、当初以下のサイトを参考に、RedmineのCookbookを一から作成していましたが、passengerのインストールとrake db:migrateの処理で詰まってしまい途方にくれていました。今回Opscodeで先人の知恵を借りましたが、Redmineの構築がここまで簡単にできるのは衝撃的でした。ある意味、破壊的な技術だなという気がします。
*1:README.mdやmetadata.rbにはデフォルトのDBはPostgreSQLだよと書いてあり、どちらの値が優先されるのかは確認中です。