FROM node:22-alpine WORKDIR /app # Copiar lock/package primeiro (camada de cache do npm install) COPY package*.json ./ # Build deps do sharp em camada VIRTUAL: instala, compila e REMOVE na mesma RUN. # O runtime fica só com 'vips' (libvips compartilhada que o sharp linka) — sem # python3/make/g++/vips-dev. Isso evita a camada gigante (~547MB) que estourava o # limite de upload do registry (PUT 500). Ver Documentos-Unicos/projetos/rx.scoreodonto.com. # O sharp usa o binário PREBUILT (libvips embarcado, ~17MB) — NÃO precisa de vips/vips-dev # do sistema (instalá-los fazia o sharp compilar do fonte, gerando uma camada de ~400MB que # estourava o limite de upload do registry). O toolchain entra virtual (caso outra dep nativa # precise compilar) e sai na mesma RUN. Ver Documentos-Unicos/projetos/rx.scoreodonto.com. RUN apk add --no-cache --virtual .build-deps python3 make g++ \ && npm install --production \ && npm cache clean --force \ && apk del .build-deps # Código da app. dental-client/node_modules é excluído pelo .dockerignore; o Express # serve apenas dental-client/dist/ (gerado pela CI antes do docker build). COPY . . EXPOSE 3000 CMD ["npm", "start"]