EC2(Amazon Linux 2)にSupervisorを導入する
Laravelのキューワーカーを用いたメール送信機能を実装したのですが、コマンド永続化のため、サーバへSupervisorを導入する必要がありました。
今回の案件では、サーバにAWSのEC2(Amazon Linux 2)を採用していたので、以下の記事を参考にしながら作業を行いました。
本記事は参考記事とほぼ同じ内容ですが、自分で見返してサッと導入できるようにまとめています。
手順書
これより下のコマンドではsudo
を省略しています。コマンドの実行ユーザに応じて追加してください。
1. サーバ環境を確認
Supervisorが未導入であることを確認します。
shell
supervisord -v
Supervisorのインストールに必要なpip3
が導入済みであることを確認します。
shell
pip3 -V
2. インストール
shell
pip3 install supervisor
3. Supervisorを設定
各種ディレクトリを作成します。
shell
mkdir /etc/supervisord
mkdir /etc/supervisord/conf.d
設定ファイルの雛形を作成します。
shell
echo_supervisord_conf > /etc/supervisord/supervisord.conf
設定ファイルの最下部に、ファイルパスを追加します。
supervisord.conf
[include]
files = /etc/supervisord/conf.d/*.conf
4. Laravel用の設定ファイルを追加
/etc/supervisord/conf.d
の直下にlaravel-queue-worker.conf
を作成します。
laravel-queue-worker.conf
[program:laravel-queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /<[PROJECT_PATH]>/artisan queue:work --sleep=60
autostart=true
autorestart=true
user=ec2-user
numprocs=1
redirect_stderr=true
stdout_logfile=/<[PROJECT_PATH]>/storage/logs/laravel-worker.log
5. サービスとして登録
systemctl
コマンドで呼び出せるようにします。
shell
vi /etc/systemd/system/supervisord.service
supervisord.service
[Unit]
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord/supervisord.conf
ExecReload=/usr/local/bin/supervisorctl reload
ExecStop=/usr/local/bin/supervisorctl shutdown
User=root
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
6. 動作確認 & 自動起動の設定
各種systemctl
コマンドで動作確認。
shell
# 起動
systemctl start supervisord
# 再起動
systemctl restart supervisord
# ステータスを確認
systemctl status supervisord
# 停止
systemctl stop supervisord
問題なければ自動起動するよう設定しておきます。
shell
systemctl enable supervisord
所感
どうでもいい話ですが、稼働中の本番環境でこういった作業するの緊張しますよね。
Supervisorの導入に関連して、Amazon SQSを使ったLaravelメールキューの実装に関する記事も書いてます。
興味のある方はどうぞ。