diff --git a/Dockerfile b/Dockerfile index 5ee49d8..ef80187 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,60 @@ ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} WORKDIR /opt/ COPY --from=build /opt/node_modules ./node_modules +WORKDIR /opt/app# --- ÉTAPE 1 : BUILD --- +FROM node:18-alpine AS build + +# Installation des dépendances système pour les modules natifs (Sharp, SWC, etc.) +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/ +# On copie package.json ET yarn.lock (très important) +COPY package.json yarn.lock ./ + +# On installe TOUTES les dépendances (y compris devDependencies pour le build) +# --frozen-lockfile assure que l'on utilise exactement les versions du lock +RUN yarn install --frozen-lockfile + WORKDIR /opt/app +COPY . . + +# On build l'admin et le code TS +RUN yarn build + +# --- ÉTAPE 2 : RUNTIME --- +FROM node:18-alpine +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 le dossier node_modules installé au stage précédent +# Et le code buildé (dist, build, etc.) +COPY --from=build /opt/node_modules ./node_modules +COPY --from=build /opt/app ./ + +# On expose le binaire de strapi dans le PATH +ENV PATH=/opt/app/node_modules/.bin:$PATH + +RUN chown -R node:node /opt/app +USER node + +EXPOSE 1337 +# On utilise yarn start qui lancera strapi depuis le dossier dist +CMD ["yarn", "start"] COPY --from=build /opt/app ./ ENV PATH=/opt/node_modules/.bin:$PATH