# Portal System Runbook Fecha de referencia: 2026-04-21 ## Qué es cada cosa - `https://ballbox-first.emperor-ratio.ts.net/` Publica `nginx` en `127.0.0.1:80`. ## Mapa real del sistema - `nginx :80` Sirve el homepage Svelte desde `/var/www/portal`. - `nginx /portal/` Proxy a `http://127.0.0.1:18789/portal/`. - `nginx /openclaw/` Proxy al mismo gateway, pero reescribiendo el base path. - `tailscale serve` Expone `:80` en el hostname principal. ## Estado esperado ```bash tailscale serve status ``` Debe mostrar: ```text https://ballbox-first.emperor-ratio.ts.net |-- / proxy http://127.0.0.1:80 ``` ## Cómo prender todo ### 1. Verificar procesos locales ```bash ss -ltnp | rg '(:80|:18789)' ps -ef | rg -i 'nginx|gateway' ``` Tiene que existir: - `nginx` escuchando en `:80` - el backend/gateway de `/portal/` en `:18789` ### 2. Si falta el homepage Verificar nginx: ```bash sudo systemctl status nginx curl -I http://127.0.0.1/ ``` El sitio publicado por nginx usa: - código: `/home/sebas/clawd/web/portal` - build servido: `/var/www/portal` - config nginx: `/etc/nginx/sites-available/kiosk` Si hay cambios en el Svelte y hace falta republicar el build: ```bash cd /home/sebas/clawd/web/portal npm run build rsync -av --delete dist/ /var/www/portal/ sudo systemctl reload nginx ``` ### 3. Si falta `/portal/` Verificar: ```bash curl -I http://127.0.0.1:18789/portal/ ``` Si no responde, levantar el backend/gateway que publica ese path. Nota: - `nginx` publica ese servicio en `/portal/` - `nginx` también lo expone como `/openclaw/` ## Cómo republicar por Tailscale Si la config quedó mal, restaurarla así: ```bash sudo tailscale serve reset sudo tailscale serve --bg 80 sudo tailscale serve status ``` ## Verificación final ```bash curl -I https://ballbox-first.emperor-ratio.ts.net/ curl -I https://ballbox-first.emperor-ratio.ts.net/portal/ ``` Resultado esperado: - `/` devuelve el homepage Svelte - `/portal/` devuelve el servicio proxied