# ============================================================ # Stage 1 — build: نصب وابستگی‌ها در یک virtualenv جدا # ============================================================ FROM python:3.12-slim AS builder ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 WORKDIR /app RUN apt-get update && \ apt-get install -y --no-install-recommends \ gcc \ libpq-dev && \ rm -rf /var/lib/apt/lists/* RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # ============================================================ # Stage 2 — runtime: فقط کتابخانه‌های اجرایی، بدون کامپایلر # ============================================================ FROM python:3.12-slim AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH="/opt/venv/bin:$PATH" WORKDIR /app RUN apt-get update && \ apt-get install -y --no-install-recommends \ libpq5 \ curl && \ rm -rf /var/lib/apt/lists/* && \ groupadd --system app && useradd --system --gid app --home-dir /app app COPY --from=builder /opt/venv /opt/venv COPY --chown=app:app . /app RUN mkdir -p /app/staticfiles /app/logs && \ chown -R app:app /app/staticfiles /app/logs USER app EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD curl -f http://localhost:8000/admin/login/ || exit 1 # Gunicorn به‌عنوان فرمان پیش‌فرض CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]