故障排查
服务无法启动
先检查构建和配置:
bash
npm run build常见原因:
- Node.js 版本低于 20。
.env中数字或布尔值不符合配置 Schema。- 端口已被占用。
dist尚未构建却直接运行了npm run start:prod。
临时换端口验证:
bash
PORT=6699 BRIEF_ENABLED=false npm run start:prod健康检查 degraded
bash
curl http://localhost:6688/health如果 checks.redis 为 false:
- 检查
REDIS_HOST、REDIS_PORT和REDIS_PASSWORD。 - 在 Docker 中执行
docker compose ps redis和docker compose logs redis。 - 确认应用容器内不能用
127.0.0.1访问另一个 Redis 容器,应使用服务名redis。
Redis 故障不一定阻止实时热榜工作,但缓存可能退化为单进程内存。
历史查询或简报数据库错误
检查 MongoDB:
bash
docker compose ps mongodb
docker compose exec mongodb mongosh --eval "db.adminCommand('ping')"容器部署时连接字符串应类似:
dotenv
MONGODB_URI=mongodb://mongodb:27017/daily-hot-api应用会尽量在 MongoDB 暂时不可用时继续运行,因此“进程在线”不代表历史和简报功能可用。
热榜返回空数组
实时热榜可能以 200 返回空 data 和 message。请检查:
- 上游站点是否变更接口或页面结构。
REQUEST_TIMEOUT是否过短。- 上游是否要求新的 Header、Cookie、签名或区域网络。
- 日志中对应
Source的错误信息。 - 使用
noCache=true重试;受保护来源会忽略强刷参数。
bash
curl 'http://localhost:6688/hot-lists/zhihu?noCache=true'定时任务没有运行
bash
curl http://localhost:6688/api/scheduler/status
curl http://localhost:6688/api/briefs/scheduler/status确认:
SCHEDULER_AUTO_START或BRIEF_ENABLED已启用。- Cron 表达式有效。
- 简报的
BRIEF_TIMEZONE正确。 - 修改
.env后已经重启进程。 - 多实例部署中检查的是实际负责调度的实例。
AI 简报生成失败
依次检查:
OPENAI_API_KEY、OPENAI_API_BASE_URL和AI_MODEL。TAVILY_API_KEY及外部网络。BRIEF_SOURCES中的来源是否能返回数据。- MongoDB 是否可写。
- 最新失败简报的
error字段;需要输入证据时才使用includeDebug=true。
测试时减少成本和等待时间:
bash
curl -X POST http://localhost:6688/api/briefs/generate \
-H 'Content-Type: application/json' \
-d '{"sources":["cls"],"period":"manual-test","force":true}'文档站资源 404
GitHub Pages 项目站点部署在 /daily-hot-api/ 子路径。确认 docs/.vitepress/config.mts 包含:
ts
base: '/daily-hot-api/'并在仓库 Settings → Pages → Build and deployment 中选择 GitHub Actions。