# Multi-stage build for production # Stage 1: Build FROM node:20-alpine AS builder # Install OpenSSL for Prisma RUN apk add --no-cache openssl WORKDIR /app # Copy package files COPY package*.json ./ # Install all dependencies (including devDependencies for Prisma generation) RUN npm ci # Copy application files COPY . . # Generate Prisma Client RUN npx prisma generate # Stage 2: Production FROM node:20-alpine # Install OpenSSL for Prisma RUN apk add --no-cache openssl WORKDIR /app # Copy package files COPY package*.json ./ # Install only production dependencies RUN npm ci --only=production # Copy application files and generated Prisma Client from builder COPY --from=builder /app/src ./src COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma # Copy entrypoint script COPY docker-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/docker-entrypoint.sh # Set environment to production ENV NODE_ENV=production # Expose port EXPOSE 3000 # Set entrypoint ENTRYPOINT ["docker-entrypoint.sh"] # Start the application CMD ["node", "src/server.js"]