#!/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 "$@"