From a2ba1e04de34365528cf4bbf329782aab1fea599 Mon Sep 17 00:00:00 2001 From: smortexa Date: Thu, 18 Jan 2024 22:50:02 +0330 Subject: [PATCH] wip --- FrankenPHP.Dockerfile | 11 +++++------ README.md | 12 +++++++++--- RoadRunner.Dockerfile | 3 +-- Swoole.Dockerfile | 3 +-- deployment/start-container | 3 +++ deployment/supervisord.worker.conf | 17 +++++++++++++++++ 6 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 deployment/supervisord.worker.conf diff --git a/FrankenPHP.Dockerfile b/FrankenPHP.Dockerfile index 712e7a0..78452ad 100644 --- a/FrankenPHP.Dockerfile +++ b/FrankenPHP.Dockerfile @@ -1,16 +1,14 @@ # Accepted values: 8.3 - 8.2 - 8.1 ARG PHP_VERSION=8.2 -ARG NODE_VERSION=20-alpine - ARG COMPOSER_VERSION=latest -FROM composer:${COMPOSER_VERSION} AS vendor - ########################################### # Build frontend assets with NPM ########################################### +ARG NODE_VERSION=20-alpine + FROM node:${NODE_VERSION} as build ENV ROOT=/var/www/html @@ -34,6 +32,8 @@ RUN npm run build ########################################### +FROM composer:${COMPOSER_VERSION} AS vendor + FROM php:${PHP_VERSION}-cli-bookworm LABEL maintainer="SMortexa " @@ -175,8 +175,7 @@ RUN mkdir -p \ bootstrap/cache COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.scheduler.conf /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.horizon.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini diff --git a/README.md b/README.md index 2807947..f1e01fe 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,17 @@ docker run -e CONTAINER_MODE=horizon --rm : # Scheduler mode docker run -e CONTAINER_MODE=scheduler --rm : -# http mode with Horizon +# HTTP mode with Horizon docker run -e WITH_HORIZON=true -p :80 --rm : -# http mode with Scheduler +# HTTP mode with Scheduler docker run -e WITH_SCHEDULER=true -p :80 --rm : + +# Worker mode +docker run -e CONTAINER_MODE=worker -e WORKER_COMMAND="php /var/www/html/artisan foo:bar" --rm : + +# Running a single command +docker run --rm : php artisan about ``` ## Configuration @@ -90,7 +96,7 @@ Also, some useful Bash functions and aliases are added in `utilities.sh` that ma ## ToDo - [x] Add support for PHP 8.3 -- [ ] Add support for worker mode +- [x] Add support for worker mode - [ ] Build assets with Bun - [ ] Create standalone and self-executable app - [x] Add support for Horizon diff --git a/RoadRunner.Dockerfile b/RoadRunner.Dockerfile index 2027d4f..879bcca 100644 --- a/RoadRunner.Dockerfile +++ b/RoadRunner.Dockerfile @@ -177,8 +177,7 @@ RUN mkdir -p \ bootstrap/cache COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/supervisord.roadrunner.conf /etc/supervisor/conf.d -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.scheduler.conf /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.horizon.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container diff --git a/Swoole.Dockerfile b/Swoole.Dockerfile index d93d582..f7e4251 100644 --- a/Swoole.Dockerfile +++ b/Swoole.Dockerfile @@ -178,8 +178,7 @@ RUN mkdir -p \ bootstrap/cache COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/Swoole/supervisord.swoole.conf /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.scheduler.conf /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.horizon.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container diff --git a/deployment/start-container b/deployment/start-container index 29d1b18..0bab02b 100644 --- a/deployment/start-container +++ b/deployment/start-container @@ -33,6 +33,9 @@ elif [ ${container_mode} = "horizon" ]; then elif [ ${container_mode} = "scheduler" ]; then initialStuff exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.scheduler.conf +elif [ ${container_mode} = "worker" ]; then + initialStuff + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.worker.conf else echo "Container mode mismatched." exit 1 diff --git a/deployment/supervisord.worker.conf b/deployment/supervisord.worker.conf new file mode 100644 index 0000000..bcf912b --- /dev/null +++ b/deployment/supervisord.worker.conf @@ -0,0 +1,17 @@ +[supervisord] +nodaemon=true +user=%(ENV_NON_ROOT_USER)s +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:worker] +process_name=%(program_name)s_%(process_num)02d +command=%(ENV_WORKER_COMMAND)s +user=%(ENV_NON_ROOT_USER)s +autostart=true +autorestart=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stopwaitsecs=3600