From 369dfcdfc350e94fa40aa4de501f7fa135bea56c Mon Sep 17 00:00:00 2001 From: Keven Date: Mon, 8 Dec 2025 11:43:45 -0300 Subject: [PATCH] =?UTF-8?q?deploy(Dockerfile):=20Ajusta=20o=20dockerfile?= =?UTF-8?q?=20para=20produ=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 54 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index c85f384..16325d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,26 @@ # ============================== # STAGE 1: Build da aplicação # ============================== -FROM node:18-alpine AS builder +# 💡 AJUSTE: Mudar para Node 20-alpine (LTS) para compatibilidade e segurança +FROM node:20-alpine AS builder +# 💡 AJUSTE: Criar usuário não-root mais cedo para garantir que os arquivos sejam criados corretamente +# durante o build, embora o Next.js recomende USER nodejs no final. Vamos manter o root por enquanto no build +# e mudar no runner. WORKDIR /app +# 1. Copia arquivos de configuração de dependências COPY package.json package-lock.json ./ +# 2. Instala dependências (incluindo dev para o build) +# O NPM 10+ (do Node 20) geralmente não precisa mais de --legacy-peer-deps, mas o mantive para segurança RUN npm ci --include=dev --legacy-peer-deps +# 3. Copia o restante do código COPY . . -# 🔧 Garante que o arquivo de configuração exista +# 4. Garante que o arquivo de configuração exista +# 💡 AJUSTE: Melhoria na sintaxe do shell e criação do arquivo RUN mkdir -p src/config && \ if [ ! -f src/config/app.json ]; then \ echo '{ "APP_NAME": "Orius SaaS", "API_URL": "https://api.oriustecnologia.com" }' > src/config/app.json; \ @@ -19,29 +28,48 @@ RUN mkdir -p src/config && \ ENV NODE_ENV=production -# Gera o build otimizado (sem lint, e o type-check será ignorado via config) +# 5. Gera o build otimizado +# Assumindo que 'npm run build' é o build do Next.js RUN npm run build -- --no-lint # ============================== # STAGE 2: Imagem final (produção) # ============================== -FROM node:18-alpine AS runner +# 💡 AJUSTE: Usar a mesma versão base para consistência e segurança +FROM node:20-alpine AS runner WORKDIR /app -COPY --from=builder /app/.next/standalone ./ -COPY --from=builder /app/.next/static ./.next/static -COPY --from=builder /app/public ./public -COPY --from=builder /app/src/config ./src/config -COPY --from=builder /app/package.json ./package.json +# 💡 AJUSTE: Next.js usa o diretório 'server' (standalone) para o ponto de entrada. +# Next.js recomenda copiar os diretórios exatos para garantir a integridade da imagem standalone. +COPY --from=builder --chown=nodejs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nodejs:nodejs /app/.next/static ./.next/static +COPY --from=builder --chown=nodejs:nodejs /app/public ./public +# 💡 AJUSTE: Copia o arquivo server.js que é o entrypoint do Next.js standalone +COPY --from=builder --chown=nodejs:nodejs /app/server.js ./server.js + +# 💡 AJUSTE: Copia apenas o necessário, package.json não é estritamente necessário se não for rodar npm scripts +# COPY --from=builder /app/package.json ./package.json + +# Copia o arquivo de configuração +COPY --from=builder --chown=nodejs:nodejs /app/src/config ./src/config + + +# Cria e configura o usuário não-root antes de usá-lo +# 💡 AJUSTE: A base 'alpine' já tem 'adduser' e 'addgroup'. A Next.js recomenda o UID 1001. +# O user 'nodejs' já existe na imagem oficial do Node.js, mas o alpine é diferente, então criamos. +# No entanto, vamos tentar usar o usuário padrão Next.js: +RUN addgroup -g 1001 nodejs && adduser -u 1001 -G nodejs -s /bin/sh -D nodejs + +# 💡 AJUSTE: Next.js recomenda fortemente rodar como user 'nodejs' +USER nodejs ENV NODE_ENV=production ENV PORT=3000 ENV HOSTNAME=0.0.0.0 -RUN addgroup -g 1001 nodejs && adduser -u 1001 -G nodejs -s /bin/sh -D nodejs -USER nodejs - EXPOSE 3000 -CMD ["node", "server.js"] +# 💡 AJUSTE: O comando de execução do Next.js Standalone é rodar o arquivo server.js na raiz +# Note: Se você estiver usando um Next.js muito antigo, pode ser necessário 'node ./.next/standalone/server.js' +CMD ["node", "server.js"] \ No newline at end of file