O que nextjs-deployment faz?
Fornece padrões abrangentes para implantar aplicações Next.js em produção. Use ao configurar containers Docker, pipelines CI/CD do GitHub Actions, gerenciar variáveis de ambiente, implementar implantações de pré-visualização ou configurar monitoramento e logging para aplicações Next.js. Abrange saída standalone, builds Docker em múltiplos estágios, health checks, instrumentação OpenTelemetry e melhores práticas de produção.
Recursos Principais
- Saída Standalone: Configure o Next.js para gerar uma build independente, reduzindo o tamanho da imagem Docker.
- Builds Docker em Múltiplos Estágios: Otimize as imagens Docker separando dependências de build e runtime.
- Health Checks: Adicione verificações de saúde aos containers para garantir que a aplicação está respondendo.
- Instrumentação OpenTelemetry: Habilite rastreamento distribuído para monitorar requisições e desempenho.
- Pipeline CI/CD com GitHub Actions: Automatize testes, build e implantação com workflows personalizados.
- Gerenciamento de Variáveis de Ambiente: Configure secrets e variáveis de ambiente para diferentes ambientes (produção, staging, preview).
- Implantações de Pré-visualização: Implemente deploys temporários para branches de feature ou Pull Requests.
Como Usar
Para utilizar este skill, siga os padrões e exemplos fornecidos no repositório. Abaixo estão alguns exemplos de configuração:
Exemplo de Dockerfile (Múltiplos Estágios)
# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: Production
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1
CMD ["node", "server.js"]
Exemplo de Workflow GitHub Actions
name: Deploy para Produção
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- name: Construir e enviar imagem Docker
run: |
docker build -t my-app:${{ github.sha }} .
docker tag my-app:${{ github.sha }} my-registry/my-app:latest
docker push my-registry/my-app:latest
- name: Implantar
run: |
# Comandos para implantar (ex: SSH, Kubernetes, etc.)
Exemplo de Configuração do Next.js (next.config.js)
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
experimental: {
instrumentationHook: true, // Para OpenTelemetry
},
};
module.exports = nextConfig;
Variáveis de Ambiente
| Variável | Descrição | Exemplo |
|---|---|---|
NEXT_PUBLIC_API_URL | URL da API pública | https://api.example.com |
DATABASE_URL | String de conexão do banco de dados | postgresql://user:pass@localhost:5432/db |
OTEL_EXPORTER_OTLP_ENDPOINT | Endpoint do coletor OpenTelemetry | http://otel-collector:4318 |
NODE_ENV | Ambiente de execução | production |
Boas Práticas
- Segurança: Nunca exponha secrets no código. Use segredos do GitHub Actions ou variáveis de ambiente do container.
- Cache: Aproveite o cache de camadas Docker (copie
package.jsonantes do código-fonte). - Logs: Configure logging estruturado (ex: com
pinoouwinston) e colete com OpenTelemetry. - Testes: Inclua testes no pipeline CI antes do build.
- Rollback: Tenha uma estratégia de rollback rápida (ex: manter versões anteriores da imagem Docker).