Supervisor構築
今回のインフラ構成
Dockerのコンテナ
- Laravel(phpコンテナ)
- Nginx
- dbサーバ(mysql)
suervisor導入理由
laravelにはデフォルトで以下のコマンドが存在するが落ちる可能性が高く落ちたときにjobバッチが実行されない危険性があったのでsupervisorを導入してlinux上で監視させ落ちたときに自動で再起動させるように設定
php artisan queue:work
実装方法
まずsupervisorを導入したいコンテナのdockerFileにsupervisorインストールさせるコマンドを追記する
今回はphpコンテナを監視させたいのでphpのdockerFileに以下を追記する
RUN apt-get update supervisor
次にsupervisord.conf(設定ファイル)を作成する
[supervisord]
// trueに設定しないと起動時にデーモンモードになってしまい落ちるので必ずtureにする
nodaemon=true
[program:php-fpm]
command=php-fpm --nodaemonize
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
// xxxはjob実行時にdispatchするQueueの名前
[program:xxx]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work --queue=xxx --timeout=0 --backoff=10
autostart=true
autorestart=true
user=root
numprocs=3
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
そしてこのsupervisord.confをdockerコンテナ上にコピーするコマンドをphpのdockerfileに記入
RUN mkdir -p /var/log/supervisor
COPY ./supervisord.conf /etc/supervisor/conf.d
これでdockerを立ち上げ直すとsupervisorが使用できるようになります
使用するコマンド
- Jobを修正した場合は以下のコマンドを実行し直しsupervisorを立ち上げ直す必要がある
supervisorctl reload
- supervisorが起動しているかどうかの確認
supervisorctl status