diff --git a/Dockerfile b/Dockerfile index 6edcd97..bc37683 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,54 @@ -# Use uma imagem Node.js completa para o desenvolvimento -FROM node:20-alpine +# ============================== +# STAGE 1: Build da aplicação +# ============================== +FROM node:20-alpine AS builder -# Define o diretório de trabalho no container +# Define o diretório de trabalho WORKDIR /app -# Copia os arquivos de configuração do projeto +# Copia apenas arquivos de configuração primeiro (melhor cache) COPY package.json package-lock.json ./ -# Instala todas as dependências do projeto -# Isso é necessário para o modo de desenvolvimento, pois o build não pré-compila os arquivos. -RUN npm install +# Instala dependências com cache otimizado +RUN npm ci --legacy-peer-deps -# Copia o restante do código da sua aplicação +# Copia o restante do código COPY . . -# Expõe a porta de desenvolvimento padrão do Next.js +# Define o ambiente de build como produção +ENV NODE_ENV=production + +# Gera o build otimizado do Next.js +RUN npm run build + +# ============================== +# STAGE 2: Imagem final (produção) +# ============================== +FROM node:20-alpine AS runner + +# Define o diretório de trabalho +WORKDIR /app + +# Copia apenas o resultado necessário do build +# Usa o "standalone" para reduzir o tamanho da imagem e otimizar o desempenho +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json ./package.json + +# Define o ambiente de execução +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 + +# Cria um usuário não-root para segurança +RUN addgroup -g 1001 nodejs \ + && adduser -u 1001 -G nodejs -s /bin/sh -D nodejs + +USER nodejs + +# Expõe a porta do servidor Next.js EXPOSE 3000 -# Define o comando para iniciar a aplicação em modo de desenvolvimento -# Isso ativará o servidor de desenvolvimento e a recarga automática -CMD ["npm", "run", "dev"] +# Comando de execução +CMD ["node", "server.js"] \ No newline at end of file