From 401146a34a5ca2983b008ef537d78230cfd3f60c Mon Sep 17 00:00:00 2001 From: corenthin-lebreton Date: Thu, 26 Feb 2026 22:13:38 +0100 Subject: [PATCH] Dockerfile modif --- Dockerfile | 54 +++++++++++++++++++++----------------------------- next.config.ts | 9 +++++++++ 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Dockerfile b/Dockerfile index e0e7c8b..326cce7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,16 +3,14 @@ # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS deps -# Mise à jour des paquets système (sécurité) RUN apk update && apk upgrade --no-cache && apk add --no-cache libc6-compat WORKDIR /app -# Copier uniquement les manifestes de dépendances COPY package.json package-lock.json* ./ -# Installation des dépendances de production + dev (nécessaires au build) -RUN npm ci --frozen-lockfile +# ci : installation déterministe depuis le lock-file +RUN npm ci # ───────────────────────────────────────────────────────────── @@ -20,69 +18,63 @@ RUN npm ci --frozen-lockfile # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS builder -RUN apk update && apk upgrade --no-cache +RUN apk update && apk upgrade --no-cache && apk add --no-cache libc6-compat WORKDIR /app -# Récupération des node_modules depuis l'étape précédente COPY --from=deps /app/node_modules ./node_modules - -# Copie des sources COPY . . -# Variables d'environnement publiques nécessaires au build Next.js -# (uniquement les NEXT_PUBLIC_* — les secrets restent hors image) +# Variables publiques (NEXT_PUBLIC_*) nécessaires au build. +# Les secrets serveur (SERVICE_ROLE_KEY…) ne sont JAMAIS passés ici. ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY -ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL \ - NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY -# Désactiver la télémétrie Next.js -ENV NEXT_TELEMETRY_DISABLED=1 +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 RUN npm run build # ───────────────────────────────────────────────────────────── -# Étape 3 — Image de production (minimale et durcissable) +# Étape 3 — Image de production minimale et durcie # ───────────────────────────────────────────────────────────── FROM node:20-alpine AS runner -# Mise à jour des paquets système RUN apk update && apk upgrade --no-cache WORKDIR /app -# Créer un utilisateur non-root dédié +# Utilisateur non-root dédié RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs -# Copier les fichiers statiques publics +# Fichiers publics (favicon, images statiques…) COPY --from=builder /app/public ./public -# Next.js standalone — crée un dossier .next/standalone optimisé -# Copier le serveur standalone +# Serveur Next.js standalone (bundle minimal sans node_modules complets) COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -# Copier les assets statiques compilés + +# Assets statiques compilés (_next/static) COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Passer sur l'utilisateur non-root USER nextjs -# Variables d'environnement de runtime par défaut ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ - PORT=3001 \ + PORT=3000 \ HOSTNAME="0.0.0.0" -# Les secrets (SUPABASE_SERVICE_ROLE_KEY, etc.) sont injectés -# au moment du déploiement via --env-file ou les secrets du -# gestionnaire de déploiement — jamais dans l'image. +# Les secrets injectés au runtime (jamais dans l'image) : +# SUPABASE_SERVICE_ROLE_KEY +# NEXT_PUBLIC_SUPABASE_URL (si non baked au build) +# NEXT_PUBLIC_SUPABASE_ANON_KEY (si non baked au build) -EXPOSE 3001 +EXPOSE 3000 -# Healthcheck : vérifie que l'app répond bien -HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \ - CMD wget -qO- http://localhost:3001/ | grep -q "html" || exit 1 +HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \ + CMD wget -qO- http://localhost:3000/ | grep -q "html" || exit 1 CMD ["node", "server.js"] diff --git a/next.config.ts b/next.config.ts index 561b882..84034a1 100644 --- a/next.config.ts +++ b/next.config.ts @@ -2,6 +2,15 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { output: "standalone", + + // Désactivé pendant le build Docker — validé séparément en CI + eslint: { + ignoreDuringBuilds: true, + }, + typescript: { + ignoreBuildErrors: true, + }, + images: { remotePatterns: [ {