Aller au contenu

Web

Le Gateway sert une petite interface de contrôle navigateur (Vite + Lit) sur le même port que le WebSocket du Gateway :

  • par défaut : http://<host>:18789/
  • préfixe optionnel : définir gateway.controlUi.basePath (par ex. /openclaw)

Les capacités se trouvent dans Control UI. Cette page se concentre sur les modes de liaison, la sécurité et les surfaces web.

Lorsque hooks.enabled=true, le Gateway expose également un petit point de terminaison webhook sur le même serveur HTTP. Voir configuration du Gatewayhooks pour l’authentification et les payloads.

L’interface de contrôle est activée par défaut lorsque les ressources sont présentes (dist/control-ui). Vous pouvez la contrôler via la configuration :

{
gateway: {
controlUi: { enabled: true, basePath: "/openclaw" }, // basePath optional
},
}

Gardez le Gateway en boucle locale (loopback) et laissez Tailscale Serve le proxy :

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

Puis démarrez la passerelle :

Fenêtre de terminal
openclaw gateway

Ouvrez :

  • https://<magicdns>/ (ou votre gateway.controlUi.basePath configuré)
{
gateway: {
bind: "tailnet",
controlUi: { enabled: true },
auth: { mode: "token", token: "your-token" },
},
}

Puis démarrez la passerelle (le jeton est requis pour les liaisons non-loopback) :

Fenêtre de terminal
openclaw gateway

Ouvrez :

  • http://<tailscale-ip>:18789/ (ou votre gateway.controlUi.basePath configuré)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password" }, // or OPENCLAW_GATEWAY_PASSWORD
},
}
  • L’authentification du Gateway est requise par défaut (jeton/mot de passe ou en-têtes d’identité Tailscale).
  • Les liaisons non-loopback exigent toujours un jeton/mot de passe partagé (require) (gateway.auth ou env).
  • L’assistant génère un jeton de passerelle par défaut (même en boucle locale).
  • L’interface utilisateur envoie connect.params.auth.token ou connect.params.auth.password.
  • Pour les déploiements de l’interface de contrôle non-loopback, définissez gateway.controlUi.allowedOrigins explicitement (origines complètes). Sans cela, le démarrage de la passerelle est refusé par défaut.
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true active le mode de repli d’origine basé sur l’en-tête Host, mais constitue une rétrogradation de sécurité dangereuse.
  • Avec Serve, les en-têtes d’identité Tailscale peuvent satisfaire l’authentification de l’interface de contrôle/WebSocket lorsque gateway.auth.allowTailscale est true (aucun jeton/mot de passe requis). Les points de terminaison de l’API API HTTP nécessitent toujours un jeton/mot de passe. Définissez gateway.auth.allowTailscale: false pour exiger des identifiants explicites. Voir Tailscale et Sécurité. Ce flux sans jeton suppose que l’hôte de la passerelle est de confiance.
  • gateway.tailscale.mode: "funnel" nécessite gateway.auth.mode: "password" (mot de passe partagé).

Le Gateway sert des fichiers statiques depuis dist/control-ui. Construisez-les avec :

Fenêtre de terminal
pnpm ui:build # auto-installs UI deps on first run