# ============================== # STAGE 1: Build da aplicação # ============================== FROM node:20-alpine AS builder WORKDIR /app # Define ambiente e proxy (opcional) ENV NODE_ENV=production ARG HTTP_PROXY ARG HTTPS_PROXY ENV NPM_CONFIG_HTTP_PROXY=$HTTP_PROXY ENV NPM_CONFIG_HTTPS_PROXY=$HTTPS_PROXY ENV NPM_CONFIG_TIMEOUT=600000 # Copia dependências e instala apenas as necessárias para build COPY package.json package-lock.json ./ RUN npm ci --omit=dev --legacy-peer-deps # Copia o restante do código COPY . . # Compila aplicação Next.js RUN npm run build -- --no-lint # ============================== # STAGE 2: Imagem final (produção) # ============================== FROM node:20-alpine AS runner WORKDIR /app # Instala utilitários básicos para inspeção e debug RUN apk add --no-cache nano curl tzdata # Configura timezone (América/São Paulo) ENV TZ=America/Sao_Paulo # Cria usuário não-root RUN addgroup -g 1001 nodejs && adduser -u 1001 -G nodejs -s /bin/sh -D nodejs # Copia apenas o necessário do build 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 USER nodejs # Configura variáveis de ambiente ENV NODE_ENV=production ENV PORT=3000 ENV HOSTNAME=0.0.0.0 EXPOSE 3000 # Healthcheck automático (5s de intervalo, falha após 3 tentativas) HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD curl -f http://localhost:3000/ || exit 1 # Inicia o servidor standalone CMD ["node", "server.js"]