前回の記事で Amon2 + Starman な Web アプリを公開してみたのでその時のまとめ。
「MovableType 5.2b2 を nginx + PSGI/Plack @ Mountain Lion な環境で動かす」ですでに nginx + Starman な環境を作成しています。今回はコレに新しいアプリを追加してみます。図に書くとこんな感じです。
サーバーでの動作確認
Amon2 でのアプリの開発が終わったら、サーバーにソースをダウンロードして動作の確認をしてみます。
$ ssh remora.cx $ cd /Library/WebServer/Application $ git clone [email protected]:delphinus35/PushStateTest $ cd PushStateTest $ mkdir db && mkdir pid $ starman -l 127.0.0.1:28520 --pid pid/pushstatetest.pid app.psgi # 別のターミナルで $ curl -L http://127.0.0.1:28520 # HTML が表示されたら成功
Starman の起動スクリプト
起動スクリプトを用意します。
#!/bin/sh DIR=$(cd $(dirname $0);pwd) PID=$DIR/pids/app.pid PSGI=$DIR/app.psgi STARMAN=/Users/delphinus/perl5/perlbrew/perls/perl-5.14.1/bin/starman cd $DIR $STARMAN -l 127.0.0.1:18521 --pid $PID $PSGI # vim:se ft=sh:
Starman のパスとかポート番号とかは適当に変えてください。ファイルに実行権限を付け加えるのも忘れずに。
launchctl の設定
今回は Mac OS X での鯖立てなので launchd を使います。Linux なら supervisord とかですかね。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>delphinus.pushstatetest-run</string> <key>ProgramArguments</key> <array> <string>/Library/WebServer/Applications/PushStateTest/app.run</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
ファイル名とかパスは自由に変えてください。でもファイルの所有権は root じゃないと怒られるようです。
nginx の設定
nginx.conf
を編集します。前回と重複は省略しています。ハイライトした部分が今回のアプリに関係ある箇所です。
user _www; worker_processes 1; events { worker_connections 1024; } http { upstream apache { server 127.0.0.1:10080; } upstream mt { server 127.0.0.1:18520; } upstream pushstatetest { server 127.0.0.1:18521; } (省略) server { listen 80; server_name pushstatetest.remora.cx; access_log /var/log/nginx/pushstatetest-access.log; error_log /var/log/nginx/pushstatetest-error.log; location / { proxy_pass http://pushstatetest; break; } } }
今回は pushstatetest.remora.cx
というサブドメインを作り、コレに新しいアプリを割り当てました。予め、DNS の方でこの名前を CNAME に設定しておいてください。
サーバの起動&再起動
まずは Starman の方を起動します。
$ sudo launchctl load /Library/LaunchDaemons/delphinus.pushstatetest-run.plist # ちゃんと起動しているか確認 $ ps aux | grep starman
次は nginx を再起動するのですが、なぜか launchctl stop
や launchctl unload
で終了してくれません。よくわからんので kill して再起動します。
$ sudo pkill nginx $ sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist $ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
コレで完了です。http://pushstatetest.remora.cx にアクセスすると、ちゃんと動いていることが確認できます。