# ---- Build stage ---- FROM node:18-slim AS builder WORKDIR /app # Install OpenSSL for Prisma RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/* COPY package*.json ./ RUN npm ci COPY . . # Generate Prisma client RUN npx prisma generate # Build the Next.js application RUN npm run build # ---- Production stage ---- FROM node:18-slim AS runner WORKDIR /app ENV NODE_ENV=production # Install OpenSSL for Prisma and curl for healthcheck RUN apt-get update && apt-get install -y openssl curl && rm -rf /var/lib/apt/lists/* # Create non-root user RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # Copy built output and dependencies COPY --from=builder /app/package*.json ./ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/next.config.js ./ # Create logs directory RUN mkdir -p /app/logs && chown -R nextjs:nodejs /app USER nextjs EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD curl -f http://localhost:3000/api/auth/session || exit 1 CMD ["npm", "run", "start"]