故障排查GitHub issue4 分钟阅读排错/错误码

解决FastGPT私有部署下skill配置页iframe加载错误问题

在SHOWSKILL=true且使用K8s部署(OpenSandbox Server通过Ingress暴露)的场景下,Skill详情页的“skill配置”中内嵌iframe显示FastGPT自身页面,而非sandbox编辑器内容。

现象

SHOW_SKILL=true且使用K8s部署(OpenSandbox Server通过Ingress暴露)的场景下,Skill详情页的“skill配置”中内嵌iframe显示FastGPT自身页面,而非sandbox编辑器内容。当AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY=true(默认值)时,会生成错误的URL,将端口追加在路径末尾,例如https://server-host/sandboxes/{id}/proxy/8080:8080

可能原因

根因是proxy.ts的URL拼接逻辑存在错误。当开启服务端代理模式时,OpenSandbox服务端返回的endpoint格式为server-host/sandboxes/{id}/proxy/8080@fastgpt-sdk/sandbox-adaptergetEndpoint()会将整个字符串赋值给host字段(因无法找到冒号)。而proxy.ts固定拼接${protocol}://${host}:${targetPort},导致端口被错误追加到路径末尾;同时proxy.ts未使用adapter返回的正确url字段,而是依赖host字段进行拼接。在K8s通过Ingress暴露OpenSandbox Server且无显式端口的场景下,该host解析逻辑会完全失效。

排查步骤

  1. 确认当前为FastGPT私有部署版本v4.14.16,且已开启SHOW_SKILL=true,使用K8s部署OpenSandbox Server并通过Ingress暴露。
  2. 检查配置项AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY是否为默认的true值,同时确认AGENT_SANDBOX_OPENSANDBOX_BASEURL已设置为正确的域名。
  3. 打开Skill详情页的“skill配置”,查看浏览器网络请求,确认iframe加载的URL是否存在端口被追加到路径末尾的异常。
  4. 验证SSE流是否正确返回sandbox endpoint(phase: ready),若SSE流正常但iframe显示异常,则可定位为此问题。

解决与验证

修复方案分为两部分:一是修改proxy.ts,使用adapter返回的endpoint.url替代host:port拼接逻辑;二是在Dockerfile的builder阶段,使用esbuild编译server.ts并覆盖standalone默认server,示例命令为cd projects/app && ./node_modules/.bin/esbuild server.ts --bundle --platform=node --format=cjs --outfile=server-proxy.js --external:next,并将编译后的文件复制到对应目录。完成修改并重新部署后,打开Skill详情页的“skill配置”,确认iframe正确加载sandbox编辑器内容,而非FastGPT自身页面,同时检查网络请求中的iframe URL是否为正确的转发地址。

来源:https://github.com/labring/FastGPT/issues/6909