FROM python:3.12-slim AS builder ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ python3-dev \ musl-dev \ libpq-dev \ && rm -rf /var/lib/apt/lists/* COPY pyproject.toml ./ RUN pip install --upgrade pip setuptools wheel && \ pip install -e "." COPY . . RUN python manage.py collectstatic --noinput || true FROM python:3.12-slim ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ DJANGO_SETTINGS_MODULE=config.settings.prod WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ postgresql-client \ curl \ && rm -rf /var/lib/apt/lists/* RUN groupadd -r appuser && useradd -r -g appuser appuser COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=builder /usr/local/bin /usr/local/bin COPY --from=builder /app /app RUN mkdir -p logs media staticfiles && \ chown -R appuser:appuser /app COPY entrypoint.prod.sh /app/entrypoint.prod.sh RUN chmod +x /app/entrypoint.prod.sh USER appuser EXPOSE 8000 ENTRYPOINT ["/app/entrypoint.prod.sh"] CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--timeout", "120"]