ARG PYTHON_VERSION=3.11.8 FROM python:${PYTHON_VERSION}-slim-bookworm AS builder ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ UV_PYTHON_DOWNLOADS=0 COPY --from=ghcr.io/astral-sh/uv:0.12.8 /uv /uvx /bin/ WORKDIR /app RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ pkg-config \ libcairo2-dev \ libpango1.0-dev \ libgdk-pixbuf-2.0-dev \ libffi-dev \ libglib2.0-dev \ libjpeg-dev \ libopenjp2-7-dev \ && rm -rf /var/lib/apt/lists/* COPY pyproject.toml uv.lock .python-version ./ RUN --mount=type=cache,target=/root/.cache/uv \ uv sync \ --locked \ --no-install-project \ --no-editable FROM python:${PYTHON_VERSION}-slim-bookworm AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONPATH=/app \ PATH="/app/.venv/bin:$PATH" WORKDIR /app RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ libmagic1 \ poppler-utils \ libcairo2 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf-2.0-0 \ libffi8 \ libglib2.0-0 \ libgl1 \ libjpeg62-turbo \ libopenjp2-7 \ fonts-dejavu-core \ fonts-liberation \ shared-mime-info \ && rm -rf /var/lib/apt/lists/* RUN addgroup --system app && \ adduser --system \ --ingroup app \ --home /home/app \ app COPY --from=builder --chown=app:app /app/.venv /app/.venv COPY --chown=app:app app ./app COPY --chown=app:app manage.py . COPY --chown=app:app alembic ./alembic COPY --chown=app:app alembic.ini . COPY --chown=app:app scripts ./scripts USER app CMD ["python", "manage.py", "run"]