| # DevisionX progress-tracking tool — single image: React build + FastAPI API. | |
| # ---- stage 1: build the React frontend ---- | |
| FROM node:22-slim AS frontend | |
| WORKDIR /fe | |
| COPY demo1-physical-cad/frontend/package.json demo1-physical-cad/frontend/package-lock.json ./ | |
| RUN npm ci | |
| COPY demo1-physical-cad/frontend/ ./ | |
| RUN npm run build | |
| # ---- stage 2: python runtime serving API + built frontend ---- | |
| FROM python:3.11-slim | |
| WORKDIR /app | |
| COPY demo1-physical-cad/backend/requirements.txt ./ | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| COPY demo1-physical-cad/backend/ ./ | |
| # built SPA -> ./static (served by app.py when present) | |
| COPY --from=frontend /fe/dist ./static | |
| # uploads + SQLite live here; mount a persistent disk at /data in the cloud. | |
| # world-writable so it works whether the host runs the container as root or a | |
| # non-root user (e.g. Hugging Face Spaces). | |
| ENV LIVE_DATA_DIR=/data | |
| RUN mkdir -p /data && chmod 777 /data | |
| EXPOSE 8000 | |
| CMD ["sh", "-c", "uvicorn app:app --host 0.0.0.0 --port ${PORT:-8000}"] | |