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"]