# --- ÉTAPE 1 : BUILD (On passe en Node 22) --- FROM node:22-alpine AS build-stage # Installation des outils pour les modules natifs RUN apk update && apk add --no-cache \ build-base \ gcc \ autoconf \ automake \ zlib-dev \ libpng-dev \ vips-dev \ git > /dev/null 2>&1 ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} WORKDIR /opt/ COPY package.json yarn.lock ./ # On installe avec Yarn (Node 22 validera les "engines") RUN yarn install --frozen-lockfile WORKDIR /opt/app COPY . . # Build de l'admin et du code TS RUN yarn build # --- ÉTAPE 2 : RUNTIME (Image finale légère) --- FROM node:22-alpine AS runtime-stage RUN apk add --no-cache vips-dev libpng libjpeg-turbo ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} WORKDIR /opt/app # On récupère les node_modules et le build du stage précédent COPY --from=build-stage /opt/node_modules ./node_modules COPY --from=build-stage /opt/app ./ # Configuration du PATH ENV PATH=/opt/app/node_modules/.bin:$PATH # Sécurité : on utilise l'utilisateur 'node' au lieu de root RUN chown -R node:node /opt/app USER node EXPOSE 1337 # Une seule commande CMD à la fin CMD ["yarn", "start"]