FROM node:20-alpine AS builder WORKDIR /app RUN apk add --no-cache openssl COPY package*.json ./ RUN npm ci --no-audit --no-fund COPY prisma ./prisma RUN npx prisma generate COPY tsconfig.json ./ COPY src ./src RUN npm run build FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production RUN apk add --no-cache openssl COPY package*.json ./ RUN npm ci --omit=dev --no-audit --no-fund 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 --from=builder /app/dist ./dist EXPOSE 4000 HEALTHCHECK --interval=30s --timeout=3s --start-period=15s --retries=3 \ CMD wget -q --spider http://localhost:4000/health || exit 1 CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"]