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"]