# Build stage FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production && cp -R node_modules /prod_modules RUN npm ci COPY tsconfig*.json ./ COPY src/ ./src/ RUN npm run build && \ rm -rf node_modules && \ mv /prod_modules node_modules # Production stage FROM node:20-alpine WORKDIR /app RUN apk add --no-cache tini COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package*.json ./ COPY prisma/ ./prisma/ RUN npx prisma generate EXPOSE 4000 USER node ENTRYPOINT ["/sbin/tini", "--"] CMD ["node", "dist/main.js"]