# 故障排除与FAQ

<cite>
**本文引用的文件**
- [backend/app/main.py](file://backend/app/main.py)
- [backend/app/config.py](file://backend/app/config.py)
- [backend/app/database.py](file://backend/app/database.py)
- [backend/app/api/auth.py](file://backend/app/api/auth.py)
- [backend/app/services/auth.py](file://backend/app/services/auth.py)
- [backend/app/models/user.py](file://backend/app/models/user.py)
- [backend/app/schemas/auth.py](file://backend/app/schemas/auth.py)
- [backend/app/api/deps.py](file://backend/app/api/deps.py)
- [backend/app/api/queries.py](file://backend/app/api/queries.py)
- [backend/app/models/query.py](file://backend/app/models/query.py)
- [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py)
- [frontend/app/api/auth/[...nextauth]/route.ts](file://frontend/app/api/auth/[...nextauth]/route.ts)
- [frontend/lib/auth.ts](file://frontend/lib/auth.ts)
- [docker-compose.yml](file://docker-compose.yml)
- [backend/requirements.txt](file://backend/requirements.txt)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本文件面向GEO平台的运维与开发人员，提供系统化的故障排除与常见问题解答（FAQ）。内容覆盖认证问题、数据库连接问题、API调用问题、性能问题的定位与修复；同时给出系统监控与诊断方法（健康检查、错误日志分析、性能指标监控）、调试技巧与工具使用（开发/生产环境），以及常见错误码含义与预防性维护最佳实践，并提供紧急故障恢复流程与应急处理方案。

## 项目结构
- 后端采用FastAPI + SQLAlchemy异步ORM + Redis/APScheduler任务调度，通过Docker Compose编排PostgreSQL、Redis、后端与前端服务。
- 前端使用Next.js + NextAuth进行会话管理，通过NextAuth路由对接后端认证接口。
- 关键路径：前端登录请求 → NextAuth → 后端认证接口 → 数据库用户校验 → JWT签发 → 前端会话存储。

```mermaid
graph TB
FE["前端应用<br/>Next.js + NextAuth"] --> NA["NextAuth路由<br/>/api/auth/[...nextauth]"]
NA --> BA["后端认证接口<br/>/api/v1/auth/*"]
BA --> DB["数据库<br/>PostgreSQL"]
BA --> CFG["配置中心<br/>settings/DATABASE_URL/JWT等"]
BA --> SCH["任务调度器<br/>APScheduler"]
BE["后端服务<br/>FastAPI"] --> DB
BE --> REDIS["缓存/队列<br/>Redis"]
```

图表来源
- [backend/app/main.py:24-47](file://backend/app/main.py#L24-L47)
- [frontend/app/api/auth/[...nextauth]/route.ts](file://frontend/app/api/auth/[...nextauth]/route.ts#L1-L7)
- [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13)
- [backend/app/database.py:6-18](file://backend/app/database.py#L6-L18)
- [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95)

章节来源
- [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)

## 核心组件
- 应用入口与生命周期：定义FastAPI应用、CORS中间件、路由注册与健康检查端点。
- 配置管理：集中读取DATABASE_URL、REDIS_URL、JWT密钥、API密钥等。
- 数据库层：异步引擎与会话工厂，提供依赖注入式数据库会话。
- 认证模块：注册/登录/当前用户信息，JWT生成与校验，OAuth2 Bearer令牌解析。
- 查询模块：查询任务的增删改查，权限校验与分页参数控制。
- 任务调度：基于APScheduler的异步调度器，周期性扫描并执行到期查询任务。
- 前端认证：NextAuth凭据提供者对接后端登录接口，JWT会话策略。

章节来源
- [backend/app/main.py:13-47](file://backend/app/main.py#L13-L47)
- [backend/app/config.py:4-16](file://backend/app/config.py#L4-L16)
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
- [backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43)
- [backend/app/services/auth.py:1-69](file://backend/app/services/auth.py#L1-L69)
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
- [frontend/lib/auth.ts:1-56](file://frontend/lib/auth.ts#L1-L56)

## 架构总览
下图展示从浏览器到后端、数据库与外部平台的关键交互路径，以及认证与任务调度的运行时关系。

```mermaid
sequenceDiagram
participant U as "用户浏览器"
participant F as "前端NextAuth"
participant A as "后端认证接口"
participant D as "数据库"
participant J as "JWT令牌"
participant S as "任务调度器"
U->>F : "提交登录表单"
F->>A : "POST /api/v1/auth/login"
A->>D : "按邮箱查询用户"
D-->>A : "返回用户记录"
A->>A : "校验密码"
A->>J : "签发访问令牌"
A-->>F : "返回令牌与用户信息"
F-->>U : "建立会话并跳转"
Note over S,D : "后台定时扫描到期查询并执行"
```

图表来源
- [frontend/lib/auth.ts:13-31](file://frontend/lib/auth.ts#L13-L31)
- [backend/app/api/auth.py:22-37](file://backend/app/api/auth.py#L22-L37)
- [backend/app/services/auth.py:55-69](file://backend/app/services/auth.py#L55-L69)
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)
- [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84)

## 详细组件分析

### 认证组件分析
- 登录流程要点
  - 前端NextAuth凭据提供者收集邮箱/密码，调用后端登录接口。
  - 后端根据邮箱查询用户，校验密码，成功则签发JWT。
  - 前端以JWT策略存储会话，后续受保护路由自动携带Bearer令牌。
- 常见问题与定位
  - 用户名或密码错误：后端返回未授权错误，需检查输入格式与用户是否存在。
  - JWT过期或密钥不一致：令牌解析失败导致“凭据无效”，需核对JWT_SECRET与过期时间。
  - CORS跨域：若前端端口变更但后端允许源未更新，会出现跨域错误。
- 安全建议
  - 生产环境必须更换默认JWT密钥，设置合理过期时间。
  - 密码使用哈希存储，传输层启用HTTPS。

```mermaid
sequenceDiagram
participant C as "客户端"
participant N as "NextAuth"
participant R as "认证路由"
participant M as "模型/服务"
participant T as "JWT"
C->>N : "凭据提交"
N->>R : "POST /api/v1/auth/login"
R->>M : "查询用户并校验密码"
M-->>R : "返回用户或空"
alt "用户存在且密码正确"
R->>T : "生成访问令牌"
R-->>N : "返回令牌与用户"
N-->>C : "会话建立"
else "用户不存在或密码错误"
R-->>N : "401 未授权"
N-->>C : "登录失败"
end
```

图表来源
- [frontend/lib/auth.ts:13-31](file://frontend/lib/auth.ts#L13-L31)
- [backend/app/api/auth.py:22-37](file://backend/app/api/auth.py#L22-L37)
- [backend/app/services/auth.py:37-69](file://backend/app/services/auth.py#L37-L69)
- [backend/app/models/user.py:11-41](file://backend/app/models/user.py#L11-L41)

章节来源
- [frontend/app/api/auth/[...nextauth]/route.ts](file://frontend/app/api/auth/[...nextauth]/route.ts#L1-L7)
- [frontend/lib/auth.ts:1-56](file://frontend/lib/auth.ts#L1-L56)
- [backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43)
- [backend/app/services/auth.py:1-69](file://backend/app/services/auth.py#L1-L69)
- [backend/app/api/deps.py:16-43](file://backend/app/api/deps.py#L16-L43)
- [backend/app/schemas/auth.py:1-34](file://backend/app/schemas/auth.py#L1-L34)
- [backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)

### 数据库与会话组件分析
- 连接与依赖
  - 异步引擎与会话工厂统一由配置驱动，依赖注入在每个请求内创建会话并自动关闭。
  - 数据库URL来自环境变量，容器化部署通过compose的env_file注入。
- 常见问题
  - 连接字符串错误：确认主机、端口、数据库名、用户名与密码。
  - 权限不足：确保用户具备数据库访问权限。
  - 连接池耗尽：检查并发量与超时设置，必要时调整连接数。
- 诊断步骤
  - 在后端容器内使用psql连接数据库验证连通性。
  - 查看数据库慢查询日志与锁等待情况。

```mermaid
flowchart TD
Start(["请求进入"]) --> GetCfg["读取配置<br/>DATABASE_URL"]
GetCfg --> BuildEngine["创建异步引擎"]
BuildEngine --> Session["创建会话工厂"]
Session --> UseDB["依赖注入获取会话"]
UseDB --> Exec["执行SQL操作"]
Exec --> Close["关闭会话"]
Close --> End(["请求结束"])
```

图表来源
- [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13)
- [backend/app/database.py:6-29](file://backend/app/database.py#L6-L29)

章节来源
- [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)
- [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
- [docker-compose.yml:4-21](file://docker-compose.yml#L4-L21)

### 查询与任务调度组件分析
- 查询管理
  - 支持分页列表、创建、查询、更新、删除；创建时进行权限校验与配额检查。
  - 查询状态与下次执行时间字段用于调度决策。
- 任务调度
  - 每小时扫描一次到期查询，逐条执行并记录日志；异常不影响整体调度。
  - 调度器随应用生命周期启动与关闭。

```mermaid
flowchart TD
Tick["每小时触发"] --> Scan["扫描到期查询"]
Scan --> Found{"找到待执行项？"}
Found -- "否" --> Sleep["等待下次触发"]
Found -- "是" --> Exec["逐条执行查询"]
Exec --> Log["记录执行结果/异常"]
Log --> Sleep
```

图表来源
- [backend/app/workers/scheduler.py:30-90](file://backend/app/workers/scheduler.py#L30-L90)
- [backend/app/models/query.py:11-55](file://backend/app/models/query.py#L11-L55)

章节来源
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)
- [backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)

## 依赖分析
- 组件耦合
  - 认证路由依赖数据库与JWT服务；依赖注入贯穿API层与服务层。
  - 查询API依赖当前用户上下文与数据库会话。
  - 调度器依赖数据库会话与引用引擎，日志输出用于可观测性。
- 外部依赖
  - 数据库：PostgreSQL（异步驱动）
  - 缓存/队列：Redis
  - 任务调度：APScheduler
  - 浏览览器自动化：Playwright
  - 认证：JWT、BCrypt

```mermaid
graph LR
AUTH["认证路由"] --> DEPS["依赖注入"]
AUTH --> JWT["JWT服务"]
AUTH --> DB["数据库"]
QUERIES["查询路由"] --> DEPS
QUERIES --> DB
SCHED["调度器"] --> DB
SCHED --> CE["引用引擎"]
MAIN["应用入口"] --> AUTH
MAIN --> QUERIES
MAIN --> SCHED
```

图表来源
- [backend/app/main.py:6-42](file://backend/app/main.py#L6-L42)
- [backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43)
- [backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)
- [backend/app/workers/scheduler.py:18-95](file://backend/app/workers/scheduler.py#L18-L95)

章节来源
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)

## 性能考虑
- 数据库层
  - 使用异步ORM减少阻塞；为高频查询字段建立索引（如查询表的用户ID、状态、下次执行时间）。
  - 控制事务范围，避免长事务；批量写入时合并提交。
- API层
  - 合理设置分页参数上限，避免一次性返回过多数据。
  - 对热点接口增加缓存（如用户信息、平台配置）。
- 调度与并发
  - 调度间隔与任务粒度平衡；单次任务失败不应阻塞其他任务。
  - 监控任务执行时长与积压情况，必要时拆分任务或引入队列。
- 前端
  - 减少不必要的重渲染，使用稳定的数据结构；对长列表使用虚拟滚动。
- 观测性
  - 记录关键链路耗时与错误率；结合日志与指标进行根因分析。

[本节为通用指导，无需列出章节来源]

## 故障排除指南

### 认证相关问题
- 症状：登录返回401未授权
  - 可能原因
    - 邮箱不存在或密码错误
    - JWT密钥不匹配或过期
    - CORS限制导致预检失败
  - 排查步骤
    - 确认用户是否已注册且密码正确
    - 检查后端JWT_SECRET与前端会话策略
    - 核对后端CORS允许源是否包含前端地址
  - 解决方案
    - 修正凭据或重置密码
    - 更新JWT密钥并重启服务
    - 调整CORS配置

- 症状：受保护接口返回401凭据无效
  - 可能原因
    - 令牌缺失或格式错误
    - 令牌解析失败（算法或密钥不一致）
    - 用户被禁用或不存在
  - 排查步骤
    - 检查请求头是否包含Bearer令牌
    - 校验JWT_SECRET与过期时间
    - 确认用户仍存在于数据库且处于激活状态
  - 解决方案
    - 重新登录获取新令牌
    - 修复配置并刷新令牌

章节来源
- [backend/app/api/auth.py:22-37](file://backend/app/api/auth.py#L22-L37)
- [backend/app/services/auth.py:24-34](file://backend/app/services/auth.py#L24-L34)
- [backend/app/api/deps.py:16-43](file://backend/app/api/deps.py#L16-L43)
- [backend/app/main.py:30-36](file://backend/app/main.py#L30-L36)

### 数据库连接问题
- 症状：应用启动时报数据库连接失败
  - 可能原因
    - DATABASE_URL配置错误
    - PostgreSQL未就绪或端口未映射
    - 用户/密码/数据库名不正确
  - 排查步骤
    - 在后端容器内使用psql连接验证
    - 检查compose健康检查与依赖顺序
    - 确认防火墙与网络策略放行
  - 解决方案
    - 修正.env中的DATABASE_URL
    - 等待数据库健康检查通过后再启动后端
    - 修正凭据与数据库名称

- 症状：运行中频繁出现连接超时或连接池耗尽
  - 可能原因
    - 并发过高或事务过长
    - 连接池参数过小
  - 排查步骤
    - 查看数据库连接数与慢查询
    - 检查后端连接池配置
  - 解决方案
    - 优化查询与事务边界
    - 调整连接池大小与超时参数

章节来源
- [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13)
- [backend/app/database.py:6-18](file://backend/app/database.py#L6-L18)
- [docker-compose.yml:46-51](file://docker-compose.yml#L46-L51)

### API调用问题
- 症状：查询列表/详情/创建/更新/删除返回404
  - 可能原因
    - 资源不存在或ID格式错误
    - 权限不足（非本人资源）
  - 排查步骤
    - 校验UUID格式与资源归属
    - 检查当前用户上下文
  - 解决方案
    - 使用正确的用户与ID
    - 确保仅操作本人资源

- 症状：创建查询返回403
  - 可能原因
    - 配额不足或计划限制
  - 排查步骤
    - 检查用户计划与最大查询数
  - 解决方案
    - 升级计划或清理历史任务释放额度

章节来源
- [backend/app/api/queries.py:26-85](file://backend/app/api/queries.py#L26-L85)

### 性能问题
- 症状：查询列表加载缓慢
  - 可能原因
    - 分页参数过大
    - 缺少索引导致排序/过滤慢
  - 排查步骤
    - 降低limit并观察响应时间
    - 分析数据库执行计划
  - 解决方案
    - 合理设置分页上限
    - 为常用查询字段添加索引

- 症状：定时任务执行延迟或堆积
  - 可能原因
    - 单次任务耗时过长
    - 调度器未正确启动或关闭
  - 排查步骤
    - 查看调度器日志与任务耗时
    - 检查后端生命周期钩子
  - 解决方案
    - 将长任务拆分为多个短任务
    - 确保调度器随应用启动/停止

章节来源
- [backend/app/workers/scheduler.py:30-90](file://backend/app/workers/scheduler.py#L30-L90)
- [backend/app/main.py:13-21](file://backend/app/main.py#L13-L21)

### 健康检查与日志分析
- 健康检查
  - 后端健康端点：GET /health
  - compose健康检查：PostgreSQL与Redis分别提供ping/ready检测
- 日志分析
  - 后端日志：关注认证失败、数据库异常、任务执行错误
  - 前端日志：关注NextAuth回调与网络错误
- 性能指标
  - 记录关键API耗时、数据库查询耗时、任务执行耗时
  - 监控连接池使用率与队列长度

章节来源
- [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47)
- [docker-compose.yml:16-34](file://docker-compose.yml#L16-L34)
- [backend/app/workers/scheduler.py:22-90](file://backend/app/workers/scheduler.py#L22-L90)

### 调试技巧与工具使用
- 开发环境调试
  - 启用后端reload与详细日志
  - 使用curl或Postman测试认证与查询接口
  - 在前端浏览器开发者工具查看Network与Console
- 生产环境排查
  - 通过日志聚合与告警系统定位异常
  - 快速回滚至上一版本以隔离变更
  - 使用只读副本进行慢查询分析
- 性能分析
  - 使用数据库性能分析工具识别慢查询
  - 对热点接口进行压力测试与容量评估

[本节为通用指导，无需列出章节来源]

### 常见错误码与含义
- 400 Bad Request
  - 场景：注册时邮箱已存在、密码长度不足
  - 处理：修正输入并重试
- 401 Unauthorized
  - 场景：登录失败、令牌无效、凭据无法验证
  - 处理：重新登录或检查JWT配置
- 403 Forbidden
  - 场景：创建查询时配额不足
  - 处理：升级计划或清理历史任务
- 404 Not Found
  - 场景：查询资源不存在或非本人资源
  - 处理：确认ID与权限

章节来源
- [backend/app/api/auth.py:17-19](file://backend/app/api/auth.py#L17-L19)
- [backend/app/api/queries.py:34-38](file://backend/app/api/queries.py#L34-L38)
- [backend/app/api/queries.py:49-53](file://backend/app/api/queries.py#L49-L53)

### 预防性维护最佳实践
- 定期备份数据库与Redis
- 保持依赖版本更新与安全补丁
- 设置合理的日志保留与轮转策略
- 对关键接口与任务设置告警阈值
- 制定发布前的回归测试清单

[本节为通用指导，无需列出章节来源]

### 紧急故障恢复流程与应急处理
- 立即行动
  - 降级非关键功能，优先保障认证与核心查询
  - 回滚最近一次变更
- 诊断与修复
  - 快速定位日志与指标异常点
  - 修复配置错误、扩容资源或修复慢查询
- 验证与复盘
  - 发布后持续监控关键指标
  - 形成故障报告与改进措施

[本节为通用指导，无需列出章节来源]

## 结论
通过明确的组件职责、完善的健康检查与日志体系、规范的调试与性能分析流程，以及针对认证、数据库、API与调度的专项排障清单，可以显著提升GEO平台的稳定性与可维护性。建议将本指南纳入团队知识库，并定期演练应急流程以提升响应效率。

## 附录
- 快速检查清单
  - 数据库连通性与权限
  - JWT密钥与过期时间
  - CORS允许源配置
  - 调度器状态与日志
  - 健康端点与compose健康检查
- 参考文件
  - 后端入口与路由：[backend/app/main.py:1-48](file://backend/app/main.py#L1-L48)
  - 配置与数据库：[backend/app/config.py:1-17](file://backend/app/config.py#L1-L17)、[backend/app/database.py:1-29](file://backend/app/database.py#L1-L29)
  - 认证与用户模型：[backend/app/api/auth.py:1-43](file://backend/app/api/auth.py#L1-L43)、[backend/app/services/auth.py:1-69](file://backend/app/services/auth.py#L1-L69)、[backend/app/models/user.py:1-41](file://backend/app/models/user.py#L1-L41)
  - 查询与调度：[backend/app/api/queries.py:1-86](file://backend/app/api/queries.py#L1-L86)、[backend/app/models/query.py:1-55](file://backend/app/models/query.py#L1-L55)、[backend/app/workers/scheduler.py:1-95](file://backend/app/workers/scheduler.py#L1-L95)
  - 前端认证：[frontend/lib/auth.ts:1-56](file://frontend/lib/auth.ts#L1-L56)、[frontend/app/api/auth/[...nextauth]/route.ts](file://frontend/app/api/auth/[...nextauth]/route.ts#L1-L7)
  - 编排与依赖：[docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)、[backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)