# 生产环境部署 **本文档引用的文件** - [docker-compose.yml](file://docker-compose.yml) - [backend/Dockerfile](file://backend/Dockerfile) - [frontend/Dockerfile](file://frontend/Dockerfile) - [backend/app/config.py](file://backend/app/config.py) - [backend/app/main.py](file://backend/app/main.py) - [backend/app/database.py](file://backend/app/database.py) - [backend/requirements.txt](file://backend/requirements.txt) - [backend/alembic/versions/488d0bd5ab01_initial_migration.py](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py) - [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py) - [backend/app/workers/platforms/kimi.py](file://backend/app/workers/platforms/kimi.py) - [backend/app/workers/platforms/wenxin.py](file://backend/app/workers/platforms/wenxin.py) - [frontend/next.config.mjs](file://frontend/next.config.mjs) - [frontend/package.json](file://frontend/package.json) - [frontend/tailwind.config.ts](file://frontend/tailwind.config.ts) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本指南面向GEO项目的生产环境部署,覆盖以下关键主题: - 部署架构:后端服务、数据库、缓存与前端容器编排 - Nginx反向代理、SSL证书与负载均衡建议 - 环境变量与安全配置:数据库、Redis、API密钥与JWT - 性能优化:静态资源缓存、Gzip压缩与CDN集成 - 安全加固:防火墙、访问控制与数据加密 - 域名与DNS、HTTPS证书申请流程 - 部署后验证与性能基准测试方法 ## 项目结构 GEO采用多容器编排,后端使用FastAPI,前端使用Next.js,数据库为PostgreSQL,缓存为Redis。开发阶段通过Compose进行联调,生产环境建议以Nginx作为统一入口,结合反向代理、SSL终止与负载均衡。 ```mermaid graph TB subgraph "生产环境" LB["负载均衡/反向代理
Nginx"] subgraph "应用层" FE["前端容器
Next.js"] BE["后端容器
FastAPI(Uvicorn)"] end subgraph "数据层" DB["数据库
PostgreSQL"] RC["缓存/队列
Redis"] end end LB --> FE LB --> BE BE --> DB BE --> RC ``` 图表来源 - [docker-compose.yml:36-51](file://docker-compose.yml#L36-L51) - [backend/Dockerfile:40-41](file://backend/Dockerfile#L40-L41) - [frontend/Dockerfile:14-15](file://frontend/Dockerfile#L14-L15) 章节来源 - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) - [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41) - [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15) ## 核心组件 - 后端服务(FastAPI + Uvicorn):提供REST API,包含认证、查询词、引用数据与报告接口;内置健康检查端点。 - 数据库(PostgreSQL):异步SQLAlchemy引擎连接,支持迁移脚本。 - 缓存(Redis):用于任务调度与会话/锁等场景。 - 前端(Next.js):开发模式运行,生产建议构建并由Nginx提供静态资源与反代。 - 引擎与平台适配器:基于Playwright的网页自动化,对接Kimi与文心一格平台。 章节来源 - [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) - [backend/app/config.py:1-17](file://backend/app/config.py#L1-L17) - [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309) - [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206) - [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205) - [frontend/package.json:1-40](file://frontend/package.json#L1-L40) ## 架构总览 下图展示生产环境典型拓扑:Nginx作为入口,负责TLS终止、静态资源分发与反向代理;后端容器提供API;数据库与Redis分别承载持久化与缓存。 ```mermaid graph TB Internet["互联网"] Nginx["Nginx
SSL/TLS 终止
静态资源缓存"] subgraph "应用服务" API["FastAPI 应用"] Worker["任务/调度器"] end subgraph "数据服务" Postgres["PostgreSQL"] Redis["Redis"] end Internet --> Nginx Nginx --> API Nginx --> |静态资源| Nginx API --> Postgres API --> Redis Worker --> Redis Worker --> Postgres ``` 图表来源 - [backend/app/main.py:24-47](file://backend/app/main.py#L24-L47) - [backend/app/database.py:6-18](file://backend/app/database.py#L6-L18) - [backend/app/config.py:7-8](file://backend/app/config.py#L7-L8) ## 详细组件分析 ### 后端服务(FastAPI) - 应用生命周期:启动时初始化调度器,关闭时优雅停机。 - CORS策略:开发默认允许本地前端源,生产需收紧为受信域名。 - 路由模块:认证、查询词、引用数据、报告与即时执行路由。 - 健康检查:/health端点返回状态。 ```mermaid sequenceDiagram participant Client as "客户端" participant Nginx as "Nginx" participant API as "FastAPI 应用" participant DB as "PostgreSQL" participant Redis as "Redis" Client->>Nginx : "HTTP 请求" Nginx->>API : "反向代理转发" API->>DB : "数据库查询" DB-->>API : "结果" API->>Redis : "缓存/任务交互" Redis-->>API : "响应" API-->>Nginx : "HTTP 响应" Nginx-->>Client : "返回内容" ``` 图表来源 - [backend/app/main.py:13-21](file://backend/app/main.py#L13-L21) - [backend/app/database.py:23-28](file://backend/app/database.py#L23-L28) - [backend/app/config.py:7-8](file://backend/app/config.py#L7-L8) 章节来源 - [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) ### 数据库与迁移 - 异步引擎:使用异步SQLAlchemy与asyncpg。 - 迁移:初始版本包含用户、查询、引用记录、任务与订阅表,含索引与外键约束。 ```mermaid erDiagram USERS { uuid id PK string email UK string password_hash string name string plan integer max_queries boolean is_active timestamp created_at timestamp updated_at } QUERIES { uuid id PK uuid user_id FK string keyword string target_brand jsonb brand_aliases jsonb platforms string frequency string status timestamp last_queried_at timestamp next_query_at timestamp created_at timestamp updated_at } CITATION_RECORDS { uuid id PK uuid query_id FK string platform boolean cited integer citation_position text citation_text jsonb competitor_brands text raw_response timestamp queried_at } QUERY_TASKS { uuid id PK uuid query_id FK string platform string status text error_message timestamp scheduled_at timestamp started_at timestamp completed_at } SUBSCRIPTIONS { uuid id PK uuid user_id FK string plan string status date start_date date end_date numeric amount string payment_method string payment_id timestamp created_at } USERS ||--o{ QUERIES : "拥有" QUERIES ||--o{ CITATION_RECORDS : "产生" QUERIES ||--o{ QUERY_TASKS : "调度" USERS ||--o{ SUBSCRIPTIONS : "订阅" ``` 图表来源 - [backend/alembic/versions/488d0bd5ab01_initial_migration.py:24-111](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L24-L111) 章节来源 - [backend/app/database.py:1-29](file://backend/app/database.py#L1-L29) - [backend/alembic/versions/488d0bd5ab01_initial_migration.py:1-128](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L1-L128) ### 引擎与平台适配器 - CitationEngine:对指定平台发起查询,执行品牌匹配与竞争品牌检测,并记录结果。 - 平台适配器:Kimi与文心一言,基于Playwright自动化,具备重试与稳定性等待逻辑。 - 任务调度:查询任务状态管理,支持失败回退与占位记录。 ```mermaid flowchart TD Start(["开始执行查询"]) --> InitMatcher["初始化品牌匹配器"] InitMatcher --> IteratePlat["遍历平台列表"] IteratePlat --> CreateTask["创建/获取任务记录"] CreateTask --> SetRunning["标记任务为运行中"] SetRunning --> DoQuery["平台查询Playwright"] DoQuery --> BrandMatch["品牌匹配与竞争品牌检测"] BrandMatch --> SaveRecord["保存引用记录"] SaveRecord --> UpdateQueryTime["更新查询时间与下次查询时间"] UpdateQueryTime --> NextPlat{"还有平台?"} NextPlat --> |是| IteratePlat NextPlat --> |否| End(["结束"]) ``` 图表来源 - [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234) - [backend/app/workers/platforms/kimi.py:33-48](file://backend/app/workers/platforms/kimi.py#L33-L48) - [backend/app/workers/platforms/wenxin.py:33-48](file://backend/app/workers/platforms/wenxin.py#L33-L48) 章节来源 - [backend/app/workers/citation_engine.py:1-309](file://backend/app/workers/citation_engine.py#L1-L309) - [backend/app/workers/platforms/kimi.py:1-206](file://backend/app/workers/platforms/kimi.py#L1-L206) - [backend/app/workers/platforms/wenxin.py:1-205](file://backend/app/workers/platforms/wenxin.py#L1-L205) ### 前端(Next.js) - 开发模式:通过Dockerfile直接运行开发服务器。 - 生产建议:构建产物由Nginx托管,配合缓存与压缩策略。 章节来源 - [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15) - [frontend/package.json:5-9](file://frontend/package.json#L5-L9) - [frontend/next.config.mjs:1-5](file://frontend/next.config.mjs#L1-L5) ## 依赖关系分析 - 后端依赖:FastAPI、Uvicorn、SQLAlchemy、asyncpg、Pydantic、Redis、APScheduler、Playwright、httpx、python-dotenv等。 - 前端依赖:Next.js、Radix UI、Tailwind CSS、NextAuth等。 - 容器编排:Compose定义数据库、Redis、后端与前端服务及其端口映射与健康检查。 ```mermaid graph LR Backend["后端应用"] --> DB["PostgreSQL"] Backend --> Redis["Redis"] Backend --> Playwright["Playwright 浏览器"] Frontend["前端应用"] --> Backend ``` 图表来源 - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [docker-compose.yml:4-51](file://docker-compose.yml#L4-L51) 章节来源 - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) ## 性能考虑 - 静态资源缓存:Nginx启用长期缓存头,结合文件指纹命名策略,减少带宽与延迟。 - Gzip/压缩:开启gzip或更高效的压缩算法(如Brotli),降低传输体积。 - CDN集成:将静态资源(图片、JS/CSS)接入CDN,提升全球访问速度与可用性。 - 数据库优化:合理索引(已有迁移脚本包含索引)、连接池参数调优、慢查询日志与监控。 - 缓存策略:Redis用于热点数据与任务队列,避免重复计算与高并发下的数据库压力。 - 前端构建:生产构建开启Tree Shaking、代码分割与懒加载,缩短首屏时间。 - 反向代理:Nginx作为统一入口,可集中处理压缩、缓存与限流。 ## 故障排查指南 - 健康检查:通过/health端点确认后端存活;Compose中数据库与Redis具备健康检查命令。 - 日志定位:查看Nginx错误日志、后端Uvicorn日志与容器日志;关注数据库连接与Redis连通性。 - CORS问题:生产环境需将前端域名加入allow_origins白名单,避免跨域阻断。 - 数据库迁移:确保迁移脚本成功执行,检查表结构与索引是否存在。 - Playwright依赖:容器内需安装浏览器依赖,确保Playwright可正常启动浏览器实例。 - API密钥:确认平台API密钥配置正确,避免请求失败导致任务异常。 章节来源 - [backend/app/main.py:45-47](file://backend/app/main.py#L45-L47) - [docker-compose.yml:16-20](file://docker-compose.yml#L16-L20) - [docker-compose.yml:30-34](file://docker-compose.yml#L30-L34) - [backend/app/config.py:12-13](file://backend/app/config.py#L12-L13) - [backend/app/workers/platforms/kimi.py:21-32](file://backend/app/workers/platforms/kimi.py#L21-L32) - [backend/app/workers/platforms/wenxin.py:21-32](file://backend/app/workers/platforms/wenxin.py#L21-L32) ## 结论 本指南提供了GEO生产环境部署的完整路径:从容器编排到Nginx反向代理与SSL、从环境变量与安全配置到性能优化与安全加固,并给出了部署后验证与基准测试建议。建议在正式上线前完成域名与DNS解析、证书申请与安装、以及完整的端到端测试。 ## 附录 ### 生产环境部署清单 - 基础设施 - 负载均衡/反向代理:Nginx(建议启用TLS终止、静态资源缓存与Gzip/Brotli) - 应用容器:后端(FastAPI)、前端(Next.js生产构建) - 数据库:PostgreSQL(主从/高可用视规模而定) - 缓存:Redis(哨兵/集群视规模而定) - 环境变量与安全 - 数据库连接:DATABASE_URL(生产使用强密码与只读账号) - Redis连接:REDIS_URL(网络隔离与ACL) - JWT密钥:JWT_SECRET(高强度随机值,定期轮换) - 平台API密钥:ZHIPU_API_KEY、TONGYI_API_KEY(最小权限与限额) - 配置与优化 - Nginx:静态资源缓存头、压缩、限流、健康检查探针 - 后端:连接池大小、超时、日志级别、CORS白名单 - 数据库:连接数上限、慢查询阈值、备份策略 - 前端:构建产物缓存、CDN接入、预加载关键资源 - 安全加固 - 防火墙:仅开放必要端口(80/443/22等) - 访问控制:IP白名单、速率限制、WAF - 数据加密:传输加密(TLS)、静态加密(视合规要求) - 域名与证书 - DNS:A/AAAA记录指向负载均衡器;CNAME别名指向子域名 - 证书:ACME自动签发或商业证书;多域名与SAN - 部署后验证与基准测试 - 功能验证:登录、查询、报告生成、引用检测 - 性能基准:并发用户数、P95/P99延迟、吞吐量、资源占用 - 可靠性:故障切换、恢复时间、数据一致性校验