# Stage 1: build FROM node:20-alpine AS builder ARG VITE_STANDALONE=false ENV VITE_STANDALONE=$VITE_STANDALONE WORKDIR /app COPY frontend/package*.json ./ RUN npm ci COPY frontend/ . RUN npm run build # Stage 2: serve FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html # Nginx config: proxy /api and /ws to backend, serve SPA COPY docker/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80