Web interfaces
Web
Gateway menyajikan UI Kontrol peramban kecil (Vite + Lit) dari port yang sama dengan WebSocket Gateway:
- bawaan:
http://<host>:18789/ - dengan
gateway.tls.enabled: true:https://<host>:18789/ - prefiks opsional: atur
gateway.controlUi.basePath(misalnya/openclaw)
Kapabilitas dijelaskan di UI Kontrol. Halaman ini membahas mode pengikatan, keamanan, dan permukaan lain yang dapat diakses melalui web.
Konfigurasi (aktif secara bawaan)
UI Kontrol diaktifkan secara bawaan saat aset tersedia (dist/control-ui):
{ gateway: { controlUi: { enabled: true, basePath: "/openclaw" }, // basePath opsional },}Webhook
Saat hooks.enabled=true, Gateway juga mengekspos titik akhir webhook pada server HTTP yang sama. Lihat hooks di referensi konfigurasi Gateway untuk autentikasi dan muatan.
RPC HTTP admin
POST /api/v1/admin/rpc mengekspos metode bidang kontrol Gateway tertentu melalui HTTP. Dinonaktifkan secara bawaan; hanya didaftarkan saat plugin admin-http-rpc diaktifkan. Lihat RPC HTTP Admin untuk model autentikasi, metode yang diizinkan, dan perbandingannya dengan API WebSocket.
Akses Tailscale
Serve Terintegrasi (disarankan)
Pertahankan Gateway pada local loopback dan biarkan Tailscale Serve memproksikannya:
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Mulai Gateway:
openclaw gatewayBuka https://<magicdns>/ (atau gateway.controlUi.basePath yang telah Anda konfigurasikan).
Pengikatan tailnet + token
{ gateway: { bind: "tailnet", controlUi: { enabled: true }, auth: { mode: "token", token: "your-token" }, },}Mulai Gateway (contoh non-loopback ini menggunakan autentikasi token rahasia bersama):
openclaw gatewayBuka http://<tailscale-ip>:18789/ (atau gateway.controlUi.basePath yang telah Anda konfigurasikan).
Internet publik (Funnel)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password" }, // atau OPENCLAW_GATEWAY_PASSWORD },}tailscale.mode: "funnel" memerlukan gateway.auth.mode: "password"; Serve dan Funnel sama-sama memerlukan gateway.bind: "loopback".
Catatan keamanan
- Autentikasi Gateway diwajibkan secara bawaan: token, kata sandi, proksi tepercaya, atau header identitas Tailscale Serve saat diaktifkan.
- Pengikatan non-loopback tetap memerlukan autentikasi Gateway: autentikasi token/kata sandi atau proksi balik sadar identitas dengan
gateway.auth.mode: "trusted-proxy". - Wisaya orientasi awal membuat autentikasi rahasia bersama secara bawaan dan biasanya menghasilkan token Gateway, bahkan pada local loopback.
- Dalam mode rahasia bersama, UI mengirimkan
connect.params.auth.tokenatauconnect.params.auth.passwordselama jabat tangan WebSocket. - Dengan
gateway.tls.enabled: true, pembantu dasbor/status lokal merender URLhttps://dan URL WebSocketwss://. - Dalam mode yang membawa identitas (Tailscale Serve,
trusted-proxy), pemeriksaan autentikasi WebSocket dipenuhi dari header permintaan, bukan dari rahasia bersama. - Untuk penerapan UI Kontrol non-loopback publik, atur
gateway.controlUi.allowedOriginssecara eksplisit (origin lengkap). Pemuatan privat dengan origin yang sama diterima tanpa pengaturan tersebut untuk local loopback, RFC1918/link-local,.local,.ts.net, dan host CGNAT Tailscale. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback: truemengaktifkan fallback origin header Host; ini merupakan penurunan tingkat keamanan yang berbahaya.- Dengan Serve, header identitas Tailscale memenuhi autentikasi UI Kontrol/WebSocket saat
gateway.auth.allowTailscale: true(token/kata sandi tidak diperlukan). Titik akhir API HTTP tidak menggunakan header identitas Tailscale; titik akhir tersebut selalu mengikuti mode autentikasi HTTP normal Gateway. Aturgateway.auth.allowTailscale: falseuntuk mewajibkan kredensial eksplisit bahkan melalui Serve. Alur tanpa token ini mengasumsikan host Gateway itu sendiri tepercaya. Lihat Tailscale dan Keamanan.
Membangun UI
Gateway menyajikan berkas statis dari dist/control-ui:
pnpm ui:build