feat(discord-bridge): dashboard publicat in tailnet prin tailscale serve
https://claude-agent.tailf7372d.ts.net/punte — acelasi tipar ca /echo de pe moltbot: procesul ramane legat de 127.0.0.1, tailscaled il proxeaza si pune HTTPS. Montarea sub prefix a cerut doua schimbari: - toate URL-urile din pagini sunt acum relative, fiindca --set-path TAIE prefixul inainte de a proxa (serverul vede /api/status, browserul cere /punte/api/status). DASHBOARD_PREFIX ramane necesar doar pentru redirectul de login, si e acceptat si intact pe intrare, ca sa mearga si curl direct pe localhost. - adresa fara slash final (/punte) primeste 301 catre /punte/: altfel URL-urile relative s-ar rezolva la radacina hostului, unde proxy-ul nu trimite nimic incoace, si panoul ar arata gol fara nicio eroare vizibila. ops/install.sh configureaza serve-ul daca sudo permite; altfel spune comanda. Sase teste noi pentru montarea sub prefix (31 in total pe dashboard). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
This commit is contained in:
@@ -6,7 +6,8 @@ de server (stdlib `http.server`, zero dependinte), aceiasi tokeni de design, ace
|
||||
tipar de endpoint-uri ca in `handlers/eco.py`.
|
||||
|
||||
```
|
||||
http://127.0.0.1:18790
|
||||
https://claude-agent.tailf7372d.ts.net/punte <- din tailnet, ca /echo la moltbot
|
||||
http://127.0.0.1:18790 <- local / prin tunel SSH
|
||||
```
|
||||
|
||||
## Ce arata si ce poate face
|
||||
@@ -97,15 +98,43 @@ systemctl --user enable --now claude-discord-dashboard
|
||||
```
|
||||
|
||||
Setari optionale in `~/.claude-discord/env`: `DASHBOARD_BIND` (implicit `127.0.0.1`),
|
||||
`DASHBOARD_PORT` (implicit `18790`).
|
||||
`DASHBOARD_PORT` (implicit `18790`), `DASHBOARD_PREFIX` (implicit gol; `/punte` cand e
|
||||
publicat prin `tailscale serve --set-path`).
|
||||
|
||||
## Acces
|
||||
|
||||
Fiind legat de localhost, se ajunge la el prin tunel SSH — la fel ca la dashboard-ul
|
||||
lui echo:
|
||||
### Prin Tailscale (recomandat)
|
||||
|
||||
Exact tiparul de la echo (`https://moltbot.tailf7372d.ts.net/echo/`): procesul ramane
|
||||
legat de `127.0.0.1`, iar `tailscaled` e singurul care ajunge la el si il publica in
|
||||
tailnet, cu HTTPS si certificat de la Tailscale.
|
||||
|
||||
```bash
|
||||
sudo tailscale serve --bg --set-path /punte http://127.0.0.1:18790
|
||||
tailscale serve status
|
||||
```
|
||||
|
||||
```
|
||||
https://claude-agent.tailf7372d.ts.net/punte
|
||||
```
|
||||
|
||||
Vizibil doar in tailnet (`tailnet only`) — nu e `funnel`, deci nu iese in internet.
|
||||
Configuratia e persistata de `tailscaled`, deci supravietuieste repornirilor.
|
||||
|
||||
**Montarea sub prefix**, cele doua capcane si cum sunt rezolvate:
|
||||
|
||||
- `tailscale serve --set-path` **taie** prefixul inainte de a proxa, deci serverul
|
||||
vede `/api/status`, nu `/punte/api/status`. Toate URL-urile din pagini sunt
|
||||
**relative**, deci merg la orice prefix, fara sa stie de el. `DASHBOARD_PREFIX`
|
||||
e nevoie doar pentru redirecturi si e acceptat si intact pe intrare (`curl`
|
||||
direct pe localhost cu `/punte/...` functioneaza).
|
||||
- adresa **fara slash final** (`/punte`) ar rezolva `api/status` la radacina
|
||||
hostului, unde proxy-ul nu mai trimite nimic incoace; de aceea forma fara slash
|
||||
primeste un 301 catre `/punte/`.
|
||||
|
||||
### Prin tunel SSH
|
||||
|
||||
```bash
|
||||
# de pe statia de lucru (direct sau prin Tailscale: 100.95.55.51)
|
||||
ssh -L 18790:127.0.0.1:18790 -N claude@10.0.20.171 &
|
||||
# apoi http://localhost:18790
|
||||
```
|
||||
@@ -119,7 +148,8 @@ cd proxmox/lxc171-claude-agent/discord-bridge
|
||||
python3 -m pytest tests/test_dashboard.py -q
|
||||
```
|
||||
|
||||
25 de teste, fara retea si fara `systemctl` real (dublura inregistreaza apelurile).
|
||||
31 de teste, fara retea si fara `systemctl` real (dublura inregistreaza apelurile).
|
||||
Acopera autentificarea, faptul ca unitatea nu poate fi aleasa din cerere, blocajul pe
|
||||
tur in zbor si trecerea cu `force`, traversarea de cale in `request_id`, `state.json`
|
||||
corupt si verificarea de regresie pentru `deny(ssh)`.
|
||||
corupt, montarea sub prefix (cu si fara slash final) si verificarea de regresie
|
||||
pentru `deny(ssh)`.
|
||||
|
||||
Reference in New Issue
Block a user