# Multi-stage Dockerfile for Django backend (zonco site API) # - funzone-site/docker-compose.yml: dev (runserver + bind mount) # - site_backend/docker-compose.yml: prod (gunicorn) FROM python:3.11-slim AS builder ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ postgresql-client \ libpq-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . RUN pip install --upgrade pip && \ pip install --user -r requirements.txt FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH="/home/django/.local/bin:$PATH" \ POSTGRES_HOST=db \ POSTGRES_PORT=5432 \ ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,panel.zoneco.org RUN apt-get update && apt-get install -y --no-install-recommends \ postgresql-client \ libpq5 \ bash \ curl \ && rm -rf /var/lib/apt/lists/* RUN groupadd -r django && useradd -r -g django django RUN mkdir -p /app/staticfiles /app/media && \ chown -R django:django /app WORKDIR /app COPY --from=builder /root/.local /home/django/.local RUN chown -R django:django /home/django/.local COPY --chown=django:django . . COPY --chown=django:django entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh USER django EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD curl -f http://localhost:8000/api/ || exit 1 ENTRYPOINT ["/app/entrypoint.sh"] CMD ["gunicorn", "zonco_backend.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--timeout", "120"]