# Multi-stage build for production optimization FROM node:20-alpine AS base # Install dependencies only when needed FROM base AS deps WORKDIR /app # Copy package files COPY package*.json ./ COPY apps/web/package*.json ./apps/web/ COPY packages/shared/package*.json ./packages/shared/ # Install dependencies RUN npm ci --only=production && npm cache clean --force # Development stage FROM base AS dev WORKDIR /app # Copy package files COPY package*.json ./ COPY apps/web/package*.json ./apps/web/ COPY packages/shared/package*.json ./packages/shared/ # Install all dependencies including devDependencies RUN npm ci # Copy source code COPY apps/web ./apps/web COPY packages/shared ./packages/shared WORKDIR /app/apps/web EXPOSE 3000 CMD ["npm", "run", "dev"] # Build stage FROM base AS builder WORKDIR /app # Copy everything needed for build COPY package*.json ./ COPY apps/web ./apps/web COPY packages/shared ./packages/shared # Install dependencies and build RUN npm ci WORKDIR /app/apps/web RUN npm run build # Production stage FROM nginx:alpine AS production # Copy built application COPY --from=builder /app/apps/web/dist /usr/share/nginx/html # Copy nginx configuration COPY apps/web/nginx.conf /etc/nginx/nginx.conf EXPOSE 3000 CMD ["nginx", "-g", "daemon off;"]