# 故障排除与FAQ **本文引用的文件** - [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) ## 目录 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["前端应用
Next.js + NextAuth"] --> NA["NextAuth路由
/api/auth/[...nextauth]"] NA --> BA["后端认证接口
/api/v1/auth/*"] BA --> DB["数据库
PostgreSQL"] BA --> CFG["配置中心
settings/DATABASE_URL/JWT等"] BA --> SCH["任务调度器
APScheduler"] BE["后端服务
FastAPI"] --> DB BE --> REDIS["缓存/队列
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["读取配置
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)