# Node 20, não 18: o `@apollo/gateway` (transitivo do @clubpetrodev/nestjs-mapped-exception) # puxa make-fetch-happen@15, que exige "^20.17.0 || >=22.9.0". Com engine-strict # o yarn falha o build no Node 18 — foi o que quebrou a primeira publicação do routines. FROM node:20-slim as base ENV NODE_OPTIONS=--max_old_space_size=2048 RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ build-essential \ && ln -s /usr/bin/python3 /usr/bin/python \ && rm -rf /var/lib/apt/lists/* FROM base as builder WORKDIR /usr/src/app # O .npmrc NÃO é versionado (as libs @clubpetrodev/* precisam de token privado). # Ele é gerado a partir do build-arg e removido antes da imagem final. ARG NPM_TOKEN COPY package.json yarn.lock tsconfig.json tsconfig.build.json nest-cli.json ./ RUN printf '//registry.npmjs.org/:_authToken=%s\nengine-strict=true\n' "$NPM_TOKEN" > .npmrc COPY src/ src/ RUN yarn install --immutable RUN yarn build RUN rm -f .npmrc FROM base as runner ENV NODE_OPTIONS=--max_old_space_size=2048 WORKDIR /usr/src/app COPY --from=builder /usr/src/app/src/ormconfig.ts ./src/ormconfig.ts COPY --from=builder /usr/src/app/package.json /usr/src/app/yarn.lock /usr/src/app/tsconfig.json /usr/src/app/tsconfig.build.json /usr/src/app/nest-cli.json ./ COPY --from=builder /usr/src/app/dist ./dist COPY --from=builder /usr/src/app/node_modules ./node_modules EXPOSE 3000 CMD [ "yarn", "start:prod" ]