# ---------- Front‑end build stage ---------- FROM node:18-alpine AS frontend-build WORKDIR /app/frontend COPY frontend/package*.json ./ RUN npm ci --only=production COPY frontend/ ./ RUN npm run build && npm run export # ---------- Back‑end stage ---------- FROM python:3.11-slim AS backend WORKDIR /app/backend # <─ matches compose volumes # System build deps RUN apt-get update && apt-get install -y gcc curl && rm -rf /var/lib/apt/lists/* # Python deps COPY backend/requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # App source code COPY backend/ ./ # Static export from previous stage COPY --from=frontend-build /app/frontend/out /app/frontend_out # Create folders & DB file and make them writable RUN mkdir -p /app/backend/uploads /app/backend/chroma_db \ && touch /app/backend/pdf_chatbot.db \ && chmod -R 777 /app/backend/uploads /app/backend/chroma_db /app/backend/pdf_chatbot.db # Expose API port EXPOSE 8000 # Small health‑check HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 # Start FastAPI CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]