Langsung ke konten utama

Web (Gateway)

Gateway menyajikan UI Kontrol browser kecil (Vite + Lit) dari port yang sama dengan WebSocket Gateway:
  • default: http://<host>:18789/
  • prefiks opsional: setel gateway.controlUi.basePath (misalnya /openclaw)
Kemampuan tersedia di UI Kontrol. Halaman ini berfokus pada mode bind, keamanan, dan permukaan yang menghadap web.

Webhook

Saat hooks.enabled=true, Gateway juga mengekspos endpoint webhook kecil pada server HTTP yang sama. Lihat Konfigurasi Gatewayhooks untuk auth + payload.

Config (aktif secara default)

UI Kontrol aktif secara default saat aset tersedia (dist/control-ui). Anda dapat mengendalikannya melalui config:
{
  gateway: {
    controlUi: { enabled: true, basePath: "/openclaw" }, // basePath opsional
  },
}

Akses Tailscale

Serve terintegrasi (direkomendasikan)

Pertahankan Gateway di loopback dan biarkan Tailscale Serve mem-proxy-nya:
{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "serve" },
  },
}
Lalu mulai gateway:
openclaw gateway
Buka:
  • https://<magicdns>/ (atau gateway.controlUi.basePath yang Anda konfigurasi)

Bind tailnet + token

{
  gateway: {
    bind: "tailnet",
    controlUi: { enabled: true },
    auth: { mode: "token", token: "your-token" },
  },
}
Lalu mulai gateway (contoh non-loopback ini menggunakan auth token rahasia bersama):
openclaw gateway
Buka:
  • http://<tailscale-ip>:18789/ (atau gateway.controlUi.basePath yang Anda konfigurasi)

Internet publik (Funnel)

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "funnel" },
    auth: { mode: "password" }, // atau OPENCLAW_GATEWAY_PASSWORD
  },
}

Catatan keamanan

  • Auth Gateway diwajibkan secara default (token, password, trusted-proxy, atau header identitas Tailscale Serve saat diaktifkan).
  • Bind non-loopback tetap memerlukan auth gateway. Dalam praktiknya itu berarti auth token/password atau reverse proxy sadar identitas dengan gateway.auth.mode: "trusted-proxy".
  • Wizard membuat auth rahasia bersama secara default dan biasanya menghasilkan token gateway (bahkan pada loopback).
  • Dalam mode rahasia bersama, UI mengirim connect.params.auth.token atau connect.params.auth.password.
  • Dalam mode yang membawa identitas seperti Tailscale Serve atau trusted-proxy, pemeriksaan auth WebSocket dipenuhi dari header permintaan sebagai gantinya.
  • Untuk deployment UI Kontrol non-loopback, setel gateway.controlUi.allowedOrigins secara eksplisit (origin penuh). Tanpanya, startup gateway akan ditolak secara default.
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true mengaktifkan mode fallback origin header Host, tetapi ini adalah penurunan keamanan yang berbahaya.
  • Dengan Serve, header identitas Tailscale dapat memenuhi auth UI Kontrol/WebSocket saat gateway.auth.allowTailscale adalah true (tidak memerlukan token/password). Endpoint HTTP API tidak menggunakan header identitas Tailscale tersebut; mereka mengikuti mode auth HTTP normal gateway. Setel gateway.auth.allowTailscale: false untuk mewajibkan kredensial eksplisit. Lihat Tailscale dan Security. Alur tanpa token ini mengasumsikan host gateway tepercaya.
  • gateway.tailscale.mode: "funnel" memerlukan gateway.auth.mode: "password" (password bersama).

Membangun UI

Gateway menyajikan file statis dari dist/control-ui. Bangun file tersebut dengan:
pnpm ui:build # otomatis menginstal dependensi UI pada eksekusi pertama