# ── Build ───────────────────────────────────────────────────────────────────── FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . # VITE_API_URL is injected at build time via --build-arg ARG VITE_API_URL ENV VITE_API_URL=${VITE_API_URL} RUN npm run build # ── Runtime (nginx) ─────────────────────────────────────────────────────────── FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html # SPA fallback: all routes → index.html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://localhost/health || exit 1