# backend/Dockerfile — Django + DRF (Gunicorn). تصویر بدون state.
FROM python:3.12-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1

WORKDIR /app

# وابستگی‌های سیستمی برای psycopg و Pillow
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        build-essential libpq-dev curl \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt requirements-dev.txt ./
RUN pip install --upgrade pip \
    && pip install -r requirements.txt

COPY . .

EXPOSE 8000

# مهاجرت در بوت اجرا نمی‌شود (با چند نودِ Stateless، migrate هم‌زمان race می‌شود) —
# migrate به گامِ release منتقل شد (GoToServer.md §۸). این‌جا فقط سرو می‌کنیم.
# Gunicorn تیون‌پذیر با env (پیشنهاد: workers = 2×vCPU + 1).
# --preload: کدِ اپ یک‌بار قبل از forkِ workerها لود می‌شود ⇒ صفحاتِ مشترکِ حافظه (RAMِ کمتر روی ۲GB).
# --max-requests + jitter: بازچرخانیِ دوره‌ایِ worker ⇒ جلوگیری از نشتیِ تدریجیِ حافظه (P1-5).
CMD ["sh", "-c", "gunicorn config.wsgi:application --bind 0.0.0.0:8000 \
     --workers ${GUNICORN_WORKERS:-3} --threads ${GUNICORN_THREADS:-2} \
     --timeout ${GUNICORN_TIMEOUT:-60} --preload \
     --max-requests 1000 --max-requests-jitter 100 \
     --access-logfile - --error-logfile -"]
