Gateway 网关配置教程

intermediate
## Gateway 是什么 Gateway 是 OpenClaw 的核心进程,负责管理会话、路由消息和连接聊天渠道。你可以把它理解为智能体的"中枢神经"——所有消息都经过 Gateway 处理和分发。 Gateway 的一个巧妙设计是**单端口复用**:WebSocket 通信、HTTP API 和 Control UI 仪表板全部共享同一个端口,默认是 `18789`。这意味着你只需要开放一个端口,就能同时使用所有功能。 启动 Gateway: ```bash openclaw gateway run ``` 启动后,你可以在浏览器中访问 `http://127.0.0.1:18789/` 打开仪表板,查看渠道状态、会话列表和配置信息。 ## 配置文件 Gateway 的配置文件位于: ``` ~/.openclaw/openclaw.json ``` 这是一个 JSON5 格式的文件,支持注释和尾逗号,编辑起来比标准 JSON 更友好。 如果你没有手动创建这个文件,OpenClaw 会使用默认配置运行。默认情况下,OpenClaw 使用内置的 Pi 二进制文件以 RPC 模式运行 Gateway,无需额外配置即可开始使用。 查看当前配置: ```bash openclaw config ``` 用编辑器打开配置文件: ```bash openclaw configure ``` 一个基本的配置文件结构如下: ```json5 { // Gateway 配置 "gateway": { "port": 18789, "bind": "127.0.0.1" }, // 渠道配置 "channels": { "telegram": { "botToken": "你的Token" } }, // 模型配置 "models": { "default": "openai:gpt-4o" } } ``` ## 常用配置项 ### 端口设置 默认端口是 `18789`,如果与其他服务冲突,可以修改: ```json5 { "gateway": { "port": 8080 } } ``` 修改端口后需要重启 Gateway 才能生效。 ### 绑定模式 `gateway.bind` 控制 Gateway 监听的网络接口: | 值 | 含义 | 适用场景 | |------|------|----------| | `127.0.0.1`(默认) | 仅本机访问 | 本地开发、安全优先 | | `0.0.0.0` | 所有网络接口 | 需要局域网或公网访问 | ```json5 { "gateway": { "bind": "0.0.0.0" // 允许外部访问 } } ``` > **安全提醒**:将 bind 设置为 `0.0.0.0` 时,**必须同时配置认证**,否则 Gateway 会拒绝启动并报错 `refusing to bind without auth`。这是一个安全保护机制,防止你的智能体被未授权访问。 ### 认证配置 当 Gateway 需要对外暴露时,必须配置认证。支持两种方式: **Token 认证**(推荐): ```json5 { "gateway": { "bind": "0.0.0.0", "auth": { "token": "你的安全Token" } } } ``` **密码认证**: ```json5 { "gateway": { "bind": "0.0.0.0", "auth": { "password": "你的密码" } } } ``` 建议使用长随机字符串作为 Token,比如用 `openssl rand -hex 32` 生成。 ### 热重载模式 `gateway.reload.mode` 控制配置变更后的重载行为: | 模式 | 说明 | |------|------| | `off` | 不自动重载,需要手动重启 | | `hot` | 安全变更立即生效,不中断连接 | | `restart` | 所有变更都触发完整重启 | | `hybrid`(默认) | 安全变更热应用,需要重启的变更自动重启 | ```json5 { "gateway": { "reload": { "mode": "hybrid" } } } ``` `hybrid` 模式是最推荐的选择——修改模型配置、渠道 Token 等"安全"变更会立即生效,而修改端口、绑定地址等需要重启的变更会自动触发重启。 ## 远程访问 默认情况下,Gateway 只监听 `127.0.0.1`,无法从其他设备访问。如果你需要从手机、其他电脑或远程服务器访问 Gateway,有以下几种方式。 ### 方式一:Tailscale / VPN(推荐) Tailscale 是最简单安全的远程访问方案。它会为你的设备创建一个虚拟局域网,无需修改 Gateway 的绑定配置。 1. 在运行 Gateway 的机器和你的访问设备上都安装 Tailscale 2. 两台设备加入同一个 Tailscale 网络 3. 通过 Tailscale 分配的 IP 访问 Gateway ``` http://100.x.x.x:18789/ ``` 优点:不需要修改 Gateway 配置,不需要开放公网端口,流量加密。 ### 方式二:SSH 隧道 如果你有 SSH 访问权限,可以通过 SSH 隧道将远程 Gateway 端口映射到本地: ```bash ssh -N -L 18789:127.0.0.1:18789 user@你的服务器IP ``` 这条命令会将远程服务器的 `18789` 端口映射到本地的 `18789` 端口。之后在本地浏览器访问 `http://127.0.0.1:18789/` 就能打开远程 Gateway 的仪表板。 参数说明: - `-N`:不执行远程命令,只做端口转发 - `-L 18789:127.0.0.1:18789`:本地端口:远程地址:远程端口 > **提示**:SSH 隧道断开后需要重新连接。可以配合 `autossh` 实现自动重连。 ## 仪表板 Gateway 内置了一个 Web 仪表板(Control UI),提供可视化的管理界面。 ### 本地访问 Gateway 启动后,直接在浏览器打开: ``` http://127.0.0.1:18789/ ``` ### 远程访问 如果 Gateway 运行在远程服务器上,通过上面介绍的 Tailscale 或 SSH 隧道访问即可。 仪表板提供以下功能: - **渠道状态**:查看各聊天渠道的连接状态和延迟 - **会话管理**:浏览和管理活跃的对话会话 - **配置查看**:查看当前 Gateway 配置 - **日志查看**:实时查看 Gateway 运行日志 ## 服务管理命令 OpenClaw 提供了一组命令来管理 Gateway 服务: ### 查看状态 ```bash # 基本状态 openclaw gateway status # 深度扫描(检查所有组件健康状态) openclaw gateway status --deep ``` `--deep` 选项会检查渠道连接、模型可用性、磁盘空间等,适合排查问题时使用。 ### 重启 Gateway ```bash openclaw gateway restart ``` 修改配置后通常需要重启。如果使用 `hybrid` 热重载模式,部分配置变更会自动生效,无需手动重启。 ### 停止 Gateway ```bash openclaw gateway stop ``` 停止后所有渠道连接会断开,智能体不再响应消息。 ### 安装为系统服务 如果你希望 Gateway 在系统启动时自动运行: ```bash openclaw gateway install ``` 这会将 Gateway 注册为系统服务(macOS 使用 launchd,Linux 使用 systemd),开机自动启动,崩溃自动重启。 ### 诊断检查 遇到问题时,先运行诊断命令: ```bash openclaw doctor ``` `doctor` 会检查: - Node.js 版本是否满足要求 - 配置文件是否有语法错误 - 网络连接是否正常 - 依赖是否完整 - Gateway 端口是否可用 ## 热重载详解 Gateway 的 `hybrid` 热重载模式(默认)是一个智能机制,它会根据配置变更的类型自动选择最合适的重载方式。 ### 安全变更(热应用,不中断连接) 以下配置变更会立即生效,不需要重启: - 修改模型配置(切换模型、更新 API Key) - 修改渠道 Token - 修改智能体人设(SOUL.md、AGENTS.md) - 修改工具权限 ### 需要重启的变更 以下配置变更需要重启 Gateway: - 修改端口号 - 修改绑定地址 - 修改认证配置 - 安装/卸载插件 在 `hybrid` 模式下,当检测到需要重启的变更时,Gateway 会自动执行优雅重启——先完成正在处理的消息,然后重启服务。 ## 常见故障排查 ### 端口冲突(EADDRINUSE) **错误信息**:`Error: listen EADDRINUSE: address already in use :::18789` **原因**:端口 `18789` 已被其他进程占用。 **解决方法**: ```bash # 查看占用端口的进程 lsof -i :18789 # macOS/Linux netstat -ano | findstr 18789 # Windows # 方法一:停止占用端口的进程 kill # 方法二:修改 Gateway 端口 openclaw configure # 将 gateway.port 改为其他端口,如 18790 ``` ### 认证失败(unauthorized) **错误信息**:`401 Unauthorized` 或 `authentication failed` **原因**:访问 Gateway 时提供的 Token 或密码不正确。 **解决方法**: 1. 检查配置文件中的 `gateway.auth.token` 或 `gateway.auth.password` 2. 确认客户端使用的认证信息与配置一致 3. 如果忘记了 Token,可以直接修改配置文件重新设置 ```bash openclaw configure # 修改 auth.token 的值,然后重启 openclaw gateway restart ``` ### 绑定错误(refusing to bind without auth) **错误信息**:`refusing to bind to 0.0.0.0 without auth` **原因**:将 `gateway.bind` 设置为 `0.0.0.0`(对外暴露)但没有配置认证。 **解决方法**: ```json5 { "gateway": { "bind": "0.0.0.0", "auth": { "token": "设置一个安全的Token" // 必须配置认证 } } } ``` 或者如果不需要外部访问,将 bind 改回 `127.0.0.1`。 ### Gateway 无法启动 如果 Gateway 启动失败,按以下步骤排查: ```bash # 1. 运行诊断 openclaw doctor # 2. 检查配置文件语法 openclaw config # 3. 查看详细日志 openclaw gateway run --verbose # 4. 检查 Node.js 版本(需要 22.14+ 或 24+) node --version ``` ### 渠道连接断开 如果某个渠道突然断开: ```bash # 检查渠道状态 openclaw channels status --probe # 重新登录指定渠道 openclaw channels login --channel <渠道名> # 如果问题持续,重启 Gateway openclaw gateway restart ``` ## 小结 Gateway 是 OpenClaw 的核心,掌握它的配置和管理是进阶使用的基础。记住几个关键点: - 配置文件在 `~/.openclaw/openclaw.json`,JSON5 格式 - 默认端口 `18789`,单端口复用所有功能 - 对外暴露时必须配置认证 - 远程访问推荐 Tailscale 或 SSH 隧道 - 遇到问题先跑 `openclaw doctor` #OpenClawGateway #网关配置 #远程访问 #服务管理 #龙虾技能库