Variáveis de ambiente e a porta

Duas coisas que quebram mais deploy do que qualquer outra: uma variável faltando e a porta errada.

Definindo variáveis

No painel, abra o app e vá em Variáveis. Também dá para definir pelo MCP. As chaves usam letras maiúsculas, números e underline, e não podem começar com número (DATABASE_URL, API_KEY).

Marque a opção de reiniciar ao salvar, ou reinicie depois. O app só enxerga a variável nova depois de reiniciar.

Variáveis de build (as que o front-end embute no código, como VITE_* e NEXT_PUBLIC_*) precisam existir antes do deploy. Se você mudar uma delas, faça um novo deploy, e não só um reinício.

A porta

Em apps web, a plataforma entrega a porta na variável PORT. O seu app precisa escutar nela, em 0.0.0.0.

// Node
app.listen(process.env.PORT || 3000, '0.0.0.0')

# Python
uvicorn main:app --host 0.0.0.0 --port $PORT

PORT é reservada: você não pode defini-la como variável. Se o seu app fixa uma porta própria, informe-a em porta no lumahost.json.

Workers não têm porta

Bots, agentes e filas rodam como worker. Eles não recebem tráfego, então não escutam em porta nenhuma e não ganham endereço público.