# docker/frontend/Dockerfile # ═══════════════════════════════════════════════════════════════ # NOFX Frontend Dockerfile (Node Build → Nginx Runtime) # Versions extracted as ARGs for consistency # ═══════════════════════════════════════════════════════════════ ARG NODE_VERSION=20-alpine ARG NGINX_VERSION=alpine # ────────────────────────────────────────────────────────────── # Build Stage (Node) # ────────────────────────────────────────────────────────────── FROM node:${NODE_VERSION} AS builder WORKDIR /build COPY web/package*.json ./ RUN npm ci COPY web/ ./ RUN npm run build # ────────────────────────────────────────────────────────────── # Runtime Stage (Nginx) # ────────────────────────────────────────────────────────────── FROM nginx:${NGINX_VERSION} COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf COPY --from=builder /build/dist /usr/share/nginx/html EXPOSE 80 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost/health || exit 1 CMD ["nginx", "-g", "daemon off;"]