# Backend: Django achter gunicorn. FROM python:3.12-slim # Geen .pyc-bestanden, ongebufferde logs (handig in Docker). ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 WORKDIR /app # Systeempakketten die psycopg/gunicorn soms nodig hebben. # gosu = privileges veilig droppen in de entrypoint (zie entrypoint.sh). RUN apt-get update \ && apt-get install -y --no-install-recommends libpq5 gosu \ && rm -rf /var/lib/apt/lists/* # Eerst requirements (betere build-cache), dan de rest. COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # entrypoint wacht op de database, migreert en verzamelt statics. RUN chmod +x /app/entrypoint.sh # Maak een niet-root gebruiker aan. De entrypoint start als root (om de # rechten op de gedeelde volumes te kunnen zetten) en zakt daarna met gosu # terug naar appuser, zodat gunicorn zelf NIET als root draait. RUN useradd --create-home --shell /usr/sbin/nologin appuser \ && mkdir -p /app/staticfiles /app/media/pictogrammen /app/media/huisstijl \ && chown -R appuser:appuser /app EXPOSE 8000 ENTRYPOINT ["/app/entrypoint.sh"] # 3 workers is ruim voldoende voor de kleine aantallen in het SO. CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]