# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy package files COPY package*.json ./ # Install dependencies RUN npm ci # Copy source code COPY . . # Build the app RUN npm run build # Production stage - use nginx for serving FROM nginx:alpine # Copy nginx config RUN echo 'server {\n\ listen 3000;\n\ server_name _;\n\ root /usr/share/nginx/html;\n\ index index.html;\n\ \n\ location / {\n\ try_files $uri $uri/ /index.html;\n\ }\n\ \n\ location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {\n\ expires 1y;\n\ add_header Cache-Control "public, immutable";\n\ }\n\ }' > /etc/nginx/conf.d/default.conf # Copy built app from builder COPY --from=builder /app/dist /usr/share/nginx/html # Expose port EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD wget --quiet --tries=1 --spider http://localhost:3000/ || exit 1 # Start nginx CMD ["nginx", "-g", "daemon off;"]