はじめに
初期構築
下記記事を参考に初期構築をします。
リポジトリはこちら
Supervisorを導入
Dockerfileを編集
./docker/php/Dockerfile
内を2箇所修正します。
./docker/php/Dockerfile
FROM php:8.1-fpm-bullseye
ENV TZ=Asia/Tokyo \
# locale
LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8 \
# composer environment
COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_HOME=/composer
COPY --from=composer:2.3 /usr/bin/composer /usr/bin/composer
RUN apt-get update \
&& apt-get -y install --no-install-recommends \
locales \
git \
libzip-dev \
libicu-dev \
libonig-dev \
+ supervisor \
unzip \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& locale-gen ja_JP.UTF-8 \
&& localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 \
&& docker-php-ext-install \
bcmath \
intl \
pdo_mysql \
zip \
&& composer config -g process-timeout 3600 \
&& composer config -g repos.packagist composer https://packagist.org
COPY ./src /var/www/html
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini
+ COPY ./docker/php/laravel-worker.conf /etc/supervisor/conf.d
WORKDIR /var/www/html
RUN composer install -q -n --no-ansi --no-dev --no-scripts --no-progress --prefer-dist \
&& chown -R www-data:www-data ./ \
&& chmod -R 777 storage bootstrap/cache \
&& php artisan optimize:clear \
&& php artisan optimize \
&& php artisan cache:clear \
&& php artisan config:clear \
&& php artisan route:clear \
&& php artisan view:clear \
管理プロセス設定ファイルを./docker/php/laravel-worker.conf
という名前にして、作成します。
./docker/php/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
fargateの側のルートディレクトリを/var/www/html/
と想定した場合の設定になります。
タスク定義を変更する
タスク定義で、Supervisor
を起動させるコマンドを追加させる必要があります。
タスク定義のコマンド変更前
php artisan config:cache && php artisan view:cache && php artisan route:cache && php artisan migrate --force && chown -hR www-data:www-data storage bootstrap/cache && php-fpm && composer install --optimize-autoloader --no-dev
タスク定義のコマンド変更後
service supervisor start && php artisan config:cache && php artisan view:cache && php artisan route:cache && php artisan migrate --force && chown -hR www-data:www-data storage bootstrap/cache && php-fpm && composer install --optimize-autoloader --no-dev
先頭にservice supervisor start &&
を追加しただけです。
注意
service supervisor start &&
をコマンドの先頭ではなく、最後に持ってくると、supervisorが起動しませんでした。
必ず先頭に持っていきましょう。
これで、fargateのタスクが立ち上がると、supervisorが起動します。
supervisorの起動を確認
ECS EXECでfargateのタスク内に入ります。
ECS EXEC方法は、下記記事を参考にしてください。
タスク定義のコマンド変更前
# service supervisor status
supervisord is not running.
# service supervisor start
Starting supervisor: supervisord.
# exit
タスク定義変更後
# service supervisor status
supervisord is running
# supervisorctl status
laravel-worker:laravel-worker_00 RUNNING pid 32, uptime 0:08:48
laravel-worker:laravel-worker_01 RUNNING pid 33, uptime 0:08:48
laravel-workerを確認できました。
参考
supervisordのコマンド