# syntax=docker/dockerfile:1 # Local development Dockerfile (avoids CI-only build metadata files) # ── Stage 1: Python dependency builder ────────────────────────────────────── FROM python:3.14.3-slim AS builder WORKDIR /build RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libffi-dev \ && rm -rf /var/lib/apt/lists/* # Create an isolated virtual environment RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 COPY requirements.txt /build/ RUN pip install --no-cache-dir -r requirements.txt \ && find /opt/venv -type f -name "*.pyc" -delete \ && find /opt/venv -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true # ── Stage 2: Documentation builder ────────────────────────────────────────── FROM python:3.14.3-slim AS docs-builder WORKDIR /docs COPY docs/requirements.txt /docs/requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY docs /docs/docs COPY mkdocs.yml /docs/mkdocs.yml RUN mkdocs build --config-file /docs/mkdocs.yml --site-dir /docs/docs_build # ── Stage 3: Runtime image ─────────────────────────────────────────────────── FROM python:3.14.3-slim WORKDIR /app COPY --from=builder /opt/venv /opt/venv # Install system-level OCR tools required for local OCR workflows: # tesseract-ocr – OCR engine used by pytesseract and ocrmypdf # ghostscript – required by ocrmypdf for PDF/PS operations # poppler-utils – provides pdfinfo/pdftoppm used by pdf2image # unpaper – optional deskewing pre-processor used by ocrmypdf # wget – used by ocr_language_manager to download tessdata files RUN apt-get update && apt-get install -y --no-install-recommends \ tesseract-ocr \ ghostscript \ poppler-utils \ unpaper \ wget \ && apt-get clean && rm -rf /var/lib/apt/lists/* COPY ./app /app/app COPY ./frontend /app/frontend COPY ./migrations /app/migrations COPY ./alembic.ini /app/alembic.ini COPY ./LICENSE /app/LICENSE COPY ./VERSION /app/VERSION COPY ./BUILD_DATE /app/BUILD_DATE # Copy the pre-built MkDocs documentation site (served at /help) COPY --from=docs-builder /docs/docs_build /app/docs_build # Local fallbacks for build metadata RUN echo "local" > /app/GIT_SHA \ && echo "local" > /app/RUNTIME_INFO # Create necessary runtime directories in a single layer RUN mkdir -p /app/runtime_info /workdir ENV PATH="/opt/venv/bin:$PATH" \ PYTHONPATH=/app \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]