Catalyst + Apache + fastcgi (daemontools)
Catalystを使うときは大概mod_perlで動かしてたんだけど
今回はちょっとfastcgiを使ってみた。
Catalystインストール
Catalyst本体
sudo cpan Catalyst::Runtime sudo cpan Catalyst::Devel sudo cpan Catalyst::View::TT
で
catalyst.pl MyApp
fastcgiインストール
ソースをもってきてインストール
$ wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz $ tar zxf mod_fastcgi-2.4.6.tar.gz
インストールは「INSTALL.AP2」に載っている通りです。
$ cd mod_fastcgi-2.4.6 $ cp -p Makefile.AP2 Makefile $ make $ sudo make install
※apacheのインストディレクトリが/usr/local/apache2以外の場合は
Makefileの
top_dir = /usr/local/apache2
を適宜変更。
apacheの設定
apache2.2系はconf/extra配下に各設定ファイルを作ってhttpd.confでインクルードしてるので
Catalystの設定はhttpd-catalyst.confとか作ってやるのが個人的には好きです。
$ pwd /usr/local/apache2/conf/extra $ vi httpd-catalyst.conf
設定内容はこんな感じ。
<IfModule mod_fastcgi.c> FastCgiExternalServer /tmp/foo.fcgi -socket /tmp/bar.socket -idle-timeout 120 </IfModule> <VirtualHost *:80> ServerName hoge-baz.net RewriteEngine on RewriteRule ^/(.*) /tmp/foo.fcgi/$1 [L] <Files myapp_fastcgi.pl> SetHandler fastcgi-script </Files> </VirtualHost>
これでapacheの設定は終わり
Catalystをfastcgiで起動
Catalyst側はMyAppのscript配下にあるmyapp_fastcgi.plを実行してやる。
$ cd MyApp $ ./script/myapp_fastcgi.pl -n 3 -l '/tmp/bar.socket'
これでソケットを通してapacheとcatalystが連携できました。
daemontoolsを使ってfastcgiを管理する
fastcgiはdaemontoolsを使ってプロセス監視をすると便利です。
daemontoolsそのものは省略。
runファイルはこんな感じ。
#!/bin/sh exec 2>&1 exec env - \ PATH='/bin:/usr/bin:/usr/local/bin:/usr/local/MyApp/script' \ DBIC_TRACE=1 \ CATALYST_DEBUG=1 \ DBIC_NO_WARN_BAD_PERL=1 \ setuidgid hoge \ myapp_fastcgi.pl -n 3 -l '/tmp/bar.socket'
こうやっとくと例えばプログラムを更新した際は
daemontoolsのコマンド使って
svc -t /service/myapp
ってやればfastcgiが再起動できる