# 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