Skip to content

webchat2api 偶发首页卡死:/health/version 正常,但 //index.html 超时,重启容器后恢复 #28

Description

@QLHazyCoder

问题概述

线上遇到一个偶发问题:webchat2api 容器仍然处于运行状态,轻量健康接口也正常,但首页和前端静态页面无法打开,直到重启容器后才恢复。

这看起来不像是 Caddy、证书、域名或容器退出导致的问题,更像是应用本身进入了一种“部分存活但前端静态返回链卡死”的状态。


现象表现

问题发生时:

  • 容器仍在运行
  • GET /health 返回 200 {"status":"ok"}
  • GET /version 返回 200
  • GET / 超时
  • GET /index.html 也超时
  • 容器内 /app/web_dist/index.html 文件实际存在
  • 重启容器后,首页立即恢复正常

重启后验证:

  • /health => 200
  • /version => 200
  • / => 200
  • 首页 HTML 正常返回

为什么判断更像项目层面的问题

排查时已确认:

  • 反向代理 Caddy 配置正常
  • HTTPS 证书正常
  • 容器没有退出
  • 容器没有 OOMKilled
  • 静态文件没有丢失
  • API 轻接口仍然能正常响应

也就是说,不是整站都挂了,而是应用进入了这样一种异常状态:

  • JSON 健康接口还能回
  • 但前端首页和静态文件返回链卡住

这更像是项目内部的应用层问题,而不是纯部署问题。


运行环境

  • 镜像:ghcr.io/zqbxdev/webchat2api:latest
  • GET /version 返回:0.0.11
  • 启动方式:
    • uv run python main.py
    • uvicorn
    • entrypoint 中还会启动 Browser Bridge
  • 反向代理:Caddy
  • 容器端口:83
  • 公网域名:webchat2api.ai-api.20021108.xyz

相关代码位置

首页和静态前端回退逻辑看起来主要在这里:

  • api/app.py
  • api/support.py

当前逻辑大致是:

  • /health 直接返回 JSON
  • /{full_path:path} 使用 resolve_web_asset(...)
  • 找到文件后通过 FileResponse(...) 返回

从现象看,问题更像出在这条静态页面返回链,而不是整体路由不可用。


额外观察

排查过程中还观察到:

  • /_next/_index.txt 可以快速返回 404
  • //index.html 会持续超时
  • 容器内 /app/web_dist/index.html 文件存在且可读
  • 容器资源没有明显异常
    • 没有 OOM
    • CPU/内存也不高
  • 重启后服务立即恢复

这说明问题并不是静态文件缺失,而更像是运行时某种卡死/阻塞状态。


期望行为

如果服务还能正常返回 {"status":"ok"},那么首页静态页面也应该保持可访问。

至少不应该出现这种状态:

  • 健康检查显示正常
  • 但首页和前端页面完全打不开

怀疑方向

目前比较怀疑这些方向之一:

  • FastAPI 静态页面回退路由在某些情况下卡住
  • FileResponse(...) 返回链偶发阻塞
  • 单进程运行下,某些同步任务/线程池占用影响了静态页面响应
  • Browser Bridge 或后台 watcher 对主服务造成副作用
  • 应用进入“部分可用但静态页面不可用”的异常状态

影响

这个问题会导致:

  • 前端页面、后台界面看起来像“站点挂了”
  • 但简单健康检查仍然显示正常
  • 运维层面不容易第一时间发现真实故障

临时解决办法

当前临时处理方式是:

  • 重启 webchat2api 容器

重启后可立即恢复,但这只是临时 workaround,并不能解决根因。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not workingneeds reproductionNeeds reproduction or verificationperformancePerformance or responsiveness issuepriority: highHigh priority

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions