FROM node:22-alpine AS builder WORKDIR /app # Copy package files COPY package*.json ./ # Install all dependencies (including devDependencies) RUN npm ci # Copy the rest of the application COPY . . # Build the application (compiles TypeScript to dist folder) # We also generate prisma client here if prisma schema is present. RUN npm run build # Production image FROM node:22-alpine WORKDIR /app # Copy only package files COPY package*.json ./ # Install only production dependencies RUN npm ci --only=production # Copy built artifacts from the builder stage COPY --from=builder /app/dist ./dist # Copy generated prisma client: COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/node_modules/@prisma/client ./node_modules/@prisma/client EXPOSE 3000 USER node # Start the application CMD ["node", "dist/main"]