Web(Gateway)

Gateway 從與 Gateway WebSocket 相同的埠提供一個小型瀏覽器控制台 UI(Vite + Lit):

  • 預設位址:http://<host>:18789/
  • 可選前綴:設定 gateway.controlUi.basePath(如 /openclaw

功能說明在 控制台 UI。 本頁著重於繫結模式、安全性及面向 Web 的介面。

Webhooks

hooks.enabled=true 時,Gateway 也會在同一 HTTP 伺服器上公開一個小型 webhook 端點。 詳見 Gateway 設定hooks 的驗證與 payload 說明。

設定(預設啟用)

控制台 UI 在資源檔案存在時(dist/control-ui預設啟用。 你可以透過設定控制:

{
  gateway: {
    controlUi: { enabled: true, basePath: "/openclaw" }, // basePath 為可選
  },
}

Tailscale 存取

整合式 Serve(建議)

將 Gateway 保持在 loopback,讓 Tailscale Serve 代理:

{
  gateway: {
    bind: "loopback",
    tailscale: { mode: "serve" },
  },
}

然後啟動 gateway:

openclaw gateway

開啟:

  • https://<magicdns>/(或你設定的 gateway.controlUi.basePath

Tailnet 繫結 + token

{
  gateway: {
    bind: "tailnet",
    controlUi: { enabled: true },
    auth: { mode: "token", token: "your-token" },
  },
}

然後啟動 gateway(非 loopback 繫結需要 token):

openclaw gateway

開啟:

  • http://<tailscale-ip>:18789/(或你設定的 gateway.controlUi.basePath

公開網際網路(Funnel)

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

安全注意事項

  • Gateway 驗證預設為必要(token/密碼或 Tailscale 身分標頭)。
  • 非 loopback 繫結仍然需要共用的 token/密碼(gateway.auth 或環境變數)。
  • 設定精靈預設會產生 gateway token(即使在 loopback 上)。
  • UI 透過 connect.params.auth.tokenconnect.params.auth.password 傳送驗證。
  • 非 loopback 的控制台 UI 部署必須明確設定 gateway.controlUi.allowedOrigins(完整 origin)。未設定時,gateway 預設拒絕啟動。
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true 啟用 Host 標頭 origin 退回模式,但這是危險的安全降級。
  • 使用 Serve 時,當 gateway.auth.allowTailscaletrue 時,Tailscale 身分標頭可滿足控制台 UI/WebSocket 驗證(不需要 token/密碼)。HTTP API 端點仍需 token/密碼。設定 gateway.auth.allowTailscale: false 以要求明確憑證。詳見 Tailscale安全性。此無 token 流程假設 gateway 主機可信。
  • gateway.tailscale.mode: "funnel" 需要 gateway.auth.mode: "password"(共用密碼)。

建構 UI

Gateway 從 dist/control-ui 提供靜態檔案。建構方式:

pnpm ui:build # 首次執行時自動安裝 UI 相依套件