Backend (replaces PHP api.php + auth.php): - FastAPI app with routers: jobs, auth, billing - Supabase JWT authentication in deps.py - Celery + Redis job queue (process_pdf_task) - MinIO S3-compatible storage service - PDF checker wrapper (delegates to enterprise_pdf_checker.py) - Stripe billing: checkout, portal, webhook handler Multi-tenancy (Phase 3): - Alembic migration 001: workspaces, workspace_members, jobs, usage_events - Row-Level Security on all tenant tables via app.workspace_id session var - Monthly quota enforcement per workspace (402 on exceeded) - Plan tiers: free(5) / pro(100) / business(unlimited) Config: - pydantic-settings based config.py (no hardcoded values) - docker-compose.yml rewritten: postgres, redis, minio, api, celery Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
694 B
Docker
28 lines
694 B
Docker
FROM python:3.12-slim
|
|
|
|
# System deps for PDF processing
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
libpoppler-cpp-dev \
|
|
poppler-utils \
|
|
default-jre-headless \
|
|
libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
|
|
libgdk-pixbuf2.0-0 libffi-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install uv
|
|
RUN pip install uv --no-cache-dir
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy backend
|
|
COPY backend/pyproject.toml .
|
|
RUN uv sync --no-dev
|
|
|
|
# Copy entire repo (checker engine lives at repo root)
|
|
COPY . /repo
|
|
ENV PYTHONPATH=/repo
|
|
|
|
COPY backend/ .
|
|
|
|
CMD ["uv", "run", "gunicorn", "app.main:app", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "-w", "2"]
|