ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
Docker だけで supervisor を使わずにお手軽に Laravel queue worker を監視するたった一つの冴えた方法
NMC
3 years
Laravel で queue を使う場合は、
worker プロセスがエラーで落ちっぱなしにならないように、
supervisor を使えと公式ドキュメントにも書かれています。
https://laravel.com/docs/8.x/queues#installing-supervisor
ですが docker を使っているなら、もっと簡単な方法があります!
Container
まず、worker process を動かすための containerを別に用意しましょう。
docker-compose.yml
# laravel queue worker 用の container
container_worker:
build: ./docker/php # container_php と同じ Dockerfile を使用する。
working_dir: /var/www
entrypoint: ["php", "artisan", "queue:listen"]
restart: unless-stopped
# http access を処理する container
container_php:
build: ./docker/php
image は http access を処理する php と同じにします。
image が同じなら無駄に容量は喰いません!
Entrypoint
entrypoint は、記述されたコマンドをコンテナ起動時に実行してくれます。
そして、その process が停止すると container も停止されます。
working_dir: /var/www
entrypoint: ["php", "artisan", "queue:listen"]
こう記述した場合は、
OS 起動後、
$ cd /var/www
$ php artisan queue:listen
としたのと同じになります。
Supervising
queue worker が落ちたら container が落ちますので、
container を自動で再起動するように設定しましょう。
restart: unless-stopped
これで手動で停止する以外の方法で container が停止したら、自動的に再起動してくれます。
本当は Docker の公式ドキュメント にあるように
restart: on-failure[:max-retries]
と、リトライ回数を指定したいところですが、
laravel queue worker は不正終了でも exit 0 で終了するようです。
そのため、正常終了と判断されて再起動してくれません。
Docker だけで supervisor を使わずにお手軽に Laravel queue worker を監視するたった一つの冴えた方法
Docker だけで supervisor を使わずにお手軽に Laravel queue worker を監視するたった一つの冴えた方法
2021-09-14 20:43:03
2021-09-14 20:58:05
test