Spaces:
Running
Running
| # syntax=docker/dockerfile:1 | |
| # ============================================================================= | |
| # Docling Studio — single-image build (frontend + backend, multi-target) | |
| # | |
| # Usage: | |
| # docker build --target remote -t docling-studio:remote . | |
| # docker build --target local -t docling-studio:local . | |
| # ============================================================================= | |
| # --- Stage 1: Build frontend assets --- | |
| FROM node:20-alpine AS frontend-build | |
| ARG APP_VERSION=dev | |
| WORKDIR /build | |
| COPY frontend/package*.json ./ | |
| RUN npm ci | |
| COPY frontend/ . | |
| RUN VITE_APP_VERSION=${APP_VERSION} npm run build | |
| # --- Stage 2: Base runtime (Python + Nginx) --- | |
| FROM python:3.12-slim AS base | |
| ARG APP_VERSION=dev | |
| ENV APP_VERSION=${APP_VERSION} | |
| # System deps: poppler (pdf2image), nginx | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| poppler-utils \ | |
| nginx \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Python deps (common) | |
| WORKDIR /app | |
| COPY document-parser/requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # Backend code | |
| COPY document-parser/ . | |
| # Frontend static files | |
| COPY --from=frontend-build /build/dist /usr/share/nginx/html | |
| # Nginx config | |
| COPY nginx.conf /etc/nginx/sites-enabled/default | |
| # Non-root user | |
| RUN useradd --create-home --shell /bin/bash appuser | |
| # Data directories | |
| RUN mkdir -p /app/uploads /app/data && chown -R appuser:appuser /app | |
| ENV UPLOAD_DIR=/app/uploads | |
| ENV DB_PATH=/app/data/docling_studio.db | |
| EXPOSE 3000 | |
| CMD ["sh", "-c", "nginx && exec su appuser -c 'uvicorn main:app --host 127.0.0.1 --port 8000'"] | |
| # --- Remote: lightweight, delegates to Docling Serve --- | |
| FROM base AS remote | |
| ENV CONVERSION_ENGINE=remote | |
| # --- Local: full Docling in-process --- | |
| FROM base AS local | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgl1 \ | |
| libglib2.0-0 \ | |
| && rm -rf /var/lib/apt/lists/* | |
| COPY document-parser/requirements-local.txt . | |
| RUN pip install --no-cache-dir torch torchvision --index-url https://download.pytorch.org/whl/cpu \ | |
| && pip install --no-cache-dir -r requirements-local.txt | |
| RUN chown -R appuser:appuser /app \ | |
| && chown -R appuser:appuser /usr/local/lib/python3.12/site-packages/rapidocr/models | |
| ENV CONVERSION_ENGINE=local | |