|
# 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"] |
|
|