スタッフブログ
satoです。
今週末に札幌でオープンソースカンファレンス2009 Hokkaidoがあります。
私もRedmineについて話す予定ですので、北海道の方は是非お越し下さい。
さて、Redmineを普通に使うには、Redmine.jpという、日本語でRedmineの情報を集めたサイトがありますので、こちらをご覧頂けると大体問題なく使えるのですが、実運用になると何かと問題が発生します。
Redmine.jpではPassengerを使用した方法が書かれていますが、Passengerは動作が安定しないことがあり、個人的にはまだ実用するには不安が残ります。
そこで、Railsアプリ運用では一般的だと思われる、mod_proxy_balancerとThinを組み合わせた運用方法について説明します。
WEBrick(素の状態でruby script/serverで起動するサーバ)のRedmineの起動ができていることを前提とします。
■Thin
Thinは、RubyのWebサーバで、Mongrelを内部でパーサとして使用しており、かつMongrelより高速なのが特徴です。
まずインストールをします(以下ほとんどsudo等の管理者権限で実行することになります)
これだけでThinを使うことができます。
なお、Ubuntuで
のようなエラーが出た場合は、
として、ruby1.8-devをインストールすると解決します。
これだけでもいいのですが、このままでは起動が面倒です。また、1プロセスしか存在しないため、1プロセスが死ぬと繋がらない状態になります。
Thinには、両方とも解決する機能が搭載されており、起動スクリプトの自動生成と、クラスタ化ができるようになっております。
で、/etc/init.d/にthinが入ります。
ですが、このままだと起動できないので、起動用の設定ファイルを別途出力します。
Thinの起動スクリプトは、/etc/thin/*.ymlを読み込みます。そのため、そこに設定ファイルを出力します。
/path/to/redmine/はRedmineのパス、--servers 3はプロセスを3つ立ち上げる、-e productionはproduction環境で実行する、ということになります。
出力される/etc/thin/redmine.ymlは名前の通りYAMLですので、簡単に修正することができます。使用するポート番号の範囲とかも書かれているので確認しておいてください。
ここまでできたら、
で、Redmineが起動します。必要に応じてchkconfig thin onなどでサーバ起動時に起動するようにしておきましょう。
■mod_proxy_balancer
mod_proxy_balancerは、Apache2.2から導入されたソフトウェアのロードバランサモジュールです。
今回はThinを複数プロセス起動しているので、これを使用して1つのURLでアクセスできるようにします。
大体こんな感じです。
BalancerMemberで、立ち上げたThinのURLをプロセス分記入します。
ロードバランサだけならPoundやNginxとかでもいいのですが、通常Redmineだけでサーバ1つ占有することはないと思いますので、大体入っていると思われるApacheを使って設定するのが便利だと思います。
■余談
リポジトリ画面は、そのままだと毎回取得して遅いので、本番環境では必ずcronで取得するようにしましょう。
詳細はRedmine.jpの記事をご覧下さい。
今週末に札幌でオープンソースカンファレンス2009 Hokkaidoがあります。
私もRedmineについて話す予定ですので、北海道の方は是非お越し下さい。
さて、Redmineを普通に使うには、Redmine.jpという、日本語でRedmineの情報を集めたサイトがありますので、こちらをご覧頂けると大体問題なく使えるのですが、実運用になると何かと問題が発生します。
Redmine.jpではPassengerを使用した方法が書かれていますが、Passengerは動作が安定しないことがあり、個人的にはまだ実用するには不安が残ります。
そこで、Railsアプリ運用では一般的だと思われる、mod_proxy_balancerとThinを組み合わせた運用方法について説明します。
WEBrick(素の状態でruby script/serverで起動するサーバ)のRedmineの起動ができていることを前提とします。
■Thin
Thinは、RubyのWebサーバで、Mongrelを内部でパーサとして使用しており、かつMongrelより高速なのが特徴です。
まずインストールをします(以下ほとんどsudo等の管理者権限で実行することになります)
gem install rack
gem install thin
なお、Ubuntuで
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)
sudo aptitude install ruby1.8-dev
これだけでもいいのですが、このままでは起動が面倒です。また、1プロセスしか存在しないため、1プロセスが死ぬと繋がらない状態になります。
Thinには、両方とも解決する機能が搭載されており、起動スクリプトの自動生成と、クラスタ化ができるようになっております。
thin install
ですが、このままだと起動できないので、起動用の設定ファイルを別途出力します。
thin config -C /etc/thin/redmine.yml -c /path/to/redmine/ --servers 3 -e production
Thinの起動スクリプトは、/etc/thin/*.ymlを読み込みます。そのため、そこに設定ファイルを出力します。
/path/to/redmine/はRedmineのパス、--servers 3はプロセスを3つ立ち上げる、-e productionはproduction環境で実行する、ということになります。
出力される/etc/thin/redmine.ymlは名前の通りYAMLですので、簡単に修正することができます。使用するポート番号の範囲とかも書かれているので確認しておいてください。
ここまでできたら、
/etc/init.d/thin start
■mod_proxy_balancer
mod_proxy_balancerは、Apache2.2から導入されたソフトウェアのロードバランサモジュールです。
今回はThinを複数プロセス起動しているので、これを使用して1つのURLでアクセスできるようにします。
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName redmine.example.com
ProxyPass / balancer://redmine_cluster/
ProxyPassReverse / balancer://redmine_cluster/
<Proxy balancer://redmine_cluster/>
BalancerMember http://127.0.0.1:3000 loadfactor=20
BalancerMember http://127.0.0.1:3001 loadfactor=20
BalancerMember http://127.0.0.1:3002 loadfactor=20
</Proxy>
</VirtualHost>
大体こんな感じです。
BalancerMemberで、立ち上げたThinのURLをプロセス分記入します。
ロードバランサだけならPoundやNginxとかでもいいのですが、通常Redmineだけでサーバ1つ占有することはないと思いますので、大体入っていると思われるApacheを使って設定するのが便利だと思います。
■余談
リポジトリ画面は、そのままだと毎回取得して遅いので、本番環境では必ずcronで取得するようにしましょう。
詳細はRedmine.jpの記事をご覧下さい。