# ---------- 1) Build frontend (React + Vite) ---------- FROM node:20-alpine AS frontend-build WORKDIR /frontend # Install frontend dependencies COPY frontend/package*.json ./ RUN npm install # Copy rest of frontend and build COPY frontend/ . RUN npm run build # Vite will output to /frontend/dist by default # ---------- 2) Backend (FastAPI + Python) ---------- FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 WORKDIR /app # System deps (optional but useful for some libs) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* # Install backend dependencies COPY backend/requirements.txt ./backend/requirements.txt RUN pip install --no-cache-dir -r backend/requirements.txt # Copy backend code COPY backend ./backend # Copy built frontend into backend/frontend_dist # FastAPI will serve from this folder later RUN mkdir -p backend/frontend_dist COPY --from=frontend-build /frontend/dist ./backend/frontend_dist # Create data directory for SQLite RUN mkdir -p data # Env vars used in backend/db.py etc. ENV DB_PATH=/app/data/app.db ENV PORT=7860 ENV PYTHONPATH=/app EXPOSE 7860 # Launch FastAPI app (we'll use backend.app.main:app) CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "7860"]