fix(docker): imagem 1.62GB->340MB (sharp prebuilt, sem vips/toolchain; updates/ fora da imagem)
build-and-promote / build (push) Has been skipped
build-and-promote / promote (push) Failing after 3m34s

- sharp usa binario prebuilt (libvips embarcado) -> remove apk vips/vips-dev (camada ~400MB)
- toolchain (python3/make/g++) virtual, removido na mesma RUN
- .dockerignore exclui updates/ (196MB, servido por volume), data/, bkp/, **/node_modules
- corrige PUT 500/499 no registry (camadas grandes estouravam o limite de upload)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-06-18 05:38:27 +02:00
parent 7ffaead255
commit d03ef85b64
2 changed files with 22 additions and 11 deletions
+7
View File
@@ -1,4 +1,6 @@
node_modules node_modules
**/node_modules
dental-client/node_modules
npm-debug.log npm-debug.log
.env .env
.env.local .env.local
@@ -6,3 +8,8 @@ npm-debug.log
dental_images.db dental_images.db
uploads uploads
processed processed
updates
data
bkp
.git
**/*.map
+15 -11
View File
@@ -2,22 +2,26 @@ FROM node:22-alpine
WORKDIR /app WORKDIR /app
# Instalar dependências necessárias para o SQLite e processamento de imagens (como python3, make, g++, vips se necessário pelo sharp) # Copiar lock/package primeiro (camada de cache do npm install)
RUN apk add --no-cache python3 make g++ vips-dev
# Copiar os arquivos de lock e package
COPY package*.json ./ COPY package*.json ./
# Instalar dependências do backend (produção) # Build deps do sharp em camada VIRTUAL: instala, compila e REMOVE na mesma RUN.
RUN npm install --production # 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
# Copiar o restante do código # Código da app. dental-client/node_modules é excluído pelo .dockerignore; o Express
# NOTA: dental-client/dist/ deve ser gerado ANTES do docker build pelo deploy-prod.sh # serve apenas dental-client/dist/ (gerado pela CI antes do docker build).
# O build do React (npm run build) é feito na VPS4 antes do docker compose build
COPY . . COPY . .
# Expor a porta 3000 (apenas para o container)
EXPOSE 3000 EXPOSE 3000
# Comando para rodar a aplicação
CMD ["npm", "start"] CMD ["npm", "start"]