Hospedando o Next.js no seu próprio servidor com publicação a cada git push
O caminho curto para hospedar o Next.js no seu próprio servidor é instalar um painel de publicação como o Coolify e conectar o seu repositório do GitHub. Depois disso, cada git push compila o app e coloca a nova versão no ar por HTTPS. Segundo a documentação do Next.js, todos os recursos funcionam quando você publica com um servidor Node.js ou um contêiner Docker, então você não fica preso a nenhuma plataforma especial.
Quais recursos funcionam no seu próprio servidor?
A tabela da documentação oficial é curta: um servidor Node.js e o Docker suportam todos os recursos, e a exportação estática é limitada. Em um único servidor, isso significa na prática:
- Server components, rotas de API e respostas em streaming funcionam com
next start. - O
next/imagenão precisa de configuração extra, e as imagens são processadas no servidor. - O cache e a regeneração estática incremental (ISR) funcionam por conta própria em um servidor com disco persistente. Se você roda várias cópias, precisa compartilhar o cache entre elas.
- A recomendação oficial é colocar um proxy reverso na frente, em vez de expor o Next.js diretamente. O Coolify vem com o Traefik para isso, e o Traefik também obtém o certificado.
Que potência o servidor deve ter?
É o build que decide quanta memória você precisa, não o app em execução. O next build tem um pico, e o app precisa de muito menos depois que está no ar. O próprio Coolify também usa memória. Estes são os valores que medimos em servidores reais:
| Tamanho | Projeto pequeno | Projeto com muitos pacotes |
|---|---|---|
| 2 GB, 1 vCPU | 350 s, 1,4 GB de memória e 0,5 GB de swap | O build ficou sem memória |
| 4 GB, 2 vCPU | 213 s, 2,2 GB de memória e 0,2 GB de swap | 223 s, 3,5 GB de memória e 0,9 GB de swap |
O projeto pequeno era o app Next.js de exemplo do Coolify. O maior era um app de chat com IA escrito em Next.js 16 e com cerca de 85 pacotes, e com 2 GB ele ficou sem memória durante a verificação do TypeScript. O servidor tinha 2 GB de swap, e os números mostram o ponto mais alto. O uso de disco depois do primeiro build foi de 13 a 18 GB. São medições nossas, e o seu projeto vai ser diferente. Se um build falhar por falta de memória, aumente o servidor primeiro e reduza de novo mais tarde, se puder.
Passo a passo
1. Conecte o repositório
Entre no Coolify, abra o seu projeto na página Projects e clique em New resource. Para um repositório público, escolha Public Git Repository, informe o endereço e clique em Check repository.
2. Adicione uma chave se o repositório for privado
No menu da esquerda, vá em Private Keys, em Keys & Tokens, e crie uma chave com Generate ED25519. Adicione a chave pública em Deploy keys, na página Settings do repositório no GitHub. Depois use New resource, escolha Private Git Repository (with Deploy Key) e informe [email protected]:user/project.git. Deixe Build pack em Railpack, que reconhece o Next.js, e a porta continua em 3000. O Coolify marca o Railpack como beta, então escolha o seu próprio Dockerfile se ele der problema.
3. Informe as variáveis de ambiente
Na página Environment Variables, mude para Developer view e cole o conteúdo do seu arquivo .env. Um detalhe importa aqui: as variáveis cujos nomes começam com NEXT_PUBLIC_ são escritas no código durante o build. Quando alterar uma, clique em Redeploy: o painel percebe que uma configuração de build mudou e compila de novo. Nunca dê esse prefixo a uma chave que o navegador não deve ver.
4. Conecte o seu domínio
Crie um registro A no seu provedor de domínio apontando para o endereço IP do servidor. No Coolify, vá à página Domains, clique em Add domain, escolha https como protocolo, informe o seu domínio, salve e publique de novo. O certificado é solicitado e renovado automaticamente. As portas 80 e 443 precisam estar abertas.
5. Publique
Clique em Deploy. A página Deployments mostra o log do build ao vivo. Quando o build termina, o contêiner antigo continua atendendo até o novo ficar pronto.
Como o git push vira uma publicação?
A cada push, o GitHub envia ao painel uma requisição assinada. O painel verifica a assinatura e recompila o app daquela branch, e uma requisição com assinatura inválida é rejeitada. Veja como configurar:
- Na página Webhooks do app, copie a Webhook URL da seção do GitHub, digite um valor aleatório de pelo menos 16 caracteres em Webhook secret e salve.
- No GitHub, abra Settings do repositório, vá em Webhooks e clique em Add webhook.
- Coloque o endereço em Payload URL e o mesmo valor em Secret. Defina Content type como
application/jsone deixe o push como único evento.
Para testar:
git commit --allow-empty -m "deploy test"
git push
O novo build aparece na página Deployments. No pequeno projeto de exemplo, um novo commit foi ao ar em 41 segundos graças ao cache de build. O GitHub precisa conseguir acessar o endereço do painel, e como o painel é instalado com um endereço HTTPS público, nada extra é necessário.
Erros comuns
| Sintoma | Causa | Solução |
|---|---|---|
O build morre com Killed ou heap out of memory | Memória insuficiente | Aumente o servidor |
Um novo valor de NEXT_PUBLIC_ não aparece | O valor fica embutido no build | Use Redeploy |
| O build falha por uma variável ausente | O código lê a variável durante o build | Adicione-a no painel e deixe-a disponível na hora do build |
| Nenhum certificado chega | O registro A está errado ou não propagou | Confira o registro e publique de novo depois que ele propagar |
| Um erro 502 no site no ar | O app escuta em outra porta | Corrija a porta na página General |
Com a opção Next.js da Seturack, o Coolify chega instalado: o servidor local está validado, o assistente de boas-vindas já foi resolvido e o painel abre por HTTPS. O endereço e a senha aparecem no seu painel, e você começa conectando o GitHub. Você tem acesso root e pode gerenciar tudo pelo painel, se preferir. Os backups diários estão incluídos no preço e o tráfego é ilimitado. Você define o tamanho com controles deslizantes na página do VPS Next.js.
Comentários0
Ainda não há comentários
Seja a primeira pessoa a compartilhar sua opinião.
Entre ou crie uma conta para deixar um comentário.