FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY nest-cli.json tsconfig.json tsconfig.build.json prisma.config.ts ./ COPY prisma ./prisma COPY src ./src RUN npx prisma generate && npm run build FROM node:22-alpine AS run WORKDIR /app ENV NODE_ENV=production COPY --from=build --chown=node:node /app/node_modules ./node_modules COPY --from=build --chown=node:node /app/dist ./dist COPY --from=build --chown=node:node /app/prisma ./prisma COPY --from=build --chown=node:node /app/package.json ./package.json COPY --from=build --chown=node:node /app/prisma.config.ts ./prisma.config.ts RUN chown node:node /app USER node EXPOSE 3000 HEALTHCHECK --interval=5s --timeout=5s --start-period=20s --retries=10 \ CMD node -e "fetch('http://127.0.0.1:3000/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" CMD ["node", "dist/main.js"]