Breathnote
EC2(Amazon Linux 2)にSupervisorを導入する

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メールキューの実装に関する記事も書いてます。

興味のある方はどうぞ。