The venv's bin directory gets overwritten when the docker copies the backend directory into the image. This moves the venv outside of the backend so that it does not get overwritten.
36 lines
1.1 KiB
Docker
36 lines
1.1 KiB
Docker
FROM python:3.12-slim-bookworm
|
|
|
|
# Prevent Python from buffering stdout/stderr (useful for Docker logs)
|
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1
|
|
|
|
# Install system dependencies for WeasyPrint (cairo, pango) and PostgreSQL
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libpq-dev \
|
|
libcairo2 \
|
|
libpango-1.0-0 \
|
|
libpangocairo-1.0-0 \
|
|
libgdk-pixbuf2.0-0 \
|
|
libffi-dev \
|
|
shared-mime-info \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# Install uv (fast Python package manager).
|
|
COPY --from=ghcr.io/astral-sh/uv:0.11 /uv /usr/local/bin/uv
|
|
|
|
# Move the venv outside of backend so it doesn't get overwritten with the copy
|
|
ENV UV_PROJECT_ENVIRONMENT=/opt/venv
|
|
|
|
# Install Python dependencies into /app/.venv (layer cached on lockfile changes)
|
|
COPY backend/pyproject.toml backend/uv.lock backend/.python-version ./
|
|
RUN uv sync --frozen --no-install-project
|
|
|
|
# Copy backend source
|
|
COPY backend/ .
|
|
|
|
# Put the venv's binaries on PATH so `python`, `gunicorn`, `celery` etc. resolve.
|
|
ENV PATH="/opt/venv/bin:$PATH"
|
|
|
|
EXPOSE 8000
|