# ERP Nutzfahrzeuge — Frontend Dockerfile # Node 18 + Next.js 14.2.5 standalone build # Multi-stage build: deps -> builder -> runner # ============ Stage 1: Dependencies ============ FROM node:18-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci # ============ Stage 2: Build ============ FROM node:18-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . # Build-time environment variables ARG NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL RUN npm run build # ============ Stage 3: Runner (production) ============ FROM node:18-alpine AS runner WORKDIR /app ENV NODE_ENV=production # Non-root user for security RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs # Copy standalone build output COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=5s --retries=3 --start-period=10s \ CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:3000/ || exit 1 CMD ["node", "server.js"]