Symfoware

Symfowareについての考察blog

jungleを使用して、Pumaをデーモンで自動起動する

Puma + nginxでRedmineを動かしてみました。
Puma + nginxでRedmine 2.6を動かす

サーバー再起動のたびに


# bundle exec puma -e production --config config/puma.rb



ってやってられないので、サービスとして起動してもらいたい。

jungleがこの希望を叶えてくれそうです。

https://github.com/puma/puma/tree/master/tools/jungle/init.d




設定



/etc/init.dに配置するpuma
/usr/local/binに配置するrun-pumaを取得します。


# cd /tmp/
# wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/init.d/puma
# wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/init.d/run-puma




pumaを/etc/init.d/にコピー。
実行権限を付与します。
insservで、OS起動時に実行するよう指定します。


# cp puma /etc/init.d/
# chmod +x /etc/init.d/puma
# insserv puma




次にrun-pumaを/usr/local/binにコピー。
実行権限を付与します。


# cp run-puma /usr/local/bin
# chmod +x /usr/local/bin/run-puma




最後に、設定を保存する/etc/puma.confを枠だけ作成しておきます。


# touch /etc/puma.conf






RVM向けの設定



RubyをRVMでインストールしている場合は、ひと工夫必要でした。
Configuring puma init.d scripts and pumactl on debian with rvm

/uskr/local/bin/run-pumaを編集。


# vi /usr/local/bin/run-puma




source /etc/profile.d/rvm.shを追加します。
これでRubyへのパスが設定されます。


#!/bin/bash
app=$1; config=$2; log=$3;

source /etc/profile.d/rvm.sh
cd $app && exec bundle exec puma -C $config 2>&1 >> $log







アプリケーションの指定



puma addコマンドで起動するアプリケーションを追加できます。
書式は以下のとおり。


# /etc/init.d/puma add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log




ホントはrootじゃなくて起動用のユーザーを用意すべきなのですが、
一旦rootで起動する指定を実行します。


# /etc/init.d/puma add /var/lib/redmine/redmine-2.6.0 root /var/lib/redmine/redmine-2.6.0/config/puma.rb \
/var/lib/redmine/redmine-2.6.0/config/puma.log




これで、/etc/puma.confに設定が追記されます。





nginxの自動起動



nginxの自動起動指定を行っていない場合は、ちゃんと設定しておきます。


# insserv nginx







テスト



これで準備OKです。
サーバーごとリスタートした後、ちゃんとPumaが起動し、
http://(サーバーIP)/でRedmineの画面が表示できるか確認します。


# shutdown -r now




nginxよりPumaの記事が若干遅れるため、起動直後は502エラーなどが表示されるかもしれませんが、
すぐに表示できるようになるはずです。





stop対応



このスクリプト、若干問題がありまして、pidファイルは


[アプリケーションパス]/tmp/puma/pid



stateファイルは


[アプリケーションパス]/tmp/puma/state



にあることを期待しています。


これ以外のパスにあると、stopスクリプトが失敗します。
設定ファイルを編集して、一致させておくとよいかと。


# vi /var/lib/redmine/redmine-2.6.0/config/puma.rb




pidfile、state_pathを微調整。


application_path = '/var/lib/redmine/redmine-2.6.0'
directory application_path
environment 'production'
daemonize true
pidfile "#{application_path}/tmp/puma/pid"
state_path "#{application_path}/tmp/puma/state"
stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log"
bind "unix://#{application_path}/tmp/sockets/redmine.sock"


関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2014/11/16(日) 17:40:03|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Puma + Redmineをサブディレクトリで複数稼働させる | ホーム | Puma + nginxでRedmine 2.6を動かす>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1552-86cb1463
この記事にトラックバックする(FC2ブログユーザー)