Solução de problemas
Diagnóstico rápido: a aplicação não responde
Siga a ordem abaixo. Cada passo elimina uma causa comum e leva menos de um minuto.
Status da plataforma: confira status.zenifra.com. Se houver um incidente, acompanhe por lá.
Estado do projeto: no console, o projeto precisa estar como Projeto rodando. Se estiver em Criando projeto, Preparando projeto ou Fazendo deploy, aguarde a publicação; se estiver como Projeto parado, veja Estados do projeto e confira o crédito da organização.
Logs de build: em projetos Git, a última build terminou com sucesso? Se falhou, a etapa e o motivo aparecem no log. Veja Falhas de build.
Logs da aplicação (disponíveis em todos os planos): procure erros logo depois da inicialização, como variável ausente, falha de conexão com banco ou módulo não encontrado.
Porta e endereço: a aplicação precisa escutar em 0.0.0.0 e na mesma porta do campo Porta. Esse é o motivo mais comum de URL que não responde com logs sem erro.
Variáveis: confirme que todas as variáveis exigidas existem no projeto. Lembre que salvar variáveis reinicia as instâncias.
Health check: se ativado, a rota precisa responder 2xx rapidamente. Uma rota lenta ou protegida por login faz a instância reiniciar em ciclo. Veja Health checks.
Memória: reinícios frequentes com picos de memória indicam que o plano está pequeno para a aplicação. Veja Alto uso de memória.
Se nada disso resolver, fale com o suporte seguindo a central de ajuda.
Falhas de build em projetos Git
A Zenifra preserva a causa principal da falha mesmo quando o diagnóstico adicional não está disponível, em projetos GitHub e Forgejo. Consulte primeiro os Logs de build e a orientação exibida no projeto.
Quando o acesso salvo ao repositório deixa de existir, a Zenifra tenta localizar e validar novamente o mesmo repositório, sem trocar a organização, o nome ou a branch. Se essa recuperação não for possível, use Reconectar repositório no projeto e depois inicie uma nova build. Essa ação não inicia uma build automaticamente.
Problemas comuns e como investigar cada cenário no console da Zenifra.
Falha no deploy
"Build failed"
Verifique os logs de build em Logs de build na página do projeto no console. Se preferir terminal, use zenifra deploy watch ou zenifra builds logs.
| Erro | Correção |
|---|---|
npm ERR! Cannot read properties of undefined | Revise package.json e package-lock.json |
Cannot find module | Confirme se as dependências estão declaradas corretamente |
pip install falhou | Verifique o requirements.txt |
| Falha no build customizado | Revise os comandos pre-build, build e start configurados no projeto |
| Build sem etapas úteis | Confirme se start está configurado e se build só foi preenchido quando o projeto realmente precisa dele |
O diretório raiz configurado não existe no repositório. | Confira o campo Diretório raiz do projeto: a pasta precisa existir na branch configurada, com o caminho relativo à raiz do repositório (por exemplo, backend ou apps/api) |
"App crashed on startup"
Verifique os logs da aplicação no console (disponíveis em todos os planos).
| Erro | Correção |
|---|---|
EADDRINUSE | Verifique se a aplicação está escutando na porta esperada |
ECONNREFUSED | Revise a URI do banco ou confirme se o banco está acessível |
Cannot find module | Dependência ausente no projeto |
| Porta incorreta | Confirme se o campo Porta configurado no projeto corresponde à porta usada pela aplicação |
Importante: A Zenifra não define a porta automaticamente. O valor configurado no campo Porta deve ser o mesmo valor em que sua aplicação realmente escuta.
Problemas de conexão com o banco
"Connection refused"
Verifique os dados de conexão no console.
Confirme:
- o banco foi criado no console
- a
DATABASE_URLfoi configurada manualmente no projeto HTTP - host, porta, usuário, senha e nome do banco foram copiados corretamente
- a conexão usa TLS como na URI do console (
sslmode=verify-fullno PostgreSQL); no node-postgres, removasslmodeesslrootcertda URI e usessl: true, como no início rápido com banco
"Too many connections"
Soluções comuns:
- use pool de conexões na aplicação
- revise vazamentos de conexão no código
- analise se a quantidade atual de instâncias do banco ou da aplicação está adequada
Problemas de performance
Alto uso de memória
Verifique:
- vazamentos de memória
- payloads grandes
- falta de paginação
- plano abaixo da necessidade atual
Respostas lentas
Verifique:
- queries de banco e necessidade de índices
- falta de cache
- respostas muito grandes
- número insuficiente de instâncias para a carga atual
Logs vazios
Verifique:
- se o projeto está como Projeto rodando
- se a aplicação está escrevendo em
stdoutoustderr - se a mensagem esperada ainda está no trecho recente: os logs são lidos ao vivo das instâncias, sem histórico retido
Importante: logs da aplicação e logs de build são fluxos diferentes. Logs de build mostra a publicação de projetos Git; a área de logs do projeto mostra a aplicação depois que ela inicia.
Estados do projeto
| Status | Significado |
|---|---|
| Criando projeto / Preparando projeto | Projeto em criação ou preparação para a primeira publicação |
| Fazendo deploy | Uma nova versão está sendo publicada |
| Projeto rodando | Projeto rodando normalmente |
| Projeto com instâncias indisponíveis | Uma ou mais instâncias não estão respondendo; confira logs, porta e health check |
| Não foi possível preparar o projeto | A criação ou a build falhou; confira os Logs de build |
| Projeto parado | Nenhuma instância rodando; projeto inacessível |
Observações sobre Projeto parado
- por hora + armazenamento efêmero: para de cobrar a execução
- por hora + armazenamento persistente: continua cobrando o storage
- mensal/anual: parar não altera o valor final do contrato
Limite do plano Free atingido
Ao criar um projeto, o console mostra o aviso Limite do plano Free atingido quando a organização já usou os recursos gratuitos. A mensagem indica qual limite foi alcançado:
| Mensagem | O que fazer |
|---|---|
| Sua organização já usa as 2 instâncias do plano Free. Exclua um projeto Free ou escolha outro plano. | Exclua um projeto no plano Free ou selecione um plano pago para o novo projeto |
| O plano Free permite só mais N instância(s). Reduza as instâncias ou escolha outro plano. | Diminua o número de instâncias para até N (o número mostrado no aviso) ou selecione um plano pago |
| Sua organização já usa os 2 projetos gratuitos de banco de dados. Exclua um deles ou escolha outro plano. | Exclua um banco de dados gratuito (PostgreSQL ou Chave-Valor) ou selecione um plano pago |
Os limites de cada plano gratuito estão em Limites e quotas.
Domínio personalizado não funciona
Verifique:
- se o domínio foi adicionado no painel da Zenifra exatamente como será acessado, por exemplo
www.seudominio.com.br - se o subdomínio aponta para o destino gerado pela Zenifra, normalmente via
CNAME - se o domínio raiz (
seudominio.com.br) usa provedor com CNAME flattening, já que muitos provedores não aceitamCNAMEcomum no root (@) - se todos os registros TXT de validação SSL em
_acme-challengeforam publicados - se o DNS já propagou nos servidores autoritativos do domínio
Para verificar um subdomínio www, use:
dig www.seudominio.com.br CNAME
dig _acme-challenge.www.seudominio.com.br TXT
curl -Iv https://www.seudominio.com.br/Se o painel da Zenifra mostrar dois registros TXT com o mesmo nome, mantenha os dois valores publicados ao mesmo tempo. Não substitua um token pelo outro enquanto o certificado SSL estiver pendente.
HTTPS falha, mas o CNAME está correto
Isso normalmente indica que a validação do certificado ainda não terminou. Confira:
- se todos os tokens TXT aparecem na resposta DNS
- se não existe apenas um dos tokens quando o painel mostra dois
- se o provedor DNS salvou o registro no host correto, como
_acme-challenge.www - se a autoridade certificadora já teve tempo de processar a validação
Enquanto o SSL está pendente, o domínio pode resolver para a Zenifra, mas o handshake HTTPS ainda pode falhar. Aguarde a emissão do certificado depois que os registros TXT estiverem corretos.
Domínio raiz não aceita CNAME
Provedores como Registro.br podem não permitir CNAME no domínio raiz (@). Nesse caso:
- mova os nameservers para um provedor com CNAME flattening, como Cloudflare
- ou redirecione o domínio raiz para
wwwusando um serviço externo com HTTPS
Não aponte o domínio raiz para IPs copiados de respostas DNS ou de exemplos antigos. Esses IPs podem mudar e não são o destino estável do projeto.
Precisa de mais ajuda?
- Central de ajuda e suporte: o que enviar para receber uma resposta rápida
- Status da plataforma
- Suporte por e-mail ou WhatsApp +55 (11) 5199-3013
Última atualização em
Migrar para a Zenifra
Traga aplicações e bancos do Heroku, Render, Railway, Vercel ou de uma VPS para a Zenifra com um roteiro passo a passo, equivalências e migração de dados.
Organizações na Zenifra
Entenda como organizações agrupam contas, projetos, membros e permissões na Zenifra para trabalho individual ou em equipe.