バージョン : Capistrano 3.2.1
タイトル長いですがそのままです。
Capistrano さんで PHP のアプリとかデプロイするのは良いんですが PHP-FPM (Fast CGI Process Manager) のキャッシュにがっつり乗っちゃって反映されないとき、えーい再起動しちゃえとか思うこと、あると思うんです。それじゃなくても Java AP だったらコンテナ再起動とか。
でもデプロイ先のユーザーってまさか root じゃないでしょうし、sudo にするとしても毎回各サーバー台数分パス手入力するのかっていうとちょっとなと思う訳です。
そんなとき見つけたのがこちら。
Automatically Restart PHP-FPM During Deployments | Steve Grunwell
まさにタイトル通りの記事で、例えば visudo コマンドで
php_app_user ALL=(ALL) NOPASSWD: /etc/init.d/php-fpm
を追記すれば、php_app_user さんは /etc/init.d/php-fpm のみ sudo がパスレスで実行できるようになります。ノーパス sudo が許可されさえすれば Capistrano のタスク中で
execute "sudo /etc/init.d/php-fpm restart"
などとすれば OK です(要 set :pty, true
)。
Ansible で構成管理してたりするときは /etc/sudoers への追記に lineinfile モジュールを使うと便利です。横着して echo '<コマンド>' >> /etc/sudoers
などとしても反映されませんでした。
例えば、ただファイル末尾に追記したいだけであれば
- action: 'lineinfile dest=/etc/sudoers insertafter="EOF" line="php_app_user ALL=(ALL) NOPASSWD: /etc/init.d/php-fpm"'
こんな感じになります。