# Stage 1: Build FROM node:20-alpine AS builder WORKDIR /app # Install server deps and build COPY server/package*.json ./server/ RUN cd server && npm ci COPY server/ ./server/ RUN cd server && npm run db:generate && npm run build # Install client deps and build COPY client/package*.json ./client/ RUN cd client && npm ci COPY client/ ./client/ RUN cd client && npm run build # Stage 2: Runtime FROM node:20-alpine AS runtime WORKDIR /app ENV NODE_ENV=production # Copy server production deps COPY server/package*.json ./server/ RUN cd server && npm ci --omit=dev # Copy built server COPY --from=builder /app/server/dist ./server/dist COPY --from=builder /app/server/prisma ./server/prisma COPY --from=builder /app/server/node_modules/.prisma ./server/node_modules/.prisma COPY --from=builder /app/server/node_modules/@prisma ./server/node_modules/@prisma # Copy built client COPY --from=builder /app/client/dist ./client/dist EXPOSE 8080 WORKDIR /app/server CMD ["sh", "-c", "npx prisma migrate deploy && node dist/index.js"]