# Multi-stage Dockerfile for Prisma React App # ============ Stage 1: Build ============ FROM node:20-alpine AS builder # Set working directory WORKDIR /app # Copy package files COPY prisma/package.json prisma/package-lock.json* ./ # Install dependencies RUN npm ci # Copy source code COPY prisma/ . # Build the application RUN npm run build # ============ Stage 2: Production ============ FROM node:20-alpine AS production # Install serve globally RUN npm install -g serve # Set working directory WORKDIR /app # Copy built files from builder stage COPY --from=builder /app/dist ./dist # Expose port 3000 EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1 # Start the application with serve CMD ["serve", "-s", "dist", "-l", "3000"] # ============ Stage 3: Development (optional) ============ FROM node:20-alpine AS development WORKDIR /app # Copy package files COPY prisma/package.json prisma/package-lock.json* ./ # Install dependencies RUN npm ci # Copy source code COPY prisma/ . # Expose port 3000 EXPOSE 3000 # Start development server CMD ["npm", "run", "dev"]