Nginx + Starman + Catalyst(PSGI) で最初のページを表示するまで。
ユーザーのリクエストをNginx(プロクシとして使用) -> Starman(perl製webサーバー) -> Catalyst(PSGI)てな感じで待ち受ける環境を作ってみようと思います。
Catalystのインストール。
cpanm Task::Catalyst
Catalystのインストールが終わったら、catalyst.plが使えるようになるので、
catalyst.pl Myapp
で、とりあえずMyappアプリを生成してみました。
Calyst5.90015だと、myapp.psgiファイルも一緒に生成されました。
前までは、
./script/myapp_create.pl PSGI
ってやって、.psgiを生成してたんですが、その必要はないぽいです。
myapp.psgiにlibへのpathを追加して起動してみます。
use strict; use warnings; use lib ('/home/hogehoge/Myapp/lib'); use Myapp; my $app = Myapp->apply_default_middlewares(Myapp->psgi_app); $app;
plackup myapp.psgi
動いたので停止して次へ。
# Starmanのインストール
cpanm Starman
お手軽ですねw
# daemontoolsのインストール
Starmanを起動させておくために、daemontoolsを使ってデーモン化します。
# daemontoolsのDL -> 解凍
http://cr.yp.to/daemontools/install.html
mkdir -p /package chmod 1755 /package cd /package wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz tar xvzf daemontools-0.76.tar.gz
で、解凍したら、adminってdirができる。
cd admin/daemontools-0.76
このままインストールするとエラーがでるらしいので、patchを当てる。
wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch patch -p1 < daemontools-0.76.errno.patch
# ようやくインストール
package/install
# runファイルの作成
portは、使ってなさそうな8080で。
workersは、とりあえず1個にしときます。
Perl + Perlモジュールは、perlbrew(+cpanm)でインストールしたので、
exportでlibを追加しつつ、starmanは絶対パスで指定。
#!/bin/sh exec 2>&1 cd /home/hogehoge/Myapp export PATH=/home/hogehoge/perl5/perlbrew/perls/perl-5.16.0/lib:${PATH} exec setuidgid hogehoge /home/hogehoge/perl5/perlbrew/perls/perl-5.16.0/bin/starman myapp.psgi --p 8080 --workers 1
上記を/home/hogehoge/daemontools/Myapp/runとして保存しました。
perlbrew使ってない場合は、
#!/bin/sh exec 2>&1 cd /home/hogehoge/Myapp exec setuidgid hogehoge starman myapp.psgi --p 8080 --workers 1
こんな感じでいけそうですね。
で、上記のファイルに実行権限を与えて、/service/にリンクを貼ります。
chmod 755 run ln -s /home/hogehoge/daemontools/Myapp /service/Myapp
下記のような感じで、myapp.psgiを操作する事ができます。
# ステータス確認 svstat /service/Myapp # 停止 svc -d /service/Myapp # 再開 svc -u /service/Myapp # 完全停止 mv /service/Myapp /service/.Myapp svc -dx /service/.Myapp
あとは、nginxにプロクシを設定します。
server { listen 80; server_name hogehoge.com; # .が含まれるリクエストはrootを参照(静的ファイル) location ~ .+\..+$ { root /home/hogehoge/Myapp/root; } location / { proxy_pass http://localhost:8080; } }
で、nginxをreloadして、ページアクセス!
Welcome to the world of Catalyst.
とりあえず動いたんで、セキュリティ周りとチューニング周りをもう少し調べてみよ。