# 生产环境部署

<cite>
**本文档引用的文件**
- [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)
</cite>

## 目录
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["负载均衡/反向代理<br/>Nginx"]
subgraph "应用层"
FE["前端容器<br/>Next.js"]
BE["后端容器<br/>FastAPI(Uvicorn)"]
end
subgraph "数据层"
DB["数据库<br/>PostgreSQL"]
RC["缓存/队列<br/>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<br/>SSL/TLS 终止<br/>静态资源缓存"]
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延迟、吞吐量、资源占用
  - 可靠性：故障切换、恢复时间、数据一致性校验