# ---------- BUILD STAGE ---------- FROM node:20-alpine AS builder WORKDIR /app # Only install deps first (cache friendly) COPY package*.json ./ RUN npm ci # Copy source COPY . . # Generate prisma + build RUN npx prisma generate RUN npm run build # ---------- PRODUCTION STAGE ---------- FROM node:20-alpine WORKDIR /app ENV NODE_ENV=production # Only install production deps COPY package*.json ./ RUN npm ci --omit=dev && npm cache clean --force # Copy Prisma generated client + schema COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma COPY --from=builder /app/prisma ./prisma # Copy built app COPY --from=builder /app/dist ./dist # Uploads folder RUN mkdir -p /app/uploads EXPOSE 5000 CMD ["node", "dist/server.js"]