# --- ÉTAPE 1 : BUILD --- FROM node:20-alpine AS build-stage 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/app COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile COPY . . # On force le build de l'admin explicitement pour être sûr que le dossier existe RUN yarn build # --- ÉTAPE 2 : RUNTIME --- FROM node:20-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 # ASTUCE : On copie tout l'objet de build avec --chown # Cela évite de lister les dossiers un par un et de risquer un "Not Found" COPY --from=build-stage --chown=node:node /opt/app ./ # On expose le binaire ENV PATH=/opt/app/node_modules/.bin:$PATH USER node EXPOSE 1337 CMD ["yarn", "start"]