# ---------- LaTeX Builder Stage ---------- FROM texlive/texlive:latest AS latex-builder # Install additional dependencies for LaTeX RUN apt-get update && apt-get install -y --no-install-recommends \ git \ inkscape \ make \ fonts-liberation \ fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* \ && inkscape --version WORKDIR /latex # Copy the LaTeX source files from local worktrees COPY latex-qsm /latex/qsm COPY latex-vsm /latex/vsm # Build QSM PDF WORKDIR /latex/qsm RUN latexmk -xelatex -interaction=nonstopmode -halt-on-error -shell-escape Main.tex && \ cp Main.pdf /latex/qsm.pdf && \ latexmk -c # Build VSM PDF WORKDIR /latex/vsm RUN latexmk -xelatex -interaction=nonstopmode -shell-escape Main.tex && \ cp Main.pdf /latex/vsm.pdf && \ latexmk -c # ---------- Base Python Stage ---------- FROM python:3.11-slim AS base ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 # System deps RUN apt-get update && apt-get install -y --no-install-recommends \ tzdata ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # ---------- Dependencies ---------- COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt # ---------- App ---------- # Copy application code COPY src/ /app/src/ # Copy pre-built PDFs from latex-builder stage COPY --from=latex-builder /latex/qsm.pdf /app/assets/qsm.pdf COPY --from=latex-builder /latex/vsm.pdf /app/assets/vsm.pdf # Set Python path ENV PYTHONPATH=/app/src # Configure PDF template paths ENV QSM_TEMPLATE=/app/assets/qsm.pdf \ VSM_TEMPLATE=/app/assets/vsm.pdf EXPOSE 8000 # ---------- Run ---------- CMD ["uvicorn", "service_api:app", "--host", "0.0.0.0", "--port", "8000"]