2008年4月19日土曜日

CentOS5にPassenger(mod_rails)を入れる

Passengerの評判が良さそうなので、実際にRailsを運用しているサーバ(CentOS5)に入れてみた。

Passengerの良いところ

  • デプロイが簡単。railsのインスタンスは何個でポートは何番から当てて、フロントはリバースプロキシとかなんとかは、もう悩まなくていい。
  • mongrelとかthin並み、またはそれ以上速いらしい。(でも自分で公開しているベンチマークだからね。。。)
  • この仕組みであればcapistranoに対応できる。てかscript/spinを起動しないだけ。
  • passenger自体のインストールも簡単。CentOS5で、railsの動作環境は既に済ませてあれば3分で設定完了。
  • バーチャルホストを増やしたいときは、apacheのVirtualHostディレクティブに最低3行書くだけ。
  • deveropment環境なのかproduction環境なのかをapacheのconf上で指定できる。(たぶんまだオプションありそう)

Passengerの悪いところ

  • たぶんコイツメモリ大食い(そういうビジネスモデルなのかも)
  • 逆に、ポート何番は既に使っていて、インスタンスは何個立ってるとか、細かいチューニングは出来ないんだろうな…(未確認)

railsが動く環境は整っているものとする。

1.passenger自体のインストール

# gem install passenger

でgemを入れて

2.モジュールのコンパイル

# passenger-install-apache2-module

でモジュールをコンパイル

参考 本家のインストール手順

で、たぶんAPRとかなんとかが無いと怒られるので、メッセージ通り

# yum install httpd-devel apr-devel

とやると、コンパイル通ると思う。


3.apacheに設定追加
自分の場合は/etc/httpd/conf.d/passenger.confを作って、
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.soRailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-serverRailsRuby /usr/bin/ruby

<VirtualHost *:80> ServerName target-domain-name DocumentRoot /var/www/domains/target-domain-name/rails-project/current/public RailsEnv production CustomLog /var/log/httpdtarget-domain-name.passenger_access.log combined ErrorLog /var/log/httpd/target-domain-name.passenger_error.log</VirtualHost>
としてから、apacheを再起動したらちゃんと動きました。(デフォルトのhttpd.confだと/etc/httpd/conf.d/*をすべてインクルードするはず)
あー、こりゃ便利だわ。まだ使い始めだからマイナス面が見えないけど、しばらく実運用して様子を見よう。
ちなみに、MacOSだと標準で入っているapacheと相性が悪いらしく、別途apacheを入れる必要がある。(MacPortsのapacheを使ってpassengerを動作させる方法を知ってる方連絡ください)
最後にPassengerで確認したい要点(何かわかったら追記する)
  • メモリ使用量
  • ソース修正時に再起動が必要か否か(ドキュメントに書いてありそうだけど)
  • インスタンスの落ちやすさ。
  • 各種railsバージョンやプラグインとの相性(問題ないと勝手に思ってるけど)
  • 外部からの死活確認の必要性。また再起動の方法。(apacheの再起動になるのかな?)

やっぱり動作モデルを理解するのが、理解が速いのかな。


0 件のコメント: