Unable to use Marketplace on self-hosted instance

该报错通常出现在自托管(Docker Compose)部署的 LobeChat 服务器向 market.lobehub.com 发起服务端请求时,请求被 Cloudflare 以 403 拦截,导致 M2M token 获取返回 HTML 页面而非 JSON。优先排查服务器出口 IP 是否被 Clo

快速结论:该报错通常出现在自托管(Docker Compose)部署的 LobeChat 服务器向 market.lobehub.com 发起服务端请求时,请求被 Cloudflare 以 403 拦截,导致 M2M token 获取返回 HTML 页面而非 JSON。优先排查服务器出口 IP 是否被 Cloudflare 封禁,并考虑使用 FEATURE_FLAGS=-market 临时禁用 Market 功能。

适用环境:LobeHub 2.2.14,Docker Compose 部署,macOS 客户端,Chrome 浏览器,腾讯云轻量服务器(香港、新加坡地域),HTTPS 域名访问。

最快修复方案:暂无确认的一步修复方案。Issue 中明确验证过的首选处理方法是设置 FEATURE_FLAGS=-market 禁用 Market 功能,可立即停止相关报错。

注意事项:FEATURE_FLAGS=-market 会完全禁用 Market UI 和后端 API 调用;仅设置 -skill-store 不足以隐藏全部 API 请求。MARKET_TRUSTED_CLIENT_ID/SECRET 需要在 Market 服务端白名单,官方未提供自助获取渠道。

问题场景

用户在自托管的 LobeHub 2.2.14(Docker Compose 部署)中,通过 HTTPS 域名访问以下功能时触发问题:设置 → 凭据(Credentials)、MCP Marketplace、Skills Marketplace、推荐任务模板。无论部署在香港还是新加坡的腾讯云轻量服务器,问题均稳定复现。

报错原文

Error [TRPCError]: Failed to list credentials
  code: 'INTERNAL_SERVER_ERROR',
  [cause]: Error [MarketAPIError]: Forbidden
    status: 403,
    errorBody: undefined
Error fetching M2M token:
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
HTTP/2 403
server: cloudflare

原因分析

可能原因:自托管服务器向 market.lobehub.com 发起服务端请求时,被 Cloudflare 的 WAF/机器人防护拦截(返回 403)。Market API 已不再允许匿名/未认证访问,同时服务器出口 IP 触发 Cloudflare 拦截,导致 M2M token 请求返回 HTML 错误页,而非预期的 JSON 响应,从而引发 SyntaxError: Unexpected token '<'

需要说明的是,虽然 HTTPS 已正确配置,但腾讯云轻量服务器的 IP 段可能被 Cloudflare 视为高风险来源,导致服务端请求被拦截。这与客户端浏览器能否访问无关,问题发生在服务器的出站请求上。

环境排查

  • 确认 LobeHub 版本为 2.2.14
  • 确认部署方式为 Docker Compose
  • 确认服务器地域(Issue 中测试了香港、新加坡腾讯云轻量服务器)
  • 确认 Market 端点为 https://market.lobehub.com
  • 检查 MARKET_TRUSTED_CLIENT_IDMARKET_TRUSTED_CLIENT_SECRET 环境变量是否已配置
  • 检查 FEATURE_FLAGS 环境变量的当前值
  • 验证服务器到 market.lobehub.com 的出站请求是否被拦截

解决步骤

  1. 临时禁用 Market 功能(可优先尝试):在 Docker Compose 环境变量中设置 FEATURE_FLAGS=-market,重启服务。此方案可立即停止所有 Market 相关报错,但会完全禁用 Market UI 和后端 API 调用。
  2. 联系 LobeHub 团队申请 M2M 凭据:如需恢复 Market 功能,可联系 LobeHub 团队申请白名单的 MARKET_TRUSTED_CLIENT_ID / MARKET_TRUSTED_CLIENT_SECRET。Issue 中明确指出,这些凭据需要在 Market 服务端白名单,无法自助获取。
  3. 尝试更换出口 IP:可能原因之一是服务器 IP 被 Cloudflare 封禁,可尝试更换云服务商或使用代理等方式更换服务器出口 IP,验证是否仍被拦截。
  4. 使用 MARKET_BASE_URL 指向替代 Marketplace:可将 MARKET_BASE_URL 配置为兼容 @lobehub/market-sdk API 的自托管或替代 Marketplace。但 Issue 中明确指出,目前尚无公开的参考实现。
  5. 关注错误处理优化进展:Market 403 被转换为 tRPC 500 的问题已被单独记录(Issue #18443),可关注后续版本是否优化了错误降级处理。

验证方法

设置 FEATURE_FLAGS=-market 并重启服务后,打开设置 → 凭据页面,确认不再返回 HTTP 500,且日志中不再出现 market.creds.listmarket.registerM2MToken 等相关 tRPC 调用错误。若使用代理更换出口 IP 后,可直接访问 market.lobehub.com 验证是否仍返回 403。

参考来源

lobehub/lobe-chat #18607

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19785

发表回复

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