Aplicação Node.js no cPanel com erro 503: as causas habituais

Um erro 503 numa aplicação criada em «Setup Node.js App» quer quase sempre dizer a mesma coisa: o servidor tentou arrancar a aplicação e ela não arrancou, ou arrancou e caiu logo. Quem as liga ao servidor é o Passenger, e o que a aplicação escreve ao falhar fica no registo dele. Quase tudo se descobre lendo esse registo e correndo a aplicação à mão uma vez. Este artigo vai por ordem de probabilidade.

Descobrir a causa, passo a passo

1 Abra o ecrã da aplicação em «Setup Node.js App» e confira três campos: a raiz da aplicação, o endereço e o ficheiro de arranque. Estão certos? O ficheiro existe mesmo na raiz, com esse nome exacto (maiúsculas e minúsculas contam)?
2 Leia o registo. O ecrã tem um campo de Passenger log file. Se estiver vazio, indique um ficheiro dentro da pasta da aplicação, guarde, reinicie, repita o pedido que falha, e abra o ficheiro. A última mensagem costuma ser a causa.
3 Corra a aplicação à mão. Se a conta tem terminal, entre no ambiente virtual com o comando que o ecrã da aplicação mostra no topo e corra o ficheiro de arranque (node app.js). Um erro de sintaxe, um módulo em falta ou uma variável por definir aparecem logo no ecrã. Pare com Ctrl+C.
4 Corrija, instale e reinicie. Depois de corrigir, use «Run NPM Install» se as dependências mudaram e o botão de reinício para o Passenger carregar tudo outra vez.

As causas, por ordem

Causa O que o registo costuma dizer O que fazer
Ficheiro de arranque errado Não encontra o ficheiro, ou o caminho não existe. Corrija o campo no ecrã da aplicação. É relativo à raiz da aplicação.
Dependências por instalar «Cannot find module» seguido do nome. «Run NPM Install». Não envie a pasta node_modules por FTP.
Versão do Node.js não serve ao código Um «SyntaxError» ou «Unexpected token» numa linha que parece correcta. Escolha uma versão mais recente, ou a que o projecto pede, e reinstale as dependências.
Variável ou ligação em falta Erro de ligação à base de dados, ou «undefined» onde devia estar um valor. Defina as variáveis no ecrã da aplicação e reinicie. Veja variáveis de ambiente e segredos.
A aplicação não fica a correr Arranca e termina logo, sem erro. O processo tem de iniciar um servidor HTTP e ficar ligado. Um script que só corre uma tarefa e acaba não serve.
Alterações não aplicadas O erro é o de antes de corrigir. Reinicie a aplicação.
Limites da conta Falta de memória ou de processos; ou o erro é 508 em vez de 503. Veja erros 500, 403, 404 e 508.
.htaccess mexido O Passenger deixa de ser chamado para esse endereço. O ficheiro tem um bloco marcado pelo CloudLinux Passenger, criado pela ferramenta. Não o apague nem edite. Se o site de WordPress está na raiz do mesmo domínio, as regras de um podem apanhar o outro.

Para separar «o servidor» de «o meu código», ponha uma aplicação mínima no lugar da sua, e veja se responde:const http = require("http");
http.createServer((req, res) => {
  res.end("ok");
}).listen(process.env.PORT || 3000);
Se esta responde e a sua não, o problema está no código ou nas dependências. Se nem esta responde, junte ao pedido de suporte o registo do Passenger.

Não tente usar as portas 80 ou 443, nem dependa de um número de porta fixo para o visitante chegar à aplicação. É o Passenger que liga o endereço do site ao processo. Abrir portas por conta própria só traz conflitos.
O erro 503 também tem outras fontes, que nada têm a ver com Node.js: manutenção, sobrecarga ou serviços parados. Erro 503 e o resto da família 5xx ajuda a distinguir. E se precisa de um processo sempre ligado, uma fila ou um robô, um VPS é o sítio certo: o PM2 num VPS.

Já leu o registo e continua sem perceber? Envie-nos o domínio, a hora do erro e a última mensagem do registo, e vemos o que o servidor faz.

Abrir um pedido de suporte

VEJA TAMBÉM

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

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

Erro 503 e o resto da família 5xx: o que são e por onde começar

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

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

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