# Stage 1: Install dependencies FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci # Stage 2: Build the application FROM node:22-alpine AS build WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npx prisma generate RUN npm run build RUN npm prune --production # Stage 3: Production image FROM node:22-alpine AS production WORKDIR /app RUN addgroup -S appgroup && adduser -S appuser -G appgroup COPY --from=build /app/build ./build COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/package.json ./ COPY --from=build /app/prisma ./prisma RUN mkdir -p /app/data && chown -R appuser:appgroup /app USER appuser ENV NODE_ENV=production ENV APP_PORT=3000 ENV APP_HOST=0.0.0.0 EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://localhost:3000/api/health || exit 1 CMD ["node", "build"]