From f51f3e83a1a5cdfb65c30ece2e814f92bc4644f6 Mon Sep 17 00:00:00 2001 From: Mortifia Date: Wed, 15 Jul 2026 04:51:05 +0200 Subject: [PATCH] =?UTF-8?q?Passer=20le=20Dockerfile=20en=20multi-stage=20p?= =?UTF-8?q?our=20r=C3=A9duire=20la=20taille=20de=20l'image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit npm install complet (incl. devDependencies : nuxt, prisma CLI, types) restait dans l'image finale alors que .output/ (bundle Nitro) est autonome et trace déjà ses propres dépendances runtime (Prisma + moteur natif, bcrypt). Le stage final ne copie que .output/ et lance directement node dessus (plus besoin du CLI nuxt pour npm run start). Ajout de .env et .output à .dockerignore par la même occasion (.env n'était pas exclu du contexte de build). Testé sur le VPS (build --no-cache + run réel) : - .prisma/client, @prisma/client et le moteur natif (libquery_engine-debian-openssl-3.0.x.so.node) présents dans .output/server/node_modules - binding natif bcrypt présent - conteneur démarré, GET /api/task renvoie 200 avec une vraie requête Prisma - GET / renvoie 200 Taille : 750MB -> 272MB. --- .dockerignore | 2 ++ Dockerfile | 42 +++++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.dockerignore b/.dockerignore index b10a29b..f1d55e1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,3 +2,5 @@ node_modules npm-debug.log .nuxt .git +.output +.env diff --git a/Dockerfile b/Dockerfile index 64c2c60..af15cc5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,36 @@ -FROM node:22-bookworm-slim - -# Create app directory -RUN mkdir -p /app -WORKDIR /app +# Multi-stage : le stage builder installe toutes les dépendances (y compris +# devDependencies : nuxt, prisma CLI, types) pour générer .output/, un +# bundle Nitro autonome qui embarque déjà ses propres node_modules tracés. +# Le stage final ne copie que .output/ — plus besoin du toolchain de build +# ni des devDependencies (~440MB de npm install jetés une fois le build +# terminé). +FROM node:22-bookworm-slim AS build -#Install app dependencies RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/* - -#Set environment variables +WORKDIR /app -# Bundle app source COPY . /app RUN npm install - - - -#congig prisma RUN npx prisma generate RUN npx prisma migrate deploy RUN npx prisma migrate status -# Build app RUN npm run build -#Set prisma folder -RUN mkdir /app/.output/server/prisma -RUN cp /app/prisma/milestone.db /app/.output/server/prisma/milestone.db +RUN mkdir /app/.output/server/prisma && cp /app/prisma/milestone.db /app/.output/server/prisma/milestone.db + + +FROM node:22-bookworm-slim + +# openssl requis par le moteur Prisma au runtime (mêmes bibliothèques que +# lors du `prisma generate` du stage builder, binaryTargets="native"). +RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=build /app/.output /app/.output ENV NUXT_HOST=0.0.0.0 ENV NUXT_PORT=3000 @@ -35,5 +38,6 @@ ENV NUXT_PORT=3000 # Expose port EXPOSE 3000 5555 -#start app -CMD [ "npm", "run", "start" ] \ No newline at end of file +# Appel direct du serveur Nitro déjà construit — pas besoin du CLI nuxt +# (devDependency, absente de ce stage) pour lancer `npm run start`. +CMD ["node", ".output/server/index.mjs"]