Compare commits

..

1 Commits

Author SHA1 Message Date
Lance Pioch
9ecb47ba16 docker: send all supervised process output to the container log
Only Caddy's output reached docker logs. php-fpm and the queue worker
wrote to supervisord child logfiles under /tmp, so application errors and
failed queue jobs were invisible to 'docker logs' and any log collector.
Route stdout/stderr of every supervised program to fd 1.

Also on the queue worker:
- stopwaitsecs=3600 so in-flight jobs get to finish on shutdown instead
  of being SIGKILLed after supervisord's 10 second default (per the
  Laravel deployment docs; pair with a compose stop_grace_period if jobs
  routinely run long)
- --max-time=3600 so the long-lived worker recycles itself hourly as a
  memory-leak guard; supervisord restarts it automatically
2026-07-15 20:39:45 -04:00
2 changed files with 26 additions and 37 deletions

View File

@@ -4,36 +4,19 @@
# check for .env file or symlink and generate app keys if missing
if [ -f /pelican-data/.env ]; then
echo ".env vars exist."
# load specific env vars from .env used in the entrypoint if they are not already set
for VAR in APP_KEY APP_INSTALLED DB_CONNECTION DB_HOST DB_PORT TRUSTED_PROXIES; do
# load specific env vars from .env used in the entrypoint and they are not already set
for VAR in "APP_KEY" "APP_INSTALLED" "DB_CONNECTION" "DB_HOST" "DB_PORT" "TRUSTED_PROXIES"; do
echo "checking for ${VAR}"
# the container environment takes precedence, matching Laravel's own behavior
eval "CURRENT=\${${VAR}:-}"
if [ -n "${CURRENT}" ]; then
echo "${VAR} already set in environment, skipping"
continue
fi
# match only a real assignment at the start of a line, never comments or
# other variables that merely contain the name
if ! LINE=$(grep -m1 "^${VAR}=" .env); then
echo "didn't find variable to set"
continue
fi
## skip if it looks like it might try to execute code
case "$LINE" in
*'$('*|*'`'*)
echo "var in .env may be executable, skipping"
continue
;;
esac
echo "loading ${VAR} from .env"
# strip quotes and carriage returns so values from quoted or
# Windows-edited .env files export cleanly
export "$(echo "$LINE" | tr -d "\r\"'")"
if (grep "${VAR}" .env | grep -qE "\$\(|=\`|\$#"); then echo "var in .env may be executable or a comment, skipping"; continue; fi
# if the variable is in .env then set it
if (grep -q "${VAR}" .env); then
echo "loading ${VAR} from .env"
export "$(grep "${VAR}" .env | sed 's/"//g')"
continue
fi
## variable wasn't loaded or in the env to set
echo "didn't find variable to set"
done
else
echo ".env vars don't exist."
@@ -43,7 +26,7 @@ else
# manually generate a key because key generate --force fails
if [ -z "${APP_KEY}" ]; then
echo "No key set, Generating key."
APP_KEY="base64:$(head -c 32 /dev/urandom | base64)"
APP_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
echo "APP_KEY=$APP_KEY" > /pelican-data/.env
echo "Generated app key written to .env file"
else
@@ -74,13 +57,8 @@ if [ "${APP_INSTALLED}" = "true" ]; then
echo "using sqlite database"
fi
# run migration, unless disabled (e.g. when running multiple replicas
# against the same database)
if [ "${SKIP_MIGRATIONS:-false}" = "true" ]; then
echo "Skipping migrations (SKIP_MIGRATIONS=true)"
else
php artisan migrate --force
fi
# run migration
php artisan migrate --force
php artisan p:plugin:composer
fi

View File

@@ -25,11 +25,20 @@ password=dummy
command=/usr/local/sbin/php-fpm -F
autostart=true
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:queue-worker]
command=/usr/local/bin/php /var/www/html/artisan queue:work --tries=3
command=/usr/local/bin/php /var/www/html/artisan queue:work --tries=3 --max-time=3600
autostart=true
autorestart=true
; give running jobs time to finish on shutdown instead of killing them
; after supervisord's 10 second default
stopwaitsecs=3600
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true
[program:caddy]
command=caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
@@ -44,4 +53,6 @@ redirect_stderr=true
command=supercronic -overlapping /etc/crontabs/crontab
autostart=true
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true