roosterwijs/backend/entrypoint.sh

43 lines
1.4 KiB
Bash

#!/usr/bin/env bash
# Wordt bij elke containerstart uitgevoerd, vóór gunicorn.
set -e
# De container start als root, zodat we de rechten op de gedeelde volumes
# (static + media) goed kunnen zetten — ook als die ooit als root zijn
# aangemaakt (anders: 'Permission denied' bij het uploaden van bv. een logo).
# Daarna draaien migraties, collectstatic én gunicorn als 'appuser'.
RUN_AS=""
if [ "$(id -u)" = "0" ]; then
mkdir -p /app/media/pictogrammen /app/media/huisstijl /app/staticfiles
chown -R appuser:appuser /app/media /app/staticfiles || true
RUN_AS="gosu appuser"
fi
# Wacht tot PostgreSQL bereikbaar is (alleen als we Postgres gebruiken).
if [ -n "$POSTGRES_DB" ]; then
echo "Wachten op PostgreSQL op ${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}..."
python <<'PY'
import os, time, socket
host = os.environ.get("POSTGRES_HOST", "db")
port = int(os.environ.get("POSTGRES_PORT", "5432"))
for _ in range(60):
try:
with socket.create_connection((host, port), timeout=2):
print("Database is bereikbaar.")
break
except OSError:
time.sleep(1)
else:
raise SystemExit("Database niet bereikbaar na 60s.")
PY
fi
# Migraties uitvoeren en statische bestanden verzamelen (als appuser).
echo "Migraties uitvoeren..."
$RUN_AS python manage.py migrate --noinput
echo "Statische bestanden verzamelen..."
$RUN_AS python manage.py collectstatic --noinput
# Geef door aan het CMD (gunicorn), als appuser.
exec $RUN_AS "$@"