# 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/api/package*.json ./apps/api/ COPY packages/database/package*.json ./packages/database/ 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/api/package*.json ./apps/api/ COPY packages/database/package*.json ./packages/database/ COPY packages/shared/package*.json ./packages/shared/ # Install all dependencies including devDependencies RUN npm ci # Copy source code COPY apps/api ./apps/api COPY packages/database ./packages/database COPY packages/shared ./packages/shared WORKDIR /app/apps/api EXPOSE 3333 CMD ["npm", "run", "dev"] # Build stage FROM base AS builder WORKDIR /app # Copy everything needed for build COPY package*.json ./ COPY apps/api ./apps/api COPY packages/database ./packages/database COPY packages/shared ./packages/shared # Install dependencies and build RUN npm ci WORKDIR /app/apps/api RUN npm run build # Production stage FROM base AS production WORKDIR /app # Copy production dependencies COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/apps/api/node_modules ./apps/api/node_modules # Copy built application COPY --from=builder /app/apps/api/dist ./apps/api/dist COPY --from=builder /app/apps/api/package.json ./apps/api/ WORKDIR /app/apps/api # Create non-root user RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nodejs USER nodejs EXPOSE 3333 CMD ["npm", "start"]