#!/usr/bin/env bash set -euo pipefail echo "==========================================" echo " docker-laravel container starting" echo "==========================================" echo "Date: $(date)" echo "Hostname: $(hostname)" echo "PHP: $(php -r 'echo PHP_VERSION;')" echo "Node: $(node --version 2>/dev/null || echo 'n/a')" echo "Composer: $(composer --version --no-ansi 2>/dev/null | head -1 || echo 'n/a')" echo "==========================================" start_ts=$(date +%s) # --------------------------------------------------------------------------- # 1) Writable directories # --------------------------------------------------------------------------- echo "[1/5] Preparing writable dirs..." mkdir -p /.composer && chmod 0777 /.composer 2>/dev/null || true if command -v git >/dev/null 2>&1; then if git config --system --get-all safe.directory 2>/dev/null | grep -Fxq "/var/www/html"; then echo " git safe.directory already includes /var/www/html" else git config --system --add safe.directory /var/www/html 2>/dev/null || true echo " Added git safe.directory: /var/www/html" fi fi if [ "${ENABLE_LARAVEL_PERMS:-0}" = "1" ]; then echo " ENABLE_LARAVEL_PERMS=1 — applying targeted writable-dir fixes" for p in /var/www/html/storage /var/www/html/bootstrap/cache; do if [ -d "$p" ]; then chmod ug+rwX "$p" 2>/dev/null || true else echo " WARN: $p does not exist" fi done else echo " Skipping Laravel chmod (set ENABLE_LARAVEL_PERMS=1 to enable)" fi mkdir -p /var/log/supervisor /var/log/nginx /var/log/php # --------------------------------------------------------------------------- # 2) Generate optional supervisor programs based on ENABLE_* env vars # --------------------------------------------------------------------------- echo "[2/5] Configuring services..." echo " Core programs (conf.d/):" for f in /etc/supervisor/conf.d/*.conf; do [ -f "$f" ] && echo " $(basename "$f")" done LARAVEL_D="/etc/supervisor/laravel.d" rm -f "${LARAVEL_D}"/*.conf 2>/dev/null || true if [ "${ENABLE_QUEUE:-false}" = "true" ]; then echo " + queue worker enabled" cat > "${LARAVEL_D}/queue.conf" <<'CONF' [program:queue] command=/usr/local/bin/php -d variables_order=EGPCS /var/www/html/artisan queue:work --tries=3 --sleep=5 --timeout=600 --max-jobs=500 --max-time=3600 autostart=true autorestart=true user=www-data priority=20 startsecs=5 stdout_logfile=/proc/1/fd/1 stdout_logfile_maxbytes=0 stderr_logfile=/proc/1/fd/2 stderr_logfile_maxbytes=0 CONF fi if [ "${ENABLE_SCHEDULER:-false}" = "true" ]; then echo " + scheduler enabled" cat > "${LARAVEL_D}/scheduler.conf" <<'CONF' [program:scheduler] command=/usr/local/bin/php -d variables_order=EGPCS /var/www/html/artisan schedule:work autostart=true autorestart=true user=www-data priority=20 startsecs=5 stdout_logfile=/proc/1/fd/1 stdout_logfile_maxbytes=0 stderr_logfile=/proc/1/fd/2 stderr_logfile_maxbytes=0 CONF fi if [ "${ENABLE_HORIZON:-false}" = "true" ]; then echo " + Horizon enabled" cat > "${LARAVEL_D}/horizon.conf" <<'CONF' [program:horizon] command=/usr/local/bin/php -d variables_order=EGPCS /var/www/html/artisan horizon autostart=true autorestart=true user=www-data priority=20 startsecs=5 stdout_logfile=/proc/1/fd/1 stdout_logfile_maxbytes=0 stderr_logfile=/proc/1/fd/2 stderr_logfile_maxbytes=0 CONF fi # Report custom programs CUSTOM_COUNT=$(find /etc/supervisor/custom.d/ -name '*.conf' 2>/dev/null | wc -l) if [ "$CUSTOM_COUNT" -gt 0 ]; then echo " Custom programs (custom.d/):" for f in /etc/supervisor/custom.d/*.conf; do [ -f "$f" ] && echo " $(basename "$f")" done fi # --------------------------------------------------------------------------- # 3) Config tests # --------------------------------------------------------------------------- echo "[3/5] Testing configs..." php-fpm -t 2>&1 || echo " PHP-FPM config test failed (continuing)" nginx -t 2>&1 || echo " Nginx config test failed (continuing)" # --------------------------------------------------------------------------- # 4) Diagnostics # --------------------------------------------------------------------------- echo "[4/5] Environment" echo " APP_ENV=${APP_ENV:-}" echo " APP_DEBUG=${APP_DEBUG:-}" echo " ENABLE_QUEUE=${ENABLE_QUEUE:-false}" echo " ENABLE_SCHEDULER=${ENABLE_SCHEDULER:-false}" echo " ENABLE_HORIZON=${ENABLE_HORIZON:-false}" end_ts=$(date +%s) echo " Preflight took $((end_ts - start_ts))s" # --------------------------------------------------------------------------- # 5) Launch # --------------------------------------------------------------------------- if [ $# -gt 0 ]; then echo "[5/5] Running ad-hoc command: $*" php-fpm -D sleep 1 nginx exec gosu 1000 "$@" else echo "[5/5] Starting Supervisord..." echo "==========================================" exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf fi