# Single image for API (uvicorn) and UI (Streamlit); compose overrides the command per service. FROM python:3.11-slim-bookworm ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONPATH=/app \ PIP_NO_CACHE_DIR=1 \ ANONYMIZED_TELEMETRY=FALSE WORKDIR /app # PyMuPDF / scientific wheels are manylinux; minimal OS deps for SSL and fonts used by PDF tooling. RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --upgrade pip && pip install -r requirements.txt COPY api/ api/ COPY models/ models/ COPY rag/ rag/ COPY storage/ storage/ COPY workers/ workers/ COPY app.py streamlit_app.py main.py pyproject.toml README.md ./ EXPOSE 8000 8501 CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"]