| # Multi-stage production frontend: Vite build → nginx static server with /api proxy. | |
| FROM node:20-alpine AS build | |
| WORKDIR /app | |
| COPY package.json package-lock.json ./ | |
| RUN npm ci | |
| COPY . . | |
| # Baked into the bundle at build time (see frontend/src/api.ts) | |
| ARG VITE_API_BASE_URL=/api | |
| ARG VITE_API_KEY= | |
| ENV VITE_API_BASE_URL=$VITE_API_BASE_URL | |
| ENV VITE_API_KEY=$VITE_API_KEY | |
| RUN npm run build | |
| FROM nginx:1.27-alpine | |
| RUN apk add --no-cache curl | |
| COPY nginx.conf /etc/nginx/conf.d/default.conf | |
| COPY --from=build /app/dist /usr/share/nginx/html | |
| EXPOSE 80 | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 \ | |
| CMD curl -f http://127.0.0.1/ || exit 1 | |
| CMD ["nginx", "-g", "daemon off;"] | |