From d03ef85b6417adef38c9e9b7fe55ba4c7355b31f Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Thu, 18 Jun 2026 05:38:27 +0200 Subject: [PATCH] fix(docker): imagem 1.62GB->340MB (sharp prebuilt, sem vips/toolchain; updates/ fora da imagem) - 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 --- dental-server/.dockerignore | 7 +++++++ dental-server/Dockerfile | 26 +++++++++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/dental-server/.dockerignore b/dental-server/.dockerignore index 71710e2..6c7fbd1 100644 --- a/dental-server/.dockerignore +++ b/dental-server/.dockerignore @@ -1,4 +1,6 @@ node_modules +**/node_modules +dental-client/node_modules npm-debug.log .env .env.local @@ -6,3 +8,8 @@ npm-debug.log dental_images.db uploads processed +updates +data +bkp +.git +**/*.map diff --git a/dental-server/Dockerfile b/dental-server/Dockerfile index 8a4a5df..08fa3df 100644 --- a/dental-server/Dockerfile +++ b/dental-server/Dockerfile @@ -2,22 +2,26 @@ FROM node:22-alpine WORKDIR /app -# Instalar dependências necessárias para o SQLite e processamento de imagens (como python3, make, g++, vips se necessário pelo sharp) -RUN apk add --no-cache python3 make g++ vips-dev - -# Copiar os arquivos de lock e package +# Copiar lock/package primeiro (camada de cache do npm install) COPY package*.json ./ -# Instalar dependências do backend (produção) -RUN npm install --production +# 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 -# Copiar o restante do código -# NOTA: dental-client/dist/ deve ser gerado ANTES do docker build pelo deploy-prod.sh -# O build do React (npm run build) é feito na VPS4 antes do docker compose build +# 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 . . -# Expor a porta 3000 (apenas para o container) EXPOSE 3000 -# Comando para rodar a aplicação CMD ["npm", "start"]