# ===== Stage 1: Build dependencies ===== FROM python:3.12-slim AS builder WORKDIR /app # Install uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv # Copy dependency manifests COPY backend/pyproject.toml . COPY backend/.env.example . # Create venv and install deps RUN uv venv /opt/venv && \ uv pip install --python /opt/venv/bin/python \ "fastapi>=0.104.0" \ "uvicorn[standard]>=0.24.0" \ "python-multipart>=0.0.6" \ "langextract[all]>=0.1.0" \ "langchain>=0.2.0" \ "langchain-openai>=0.1.0" \ "langgraph>=0.1.0" \ "networkx>=3.0" \ "python-dotenv>=1.0.0" \ "requests>=2.31.0" \ "beautifulsoup4>=4.12.0" # ===== Stage 2: Runtime ===== FROM python:3.12-slim WORKDIR /app # Copy venv from builder COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Copy backend source COPY backend/ ./backend/ # Copy mineru_mvp (used by indexing pipeline) COPY mineru_mvp/ ./mineru_mvp/ # Create data directories RUN mkdir -p /app/backend/data/uploads \ /app/backend/data/jobs \ /app/backend/data/kg \ /app/backend/data/batches \ /app/mineru_mvp/output # Update paths for container environment ENV MINERU_PYTHON=/opt/venv/bin/python ENV MINERU_PIPELINE=/app/mineru_mvp/pipeline.py EXPOSE 8000 WORKDIR /app/backend CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]