El grupo tiene un VPS con Dokploy, el mismo de tesisucuenca.com. Hay dos aplicaciones:
| App en Dokploy | Dominio | Qué sirve | Dockerfile | Dueño |
|---|---|---|---|---|
esert-roadmap |
e-sert.tesisucuenca.com |
Roadmap del equipo (ya funciona) | Dockerfile (raíz) |
Tyrone |
esert-demo |
demo.e-sert.tesisucuenca.com |
Backend FastAPI (/api/v1, /ws/estado) + visor (/visor) |
proyecto/backend/Dockerfile |
Freddy (backend) y Tyrone (visor) |
Solo Tyrone tiene acceso al VPS, al panel de Dokploy, al DNS y a la cuenta de Payphone (modo de pruebas). Ninguna otra persona ni sus sesiones de Claude intentan entrar ahí ni piden esas credenciales. Si una sesión necesita algo de esto (crear la app, una variable de entorno, un volumen, un redeploy, credenciales de Payphone o ver logs del contenedor):
.env.ejemplo con los
nombres de las variables, sin valores.@Tyrone [VPS] o @Tyrone [Payphone], y exactamente qué hacer: campo, valor o comando.parcial si depende
de eso.Tyrone revisa estos pedidos en las bitácoras o en el resultado de la unificación del domingo.
Las credenciales de Payphone nunca se comparten por el repo: si alguien necesita probar en
local, Tyrone las pasa por privado y van en su .env.
ngrok,
expo --tunnel) ni estar en la misma red que la laptop: le basta con datos móviles o
cualquier Wi-Fi. La app usa EXPO_PUBLIC_API_URL=https://demo.e-sert.tesisucuenca.com.
El teléfono no se mueve: sigue a un auto simulado (modo espejo, CONTRATO.md 6b).https://demo.e-sert.tesisucuenca.com/visor y ve en vivo los autos y peatones de SUMO, los
puestos y el auto que sigue el teléfono espejo, resaltado. Con un QR (solo un enlace
abreviado) el profesor lo abre en su celular sin escribir la URL. Laptop (SUMO + sumo-gui + controlador TraCI) VPS (Dokploy, HTTPS con Traefik)
─────────────────────────────────────────── ─────────────────────────────────
traci/controlador.py --publicar https://demo... ──► POST /api/v1/interno/snapshot (token)
FastAPI + núcleo + SQLite (volumen)
Teléfono espejo (Expo Go, quieto en la mano) ──► GET /api/v1/espejo/candidatos
◄── WS /ws/espejo/{veh_id} (guiado, sesión, costo)
Proyector / cualquier navegador ◄── GET /visor + WS /ws/estado
Payphone (modo de pruebas) ──► GET /api/v1/pagos/retorno
SUMO no corre en el VPS. Corre en la laptop de la demo, con sumo-gui visible, y publica
snapshots al backend en línea. El VPS solo sirve la API, el WebSocket y el visor; es liviano.
ESERT_DB_URL=sqlite:////data/esert.db (con el volumen /data montado en Dokploy);ESERT_TOKEN_SIM (token largo y aleatorio), que exige POST /interno/snapshot;ESERT_CORS_ORIGENES;PAYPHONE_TOKEN y PAYPHONE_STORE_ID, en modo de pruebas;ANTHROPIC_API_KEY, si se usa el asistente LLM.usuario_id aleatorio y la placa ficticia.GET /salud → {"ok": true, "version": "...", "contrato": 1}.main: cada unificación del domingo actualiza la demo. Mientras
proyecto/backend/Dockerfile no exista (antes de la unificación de S2), la app
esert-demo no se crea.uvicorn + visor en localhost), por si
falla la red en la exposición.esert-demo en Dokploy (la hace Tyrone tras la unificación de S2)| Campo | Valor |
|---|---|
| Repository / Branch | e-sert / main |
| Build Path | / |
| Docker File | proyecto/backend/Dockerfile |
| Docker Context Path | . (escribirlo explícito) |
| Trigger | On Push |
| Domains | demo.e-sert.tesisucuenca.com, Container Port 8000, HTTPS con Let's Encrypt |
| Volumes | volumen persistente montado en /data |
| DNS | registro A demo.e-sert → IP del VPS |
Traefik (el proxy de Dokploy) soporta WebSocket sin configuración extra.