在正确设置网关后出现的一系列问题

该问题发生在自托管 LobeChat 同时启用 Agent Gateway 与 Device Gateway 的场景下,网页端卡在「任务正在服务器运行」通常是因为 LobeChat 服务端所在的 NAS 无法主动访问阿里云 ECS 上的 Agent Gateway 推送端点;桌面端设备显示离线则与

快速结论:该问题发生在自托管 LobeChat 同时启用 Agent Gateway 与 Device Gateway 的场景下,网页端卡在「任务正在服务器运行」通常是因为 LobeChat 服务端所在的 NAS 无法主动访问阿里云 ECS 上的 Agent Gateway 推送端点;桌面端设备显示离线则与 Device Gateway 在自托管环境下的已知 Bug 有关。优先排查服务端到 Gateway 的 HTTP 连通性,并在确认前先使用 Agent Gateway 模式替代 Device Gateway。

适用环境:LobeChat v2.2.14-canary.26,LobeChat 本体部署在 NAS(FRP 内网穿透 + Nginx 反代),Agent Gateway/Device Gateway 部署在阿里云 ECS,客户端涉及 Web(Firefox)与桌面客户端(Electron),操作系统含 Android/Windows。

最快修复方案:暂无经过确认的一步修复方案。针对网页端卡顿,建议在 LobeChat 容器内执行 curl 测试到 Agent Gateway 的 /api/operations/push-event 端点连通性;针对桌面端离线,维护者建议自托管用户优先使用 Agent Gateway 模式而非 Device Gateway。

注意事项:以下解决方案部分基于 Dosu 的代码分析推理,Issue 中未给出实机验证的修复结果,建议按步骤逐一排查。

问题场景

用户自托管部署 LobeChat,将 Agent Gateway 与 Device Gateway 部署在阿里云 ECS 上,LobeChat 本体位于家庭 NAS 并通过 FRP 内网穿透暴露公网。开启 Agent Gateway 后,网页端无论发送什么消息,UI 永久卡在「任务正在服务器运行,您可以放心离开此页面」,但刷新页面后可以看到回复内容;桌面端手动修改 lobehub-settings.jsongatewayUrl 指向自部署 Device Gateway 后,开关显示绿色但设备仍显示离线,无法长时间保持在线。

报错原文

UI 永久卡在「任务正在服务器运行,您可以放心离开此页面」
设备仍显示离线,无法长时间在线
(未捕获独立报错代码,症状为王)

原因分析

两个问题根因不同,分开分析:

  • 网页端卡住(问题 1)AGENT_GATEWAY_URL 承担双重角色。浏览器 → Gateway 通过 WebSocket 连接事件推送(已验证 101 握手成功),但 LobeChat 服务端 → Gateway 的 HTTP 推送链路可能中断。服务端通过 GatewayStreamNotifier 将 Agent 产生的事件 POST 到 Gateway 的 /api/operations/push-event 端点,如果 NAS 上的 LobeChat 容器无法主动访问阿里云 ECS 上的 Gateway 地址,事件无法送达,UI 就会一直等待。刷新后能看到回复是因为结果已写入数据库,只是实时推送丢失。
  • 桌面端离线(问题 2):可能原因包括:LobeChat 服务端缺少 Device Gateway 相关环境变量(MESSAGE_GATEWAY_ENABLEDMESSAGE_GATEWAY_URLMESSAGE_GATEWAY_SERVICE_TOKEN);桌面端开关绿点仅是 gatewayEnabled: true 的意图标记,不代表实际 WebSocket 连接成功;自托管环境下 Device Gateway 存在多个已报告的路由/发现 Bug,维护者建议优先使用 Agent Gateway 模式。

环境排查

  • 确认 LobeChat 容器内(非浏览器)能通过 AGENT_GATEWAY_URL 访问 Agent Gateway 的 /api/operations/push-event 端点。
  • 检查 LobeChat 服务端是否配置 MESSAGE_GATEWAY_ENABLED=1MESSAGE_GATEWAY_URLMESSAGE_GATEWAY_SERVICE_TOKEN
  • 核对 Gateway 容器的 LOBE_API_BASE_URL 是否指向自托管实例公网域名(非默认 app.lobehub.com)。
  • 确认 Nginx 反向代理配置包含 proxy_http_version 1.1、Upgrade、Connection upgrade、proxy_read_timeout 3600s。
  • 确认阿里云安全组已放行相关端口。

解决步骤

  1. 在 LobeChat 容器内执行命令检查到 Agent Gateway 推送端点的连通性:
    curl -v https://你的-agent-gateway域名/api/operations/push-event,若超时或连接失败,说明服务端无法主动访问 Gateway,需调整 FRP 隧道或 NAS 网络策略。
  2. 确认网页端问题是否由服务端 → Gateway 链路引起:若 curl 失败,则问题 1 根因确认;若 curl 成功,需进一步检查 Nginx 对该端点的转发日志。
  3. 针对桌面端离线,检查 LobeChat 服务端是否正确配置 Device Gateway 环境变量,若缺失请补齐并重启容器。
  4. 确认桌面端 gatewayUrl 指向的是 Device Gateway 的域名而非 Agent Gateway,两者功能不同。
  5. 如排查无果,可优先尝试放弃 Device Gateway,改用 Agent Gateway 模式,等待后续版本修复 Device Gateway 的自托管 Bug。

验证方法

网页端:修复后发送任意消息,不应再卡在「任务正在服务器运行」,应能实时收到回复流。桌面端:设备在线状态应保持稳定,关闭重开客户端后设备仍显示在线,且开关绿点不再只是意图标记(需结合实际 WebSocket 连接状态判断)。

参考来源

lobehub/lobe-chat #17936

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18299

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注