Colocando um app Next.js em produção com PM2 e Nginx

Publicidade

Plataformas gerenciadas são a forma mais rápida de publicar um app Next.js, mas um servidor próprio dá controle total sobre custo, dados e configuração. Este é o roteiro básico.

1. Build standalone

Com output: 'standalone' no next.config, o build gera uma pasta autossuficiente, com o server.js e só as dependências que o app realmente usa:

npm ci
npm run build
cp -r .next/static .next/standalone/.next/static
cp -r public .next/standalone/public

Não esqueça de copiar o `.next/static`. O standalone não o inclui, e sem ele o site sobe respondendo 200, só que sem CSS.

2. PM2 para manter o processo vivo

O PM2 reinicia o app se ele cair e o sobe de novo quando o servidor reinicia:

PORT=3000 HOSTNAME=127.0.0.1 pm2 start .next/standalone/server.js --name meu-app
pm2 save
pm2 startup

Escutar em 127.0.0.1 garante que o Node só seja acessível pelo proxy, nunca direto da internet.

3. Nginx na frente

O Nginx recebe as conexões HTTPS, serve os arquivos estáticos direto do disco e repassa o resto ao Node:

location /_next/static/ {
    alias /srv/meu-app/.next/static/;
    expires 1y;
}
location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
}

4. HTTPS

Com o Certbot, um certificado gratuito da Let's Encrypt sai em um comando, e a renovação fica agendada automaticamente. Atrás da Cloudflare, use o modo SSL Full (strict), para que o trecho entre a CDN e o servidor também seja criptografado e verificado.

Deploy