| # Multi-stage build for ChatApp | |
| # ----- Build Stage ----- | |
| FROM node:18 AS builder | |
| WORKDIR /app | |
| # Install root dependencies and workspaces | |
| COPY package.json package-lock.json* ./ | |
| COPY client/package.json ./client/package.json | |
| COPY server/package.json ./server/package.json | |
| RUN npm install | |
| # Copy source code | |
| COPY . . | |
| # Build client and server | |
| RUN npm run build | |
| # Remove development dependencies to reduce size | |
| RUN npm prune --omit=dev --workspaces | |
| # ----- Production Stage ----- | |
| FROM node:18-alpine AS runner | |
| WORKDIR /app | |
| # Copy built application from builder | |
| COPY --from=builder /app/package.json ./ | |
| COPY --from=builder /app/client/package.json ./client/package.json | |
| COPY --from=builder /app/server/package.json ./server/package.json | |
| COPY --from=builder /app/client/dist ./client/dist | |
| COPY --from=builder /app/server/dist ./server/dist | |
| COPY --from=builder /app/client/node_modules ./client/node_modules | |
| COPY --from=builder /app/server/node_modules ./server/node_modules | |
| ENV NODE_ENV=production | |
| ENV PORT=3001 | |
| EXPOSE 3001 | |
| CMD ["node", "server/dist/index.js"] | |