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だよと書いてあり、どちらの値が優先されるのかは確認中です。