All checks were successful
Deploy / deploy (push) Successful in 30s
- Full FastAPI sync engine: master→replica document sync via paperless REST API - Web UI: dashboard, replicas, logs, settings (Jinja2 + HTMX + Pico CSS) - APScheduler background sync, SSE live log stream, Prometheus metrics - Fernet encryption for API tokens at rest - pngx.env credential file: written on save, pre-fills forms on load - Dockerfile with layer-cached uv build, Python healthcheck - docker-compose with host networking for Tailscale access - Gitea Actions workflow: version bump, secret injection, docker compose deploy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
888 B
Docker
29 lines
888 B
Docker
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# Install uv
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
|
|
# Install dependencies first (cached layer — only invalidates when pyproject.toml changes)
|
|
COPY pyproject.toml .
|
|
RUN uv pip install --system --no-cache fastapi uvicorn[standard] sqlmodel apscheduler \
|
|
cryptography httpx jinja2 python-multipart prometheus-client aiofiles
|
|
|
|
# Copy application code
|
|
COPY app/ ./app/
|
|
|
|
# Install the package itself (editable-free, no pip install of the whole project)
|
|
RUN uv pip install --system --no-cache --no-deps .
|
|
|
|
ARG APP_VERSION=dev
|
|
LABEL org.opencontainers.image.version="${APP_VERSION}"
|
|
|
|
VOLUME ["/data"]
|
|
EXPOSE 8000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
|
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')" || exit 1
|
|
|
|
CMD ["python", "-m", "app.main"]
|