hidemium's blog

日々学んだことをアウトプットする。

Chef SoloでRedmineの構築を自動化する

Chef SoloでRuby on Railsの環境構築ができたため、味を占めてRedmineの構築も自動化してみました。

Chefを動かすにはCentOS6にChef Soloをインストールするが必要なので、まず先にやっておきます。
Opscode CommunityRedmineの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だよと書いてあり、どちらの値が優先されるのかは確認中です。

*2:Ubuntu 12.04で動作確認済み