rbenv+ruby-buildとunicornでもっとさくっとRedmine入れてみる

前にこういう記事書いたんですけど、Redmineプロジェクトは結構活発でついこの間1.4.0がリリースされてました。なんとRuby1.9系へ対応!Gemfileも提供されるようになってよりインストールが簡単になってたのでかっとなってやってみました。ついでにこちらもだいぶ枯れてきたrbenv+ruby-buildを使い、HTTPサーバとしてはunicornを使ってみました。

rbenv+ruby-buildのインストール

gitは入っている前提ですが、超簡単です。

$ cd
$ git clone https://github.com/sstephenson/rbenv.git .rbenv
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git

あとは.bashrcとかに以下の記述をして再読込。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

これでrbenvコマンドが(タブ補完つきで)使うことができます。さて、早速rubyを入れたいんですが、後ほどハマらないように先にOSのパッケージ管理でopensslの開発パッケージを入れておきます。

# yum install openssl-devel

Redmine1.4からはついにruby1.9が使えるので1.9.3を入れてみましょう。

$ rbenv install 1.9.3-p125
$ rbenv rehash
$ rbenv versions
  1.9.3-p125

Redmineのダウンロード

tar.gzをダウンロードしてもいいんですが、有志の方が本家のsvnをgithubに上げてくれいているのでそれを使ってみます。

$ cd
$ git clone https://github.com/redmine/redmine.git
$ cd redmine
$ git branch -a
  master
  remotes/origin/0.6-stable
  remotes/origin/0.7-stable
  remotes/origin/0.8-stable
  remotes/origin/0.9-stable
  remotes/origin/1.0-stable
  remotes/origin/1.1-stable
  remotes/origin/1.2-stable
  remotes/origin/1.3-stable
  remotes/origin/1.4-stable
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

こういう感じでバージョンごとにstableのbranchがあるのでとりあえずこれに切り替えておけば多分git pullするだけでstableの最新版を追いかけられる様な気がしました(勘で言ってます)。

$ cd ~/redmine
$ git checkout -b 1.4-stable remotes/origin/1.4-stable
$ git branch
* 1.4-stable
  master

ではここで先程ビルドしたバージョンのrubyを使う様にrbenvの設定をします。

$ cd ~/redmine
$ rbenv local 1.9.3-p125
$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]
$ rbenv which ruby
/home/riywo/.rbenv/versions/1.9.3-p125/bin/ruby

このディレクトリ配下にいるときだけこの設定は効果を発揮しますので、別のディレクトリに移ると元に戻ります。おもしろいですね。

$ cd ~
$ rbenv which ruby
/usr/bin/ruby

bundlerのインストール

基本的にgemパッケージはアプリケーション毎にローカルに持つんですけど、それを実現するためのbundlerパッケージだけは先程ビルドしたruby本体の中に入れてしまいます。rbenv shellとかでもいんですけど、先程rbenv localで設定したディレクトリで作業しちゃいます。

$ cd ~/redmine
$ rbenv which gem
/home/riywo/.rbenv/versions/1.9.3-p125/bin/gem
$ gem install bundler
$ rbenv rehash
$ bundle -v
Bundler version 1.1.3

これ以降、このバージョンのrubyに対しては直接gemコマンドを叩くことはありません。全てGemfileというDSLに記述してbundleコマンドで、アプリケーションローカルにインストールしていきます。

Redmineの依存モジュールをインストール

Redmine1.4からはGemfileが提供されているので何も考えずに叩くだけです。ただし、普通に叩くとruby本体の方に入ってしまうので、オプションでインストール場所をローカルにしておきます。Imagemagickとかポスグレとかは無視。MySQLのクライアントライブラリは先に頑張って入れておいて下さい。

$ cd ~/redmine
$ bundle install --path vendor/bundle --without development test rmagick postgresql sqlite

簡単ですね!ついでにUnicornも入れておきたいのでGemfile.localというファイルを作ってもう一回実行します。すでにインストール先は設定されてるのでオプション不要です。

$ cd ~/redmine
$ echo 'gem "unicorn"' > Gemfile.local
$ bundle install
$ bundle --verbose list

初めてのインストールの場合

Redmineを初めてインストールする場合はドキュメントに従ってゴニョゴニョします。一応コマンド書いてますが、最新のドキュメントを常に参照して下さい。

MySQLのユーザは適当に。

create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';

config/database.ymlは以下の様に。mysql2を指定するのがポイントだそうです。

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: my_password

あとはひたすらrakeコマンド。ただし、bundlerでgemを入れているのでbundle execで実行します。終わったら試しにWEBrickで起動してブラウザで見てみましょう。

$ cd ~/redmine
$ bundle exec rake -- generate_session_store
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake  redmine:load_default_data
$ bundle exec script/server webrick -e production

1.2とかからアップデートする場合

解説めんどいのでドキュメント見てください。。。大して難しくないです。rakeするときにbundle execするのをお忘れなく。

Unicornで起動

あとはこれをunicornで起動するだけです。起動方法のデファクトがよく分からなかったので、とりあえず慣れてるdaemontoolsならこんな感じかと。unicornのconfig自体はイマイチよく分かってないのでサンプルを適当にいじっただけ。

これで8080ポートで待ち受けているので、後はApacheなりnginxなりからリバースプロキシしてあげれば完成かなと思います。

おわりに

だいぶすっきりしたなぁという印象です。rubyはbundlerもrbenvもよくできていて、スタンドアロンな環境をさくさく作れていい感じだと思います。

また、Redmineプロジェクトはこれだけの結構大きいアプリケーションなのに精力的に開発されていてすばらしいと思いました。ちっぽけですが少しでも貢献できればと思い記事をしたためました。