サナギわさわさ.json

サナギさんとキルミーベイベーとプログラミングが好きです

PlayFrameworkをSupervisorを使いながらデプロイする

普段は肉と魚が好きですが、ピオーネ食べてる時だけはベジタリアンになっても良い気持ちになります。

今回は掲題の通り、PlayFrameworkのデプロイをSupervisorを使いつつやった手順を残します。
本当はFabricも使いたかったです。環境はCentOS6.4 + Play2.3です。 以下を参考にしました。

SupervisorによるPlayframeworkアプリのデーモン化 - /var/log/laughingman7743.log

スーパーサーバーSupervisorの導入手順メモ - Glide Note

Supervisorのインストール

CentOS6.4で普通にyumで入れると古いSupervisordが入ってしまうので、pipで入れます。

yum install python-setuptools
sudo easy_install pip
sudo pip install supervisor

設定ファイルの吐き出し

設定ファイルの中身は適当に変えてください。

sudo echo_supervisord_conf > /etc/supervisord.conf

Upstart経由でSupervisorを起動

以下のファイルを/etc/init/supervisord.confに配置し

description     "supervisord"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
exec /usr/bin/supervisord -n

起動とログ確認

sudo initctl start supervisord
supervisorctl maintail  #ログ確認

Playアプリ用設定ファイルを準備

ポート、アプリ名、ログ吐き出し場所は好みで変えてください。

[program:yourapp]
process_name=%(program_name)s
directory=/path/to/yourapp
command=/bin/bash -c "ulimit -n 10240; exec bin/yourapp -Dhttp.port=9000 -Dconfig.file=/path/to/yourapp/conf/application.prod.conf -Dpidfile.path=/dev/null"
autostart=true
autorestart=true
user=your_user
redirect_stderr=true
stdout_logfile=/var/log/yourapp/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10

Playのデプロイ

distで作成したzipをサーバーにアップし、解凍してシンボリックリンクを更新します。
ここはFabricとかで自動化した方が良いです。

#ローカルでのコマンド
activator dist #yourapp-SNAPSHOT.zipを作成
scp yourapp-SNAPSHOT.zip user@yourserver:/var/tmp/ #APサーバーにzipファイルを送信
#ここからAPサーバーでのコマンド
unzip /var/tmp/yourapp-SNAPSHOT.zip
mv yourapp-SNAPSHOT /path/to/yourapp-new
ln -nfs /path/to/yourapp-new /path/to/yourapp #シンボリックリンクを更新
supervisorctl restart yourapp #プロセス再起動

以上です。ダンジョン飯は2巻ぐらいで終わりそうだと思ってたんですが、意外と長続きしそうで嬉しいです。