Sieć (Gateway)
Gateway udostępnia niewielki przeglądarkowy Control UI (Vite + Lit) z tego samego portu co WebSocket Gateway:- domyślnie:
http://<host>:18789/ - opcjonalny prefiks: ustaw
gateway.controlUi.basePath(np./openclaw)
Webhooki
Gdyhooks.enabled=true, Gateway udostępnia także niewielki endpoint webhooka na tym samym serwerze HTTP.
Zobacz Konfiguracja Gateway → hooks w zakresie uwierzytelniania i ładunków.
Konfiguracja (domyślnie włączona)
Control UI jest włączony domyślnie, gdy zasoby są obecne (dist/control-ui).
Można nim sterować poprzez konfigurację:
Dostęp przez Tailscale
Zintegrowany Serve (zalecane)
Pozostaw Gateway na local loopback i pozwól, aby Tailscale Serve pośredniczył w dostępie:https://<magicdns>/(lub skonfigurowanygateway.controlUi.basePath)
Bind do tailnet + token
http://<tailscale-ip>:18789/(lub skonfigurowanygateway.controlUi.basePath)
Publiczny internet (Funnel)
Uwagi dotyczące bezpieczeństwa
- Uwierzytelnianie Gateway jest wymagane domyślnie (token/hasło lub nagłówki tożsamości Tailscale).
- Bindowanie poza loopback nadal wymaga współdzielonego tokenu/hasła (
gateway.authlub zmienna środowiskowa). - Kreator generuje token gateway domyślnie (nawet na loopback).
- UI wysyła
connect.params.auth.tokenlubconnect.params.auth.password. - Control UI wysyła nagłówki anti-clickjacking i akceptuje wyłącznie połączenia WebSocket z tej samej domeny przeglądarki, chyba że ustawiono
gateway.controlUi.allowedOrigins. - Przy Serve nagłówki tożsamości Tailscale mogą spełnić wymagania uwierzytelniania, gdy
gateway.auth.allowTailscalema wartośćtrue(token/hasło nie są wymagane). Ustawgateway.auth.allowTailscale: false, aby wymagać jawnych poświadczeń. Zobacz Tailscale oraz Bezpieczeństwo. gateway.tailscale.mode: "funnel"wymagagateway.auth.mode: "password"(współdzielone hasło).
Budowanie interfejsu
Gateway serwuje pliki statyczne zdist/control-ui. Zbuduj je poleceniem: