Web interfaces
Вебсайт
Gateway обслуговує невеликий браузерний інтерфейс керування (Vite + Lit) через той самий порт, що й WebSocket Gateway:
- типово:
http://<host>:18789/ - з
gateway.tls.enabled: true:https://<host>:18789/ - необов’язковий префікс: задайте
gateway.controlUi.basePath(наприклад,/openclaw)
Можливості описано в розділі Інтерфейс керування. На цій сторінці розглянуто режими прив’язки, безпеку та інші вебінтерфейси.
Конфігурація (увімкнено типово)
Інтерфейс керування увімкнено типово, коли наявні ресурси (dist/control-ui):
{ gateway: { controlUi: { enabled: true, basePath: "/openclaw" }, // basePath необов’язковий },}Webhook-и
Коли hooks.enabled=true, Gateway також надає кінцеву точку Webhook на тому самому HTTP-сервері. Відомості про автентифікацію і корисні навантаження див. в описі hooks у довіднику з конфігурації Gateway.
Адміністративний HTTP RPC
POST /api/v1/admin/rpc надає вибрані методи площини керування Gateway через HTTP. Типово вимкнено; реєструється лише тоді, коли ввімкнено plugin admin-http-rpc. Модель автентифікації, дозволені методи та порівняння з API WebSocket див. в розділі Адміністративний HTTP RPC.
Доступ через Tailscale
Інтегрований Serve (рекомендовано)
Залиште Gateway на local loopback і дозвольте Tailscale Serve проксіювати його:
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Запустіть Gateway:
openclaw gatewayВідкрийте https://<magicdns>/ (або налаштований вами gateway.controlUi.basePath).
Прив’язка до tailnet + токен
{ gateway: { bind: "tailnet", controlUi: { enabled: true }, auth: { mode: "token", token: "your-token" }, },}Запустіть Gateway (у цьому прикладі без local loopback використовується автентифікація за токеном зі спільним секретом):
openclaw gatewayВідкрийте http://<tailscale-ip>:18789/ (або налаштований вами gateway.controlUi.basePath).
Загальнодоступний інтернет (Funnel)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password" }, // або OPENCLAW_GATEWAY_PASSWORD },}tailscale.mode: "funnel" вимагає gateway.auth.mode: "password"; і Serve, і Funnel вимагають gateway.bind: "loopback".
Примітки щодо безпеки
- Автентифікація Gateway типово обов’язкова: токен, пароль, довірений проксі або, якщо ввімкнено, заголовки ідентичності Tailscale Serve.
- Прив’язки не до local loopback усе одно вимагають автентифікації Gateway: автентифікації за токеном/паролем або зворотного проксі з підтримкою ідентичності та
gateway.auth.mode: "trusted-proxy". - Майстер початкового налаштування типово створює автентифікацію зі спільним секретом і зазвичай генерує токен Gateway, навіть на local loopback.
- У режимі зі спільним секретом інтерфейс надсилає
connect.params.auth.tokenабоconnect.params.auth.passwordпід час установлення з’єднання WebSocket. - З
gateway.tls.enabled: trueлокальні допоміжні засоби панелі керування та стану відображають URL-адресиhttps://і URL-адреси WebSocketwss://. - У режимах з ідентичністю (Tailscale Serve,
trusted-proxy) перевірка автентифікації WebSocket виконується за заголовками запиту замість спільного секрету. - Для загальнодоступних розгортань інтерфейсу керування не на local loopback явно задайте
gateway.controlUi.allowedOrigins(повні джерела). Приватні завантаження з того самого джерела приймаються без цього параметра для local loopback, RFC1918/локальних каналів,.local,.ts.netі хостів Tailscale CGNAT. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback: trueвмикає резервне визначення джерела за заголовком Host; це небезпечне послаблення безпеки.- Із Serve заголовки ідентичності Tailscale задовольняють вимоги автентифікації інтерфейсу керування/WebSocket, коли
gateway.auth.allowTailscale: true(токен або пароль не потрібні). Кінцеві точки HTTP API не використовують заголовки ідентичності Tailscale; вони завжди дотримуються звичайного режиму HTTP-автентифікації Gateway. Задайтеgateway.auth.allowTailscale: false, щоб вимагати явні облікові дані навіть через Serve. Цей безтокеновий процес передбачає, що самому хосту Gateway довіряють. Див. Tailscale і Безпека.
Збирання інтерфейсу
Gateway обслуговує статичні файли з dist/control-ui:
pnpm ui:build