Debug & Runbooks
Debugging rápido
| ¿Qué falla? | Comando | Pista |
|---|---|---|
| Servicio down | systemctl status <slug> |
Logs de run.py/gunicorn/uvicorn |
| HTTP down | curl -I 127.0.0.1:PORT/health |
¿Escucha el backend? |
| 502 | journalctl -u caddy -n 50 |
Proxy/backend mal |
| TLS | caddy validate |
Token Cloudflare |
| Ports | ss -ltnp | grep :PORT |
Conflictos |
Troubleshooting
systemd en loop (restart storm)
sudo systemctl status <slug> -l --no-pager
sudo journalctl -u <slug> -n 200 --no-pager
Revisar StartLimit*, excepciones en run.py y que se usen módulos (-m) para gunicorn/uvicorn.
Gunicorn no encontrado
Usar sys.executable -m gunicorn (respeta venv) o instalar en el venv:
sudo -u <slug> /srv/projects/<slug>/venv/bin/pip install --upgrade gunicorn
status.json
Documento JSON consumido por el infra-monitor para pintar el estado. Debe incluir cada servicio con systemd y HTTP (local/público) cuando aplique.