Publicar uma aplicação Next.js: exportação estática ou servidor Node, e onde cabe cada uma

O Next.js pode sair de duas maneiras muito diferentes, e escolher a errada está na origem de quase todos os problemas de publicação. A resposta curta: se o seu site não precisa de código a correr no servidor a cada visita, faça uma exportação estática e publique-a como ficheiros, o que cabe em qualquer hospedagem. Se precisa (páginas geradas no servidor, rotas de API, middleware), precisa de um processo Node sempre ligado: cabe no «Setup Node.js App» quando é simples, e fica melhor num VPS.

As saídas possíveis

Modo O que produz Onde corre O que se perde
Exportação estática Uma pasta de ficheiros HTML, CSS e JavaScript (por omissão chama-se out). Em qualquer hospedagem, como um site normal, na pasta pública do domínio. Rotas de API, renderização no servidor e middleware. Segundo a documentação do Next.js, as imagens do next/image precisam de unoptimized: true.
Servidor Node (next start) Um processo Node que responde a cada pedido. No «Setup Node.js App» do cPanel, ou num VPS com PM2 e nginx. Gasta memória o tempo todo e fica sujeito aos limites da conta.
Modo standalone Uma pasta .next/standalone com um server.js e só o que é preciso. Como o servidor Node; é a forma mais leve de copiar para um VPS ou para uma imagem Docker. Tem de copiar à mão as pastas public e .next/static, segundo a documentação.

Exportação estática, passo a passo

1 Peça a exportação. No next.config.js defina output: 'export'. Se usa imagens do Next, acrescente também images: { unoptimized: true }.
2 Compile no seu computador: npm run buildNo fim aparece a pasta out com o site pronto.
3 Envie o conteúdo de out (não a pasta em si) para a pasta pública do domínio, por FTP: enviar o site com o FileZilla.
4 Teste abrindo uma ligação interna e atualizando a página. Se der 404, o problema é o das rotas: publicar um site React ou Vue.

Servidor Node no cPanel

1 Compile no seu computador e envie só o resultado: as pastas .next e public, o package.json, o package-lock.json e o ficheiro de configuração. Não envie o node_modules. Compilar no servidor gasta memória e milhares de ficheiros: os limites de que ninguém fala.
2 Crie um ficheiro de arranque (por exemplo server.js) na raiz da aplicação, que arranca o Next e ouve na porta que o Passenger lhe der:const { createServer } = require("http");
const next = require("next");
const app = next({ dev: false });
const handle = app.getRequestHandler();
app.prepare().then(() => {
  createServer((req, res) => handle(req, res)).listen(process.env.PORT || 3000);
});
3 Crie a aplicação em «Setup Node.js App»: a versão do Node que o seu Next pede, o modo production, a raiz, o endereço e o ficheiro de arranque. Use «Run NPM Install» para instalar as dependências. O passo a passo geral está em pôr uma aplicação Node.js a correr.
4 Defina as variáveis no ecrã da aplicação e reinicie. Atenção: as que começam por NEXT_PUBLIC_ ficam gravadas no código durante a compilação, por isso mudá-las exige compilar de novo.
Nem tudo cabe numa conta partilhada. Um servidor Next.js fica sempre em memória. Se cair ou ficar lento, veja as causas do erro 503. Para tarefas em segundo plano, ligações longas ou muito movimento, o sítio certo é um VPS: manter a aplicação a correr com o PM2.
Na dúvida, comece pela exportação estática. É a mais barata de manter e a que não deixa nada a correr que se possa avariar. Só passe ao servidor Node quando uma página precisar mesmo de dados do servidor a cada pedido.

A sua aplicação precisa de um processo próprio e de mais margem? Veja os VPS.

Ver os servidores VPS

VEJA TAMBÉM

Publicar um site React ou Vue: a pasta de build e o 404 ao atualizar

Pôr uma aplicação Node.js a correr

Node.js no cPanel: escolher a versão e usar o npm

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?