| FROM python:3.12-slim | |
| WORKDIR /app | |
| # System deps (including WeasyPrint dependencies) | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| curl \ | |
| libpango-1.0-0 \ | |
| libpangocairo-1.0-0 \ | |
| libgdk-pixbuf2.0-0 \ | |
| libffi-dev \ | |
| libcairo2 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install uv | |
| COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/ | |
| # Copy project files | |
| COPY pyproject.toml uv.lock* ./ | |
| # Install dependencies | |
| RUN uv sync --frozen --no-dev --no-install-project || uv sync --no-dev --no-install-project | |
| # Install extra PDF deps (fpdf2 for fallback, weasyprint for quality) | |
| RUN uv pip install --system fpdf2 weasyprint 2>/dev/null || uv pip install --system fpdf2 | |
| # Install playwright browsers | |
| RUN uv run playwright install chromium --with-deps 2>/dev/null || true | |
| # Copy app | |
| COPY . . | |
| # Install project | |
| RUN uv sync --frozen --no-dev 2>/dev/null || uv sync --no-dev | |
| EXPOSE 8000 | |
| CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] | |