# --- É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 . . RUN yarn build # --- ÉTAPE 2 : RUNTIME (L'image finale) --- 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 et on change le propriétaire EN MÊME TEMPS # On ne prend que ce qui est utile pour l'exécution COPY --from=build-stage --chown=node:node /opt/app/node_modules ./node_modules COPY --from=build-stage --chown=node:node /opt/app/dist ./dist COPY --from=build-stage --chown=node:node /opt/app/build ./build COPY --from=build-stage --chown=node:node /opt/app/package.json ./ COPY --from=build-stage --chown=node:node /opt/app/public ./public # On expose le binaire ENV PATH=/opt/app/node_modules/.bin:$PATH USER node EXPOSE 1337 CMD ["yarn", "start"]