# ── Stage 1: build ────────────────────────────────────────────────────────── FROM python:3.12-slim AS build ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 WORKDIR /app # Create virtual environment RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # System deps required by WeasyPrint (build time) RUN apt-get update && \ apt-get install -y --no-install-recommends \ gcc \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf2.0-0 \ libffi-dev \ libcairo2 \ libglib2.0-0 && \ rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # ── Stage 2: runtime ───────────────────────────────────────────────────────── FROM python:3.12-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH="/opt/venv/bin:$PATH" # System deps required by WeasyPrint (runtime) RUN apt-get update && \ apt-get install -y --no-install-recommends \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf2.0-0 \ libcairo2 \ libglib2.0-0 && \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=build /opt/venv /opt/venv COPY . . COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh EXPOSE 8000 ENTRYPOINT ["/entrypoint.sh"]