# Combined single-image build for deployment (e.g. Hugging Face Spaces). # Backend serves BOTH the API and the built frontend (same origin, no CORS, # no nginx). One container, runnable with: docker run -p 7860:7860 # # Build from repo root: # docker build -f docker/Dockerfile.deploy -t augur-deploy . # ---- Stage 1: build the frontend ---- FROM node:20-slim AS frontend WORKDIR /app COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install COPY frontend/ . # Same-origin: the frontend calls /predict directly (no /api proxy here). ENV VITE_API_URL=/predict RUN npm run build # Output: /app/dist # ---- Stage 2: backend + bundled frontend ---- FROM python:3.10-slim RUN apt-get update && apt-get install -y --no-install-recommends \ libglib2.0-0 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Python deps (CPU torch wheel, lean serving set) COPY requirements-inference.txt . RUN pip install --no-cache-dir \ --extra-index-url https://download.pytorch.org/whl/cpu \ -r requirements-inference.txt # Backend code + model (onnx + external data) COPY src/ ./src/ COPY backend/ ./backend/ COPY checkpoints/model.onnx* ./checkpoints/ # Built frontend from stage 1 -> served by FastAPI StaticFiles at / COPY --from=frontend /app/dist ./static # HF Spaces expects the app on port 7860 by default EXPOSE 7860 CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "7860"]