# ───────────────────────────────────────────────────────────── # Étape 1 — Installation des dépendances # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS deps RUN apk update && apk upgrade --no-cache && apk add --no-cache libc6-compat WORKDIR /app COPY package.json package-lock.json* ./ RUN npm ci # ───────────────────────────────────────────────────────────── # Étape 2 — Build de l'application # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS builder RUN apk update && apk upgrade --no-cache && apk add --no-cache libc6-compat WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ARG NEXT_PUBLIC_SUPABASE_URL=https://placeholder.supabase.co ARG NEXT_PUBLIC_SUPABASE_ANON_KEY=placeholder-anon-key-for-build-only ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL \ NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY \ NEXT_TELEMETRY_DISABLED=1 \ NODE_ENV=production \ NODE_OPTIONS="--max-old-space-size=2048" RUN mkdir -p public RUN echo "→ NEXT_PUBLIC_SUPABASE_URL = $NEXT_PUBLIC_SUPABASE_URL" && \ npm run build # ───────────────────────────────────────────────────────────── # Étape 3 — Image de production minimale et durcie # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS runner RUN apk update && apk upgrade --no-cache WORKDIR /app RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs 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 USER nextjs ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3010 \ HOSTNAME="0.0.0.0" EXPOSE 3010 CMD ["node", "server.js"]