From d4abc61f24e47b6e63299100eea052ab30337bdb Mon Sep 17 00:00:00 2001 From: Thorsten Bus Date: Tue, 31 Mar 2026 09:17:43 +0200 Subject: [PATCH] feat(docker): add supervisord, PHP and FPM configs --- ...or-logging.conf => fpm-error-logging.conf} | 4 +- build/fpm-healthcheck.conf | 3 -- build/fpm-pool.conf | 28 ++++++++++ build/php-errors.ini | 5 -- build/php.ini | 23 ++++++++ build/supervisord.conf | 54 +++++++++++++++++++ 6 files changed, 108 insertions(+), 9 deletions(-) rename build/{php-error-logging.conf => fpm-error-logging.conf} (50%) delete mode 100644 build/fpm-healthcheck.conf create mode 100644 build/fpm-pool.conf delete mode 100644 build/php-errors.ini create mode 100644 build/php.ini create mode 100644 build/supervisord.conf diff --git a/build/php-error-logging.conf b/build/fpm-error-logging.conf similarity index 50% rename from build/php-error-logging.conf rename to build/fpm-error-logging.conf index 3d382ef..83a04a0 100644 --- a/build/php-error-logging.conf +++ b/build/fpm-error-logging.conf @@ -1,5 +1,7 @@ +; FPM worker error logging to stderr (Docker logs) + [www] catch_workers_output = yes decorate_workers_output = no php_admin_flag[log_errors] = on -php_admin_value[error_log] = /proc/self/fd/2 +php_admin_value[error_log] = /dev/stderr diff --git a/build/fpm-healthcheck.conf b/build/fpm-healthcheck.conf deleted file mode 100644 index 4cb85e2..0000000 --- a/build/fpm-healthcheck.conf +++ /dev/null @@ -1,3 +0,0 @@ -[www] -ping.path = /ping -ping.response = pong diff --git a/build/fpm-pool.conf b/build/fpm-pool.conf new file mode 100644 index 0000000..ec19fd7 --- /dev/null +++ b/build/fpm-pool.conf @@ -0,0 +1,28 @@ +; PHP-FPM pool configuration for Laravel + +[www] +user = www-data +group = www-data + +; Listen on TCP (needed for Docker networking with Caddy) +listen = 9000 +listen.owner = www-data +listen.group = www-data + +; Process management +pm = dynamic +pm.max_children = 10 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 +pm.max_requests = 500 + +; Healthcheck ping endpoint +ping.path = /ping +ping.response = pong + +; Pass environment variables from Docker into PHP +clear_env = no + +; Access log to /dev/null (access logs bloat container logs) +access.log = /dev/null diff --git a/build/php-errors.ini b/build/php-errors.ini deleted file mode 100644 index efc3205..0000000 --- a/build/php-errors.ini +++ /dev/null @@ -1,5 +0,0 @@ -log_errors = On -error_log = /proc/self/fd/2 -error_reporting = E_ALL -display_errors = Off -display_startup_errors = On diff --git a/build/php.ini b/build/php.ini new file mode 100644 index 0000000..79b4318 --- /dev/null +++ b/build/php.ini @@ -0,0 +1,23 @@ +; Production PHP configuration for Laravel Docker deployment + +; Upload limits (matches UPLOAD_MAX_FILE_SIZE in .env = 100MB) +upload_max_filesize = 100M +post_max_size = 110M + +; Memory and execution +memory_limit = 256M +max_execution_time = 300 +max_input_time = 300 + +; Error logging (logs to stderr → Docker logs) +log_errors = On +error_log = /dev/stderr +error_reporting = E_ALL +display_errors = Off +display_startup_errors = Off + +; Timezone +date.timezone = Europe/Berlin + +; File uploads temp dir +upload_tmp_dir = /tmp diff --git a/build/supervisord.conf b/build/supervisord.conf new file mode 100644 index 0000000..cd5d94f --- /dev/null +++ b/build/supervisord.conf @@ -0,0 +1,54 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 +pidfile=/var/run/supervisord.pid + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock + +[unix_http_server] +file=/var/run/supervisor.sock +chmod=0700 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface + +[program:php-fpm] +command=php-fpm --nodaemonize +autostart=true +autorestart=true +priority=10 +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stdout_events_enabled=true +stderr_events_enabled=true + +[program:laravel-worker] +command=php /app/artisan queue:work --sleep=3 --tries=3 --max-time=3600 +autostart=true +autorestart=true +user=www-data +priority=20 +numprocs=1 +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stdout_events_enabled=true +stderr_events_enabled=true + +[program:laravel-scheduler] +command=php /app/artisan schedule:work +autostart=true +autorestart=true +user=www-data +priority=20 +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stdout_events_enabled=true +stderr_events_enabled=true