Skip to content

常见问题与排查

本页按现象组织排查入口。命令默认在 ECS 上执行;本地开发命令会单独标注。排查时只截取必要错误行,避免复制完整生产日志。

后端不可用

现象优先检查命令
App API 全部失败fitdoc-core 是否 activesystemctl status fitdoc-core
/health 失败upstream 是否监听 8001ss -tlnp | grep 8001
Nginx 返回 502后端进程或 proxy_passcurl -s http://127.0.0.1:8001/health
启动后立即退出后端日志journalctl -u fitdoc-core -n 100 --no-pager

处理顺序:

bash
systemctl is-active fitdoc-core
curl -s http://127.0.0.1:8001/health
journalctl -u fitdoc-core -n 100 --no-pager
sudo systemctl restart fitdoc-core

如果日志指向数据库、环境变量或 migration 错误,先修复根因再重启。

Nginx 代理异常

现象判断命令
首页打不开静态根目录或 Nginx 状态异常systemctl status nginx
API 404/502location 或 upstream 错误`grep -nE 'location
修改配置后失败配置语法错误sudo nginx -t
HTTPS 异常证书或 server block`sudo nginx -T | grep -nE 'listen 443

配置变更流程:

bash
sudo nginx -t
sudo systemctl reload nginx
curl -s http://127.0.0.1/health

当前 /docs 被后端文档代理规则覆盖。VitePress 文档站发布到 /doc-center/,避免覆盖 FastAPI Swagger。

数据库连接失败

现象判断检查方式
后端启动时报数据库连接错误DATABASE_URL、RDS 白名单或网络异常检查 .env key 是否存在,不输出真实值。
Alembic 失败migration 链或连接权限异常alembic currentalembic upgrade head
API 超时RDS 连接池或慢查询先看后端日志中的错误类型,再决定是否查数据库元数据。

本地开发如果需要访问 RDS,应使用受控 SSH 隧道或开发库,不把生产连接串写入命令历史或文档。

RAG 或 LLM 响应失败

现象优先检查来源
AI 回复降级或失败LLM_PROVIDERLLM_MODEL 与对应凭据是否存在后端 .env key 列表
RAG 检索为空RAG_PIPELINE_VERSIONRAG_HYBRID_SCHEMA_TAGknowledge_chunksAI/RAG 与数据库 reference
rerank 超时RAG_ENABLE_RERANK、timeout、circuit breakerapp/core/rag/reranker.py
embedding 失败DASHSCOPE_API_KEY 与外部服务可用性RAG 检索日志

可先运行后端 RAG 护栏脚本:

bash
cd /opt/fitdoc/backend
source venv/bin/activate
python scripts/rag/run_rag_production_guardrails.py

生产排查只记录错误类型、模块名和时间点,不复制模型请求正文、患者输入全文或外部服务凭据。

文档站路径混淆

现象原因处理
访问生产 /docs 看到 FastAPI Swagger当前 Nginx 将 /docs 代理到 fitdoc-core这是当前生产事实。
访问生产 /docs 看到 FastAPI Swagger当前 Nginx 将 /docs 代理到 fitdoc-core这是当前生产事实,文档中心入口为 /doc-center/
本地 VitePress /doc-center/ 正常,生产 /doc-center/ 不显示文档站文档站构建产物尚未复制到 /opt/fitdoc/frontend/doc-center/重新发布 docs_site/.vitepress/dist/
文档站静态资源 404base: '/doc-center/' 与部署目录不一致,或静态产物未完整同步。核对 docs_site/.vitepress/config.ts/opt/fitdoc/frontend/doc-center/

本地构建验证:

powershell
cd D:\Fitdoc_app\docs_site
npm run docs:build
npm run docs:preview

Flutter 请求失败

现象判断检查
所有接口 404API_BASE_URL 未包含 /api查看构建命令中的 --dart-define=API_BASE_URL
Web 调试 CORS 报错后端 CORS origin 未放行检查 CORS_ALLOW_ORIGINSCORS_ALLOW_ORIGIN_REGEX
真机无法访问本机后端localhost 指向手机自身使用局域网 IP 或可访问的测试服务地址。
视频无法播放VIDEO_BASE_URL 或 Nginx 静态路径错误访问具体 /static/videos/ 资源。

APK 构建或安装失败

现象判断命令
依赖失败Flutter/Dart 版本或网络问题flutter pub get -v
编译失败Android Gradle、NDK 或代码错误flutter build apk --release -v
安装失败设备已有冲突包或签名不一致adb install -r <apk>
发布签名不符合要求当前 release 使用 debug signing查看 android/app/build.gradle.kts

当前 release signing 不是正式商店签名配置。对外发布前需要独立补齐 keystore 和安全注入。

快速命令索引

bash
systemctl is-active fitdoc-core nginx gitea
systemctl is-enabled fitdoc-core nginx gitea
ss -tlnp | grep -E '(:80|:443|:8001|:3000)'
curl -s http://127.0.0.1:8001/health
curl -s http://127.0.0.1/health
sudo nginx -t
journalctl -u fitdoc-core -n 100 --no-pager

来源锚点

  • docs/新服务器运维手册.md
  • 生产 ECS 只读服务状态与 Nginx 配置核验
  • apps/backend_service/scripts/README.md
  • apps/backend_service/app/core/config.py
  • apps/flutter_app/lib/config/environment_config.dart
  • apps/flutter_app/android/app/build.gradle.kts