# Stage 1: Install production dependencies FROM --platform=linux/amd64 node:20-slim AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev # Stage 2: Build the application FROM --platform=linux/amd64 node:20-slim AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NODE_ENV=production RUN npm run build # Stage 3: Production runner FROM --platform=linux/amd64 node:20-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=3000 ENV HOSTNAME=0.0.0.0 RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs # Copy standalone server and static assets COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # Copy seeds/forms for form library import feature (runtime dependency) COPY --from=builder --chown=nextjs:nodejs /app/seeds ./seeds # Create uploads directory (will be mounted as volume) RUN mkdir -p uploads && chown nextjs:nodejs uploads USER nextjs EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1 CMD ["node", "server.js"]