15 KiB
15 KiB
配置定制
**本文档引用的文件** - [backend/app/config.py](file://backend/app/config.py) - [backend/app/database.py](file://backend/app/database.py) - [backend/app/main.py](file://backend/app/main.py) - [backend/app/workers/scheduler.py](file://backend/app/workers/scheduler.py) - [backend/app/workers/citation_engine.py](file://backend/app/workers/citation_engine.py) - [backend/app/workers/platforms/base.py](file://backend/app/workers/platforms/base.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) - [backend/requirements.txt](file://backend/requirements.txt) - [docker-compose.yml](file://docker-compose.yml) - [frontend/tailwind.config.ts](file://frontend/tailwind.config.ts) - [frontend/postcss.config.mjs](file://frontend/postcss.config.mjs) - [frontend/next.config.mjs](file://frontend/next.config.mjs) - [frontend/package.json](file://frontend/package.json)目录
简介
本文件面向GEO项目的配置定制需求,系统性梳理后端环境变量配置、数据库与缓存连接、AI平台API密钥管理、功能开关与热更新机制、性能调优参数,以及前端主题定制(Tailwind CSS、颜色方案、响应式断点)。同时给出生产环境最佳实践与安全配置建议,帮助团队在不同部署环境中快速、安全地完成配置落地。
项目结构
- 后端采用FastAPI + SQLAlchemy异步ORM + APScheduler异步调度,配置通过Pydantic Settings集中管理,支持.env文件注入。
- 前端基于Next.js 14 + Tailwind CSS,PostCSS负责Tailwind集成,主题变量通过CSS自定义属性扩展。
- Docker Compose编排数据库(PostgreSQL)、缓存(Redis)与前后端服务,统一挂载.env以注入环境变量。
graph TB
subgraph "后端"
CFG["配置模块<br/>Settings"]
DB["数据库引擎<br/>AsyncEngine"]
SCH["调度器<br/>AsyncIOScheduler"]
CE["引用引擎<br/>CitationEngine"]
KIMI["Kimi适配器"]
WENXIN["文心一言适配器"]
end
subgraph "前端"
TW["Tailwind配置<br/>tailwind.config.ts"]
PC["PostCSS配置<br/>postcss.config.mjs"]
NEXT["Next配置<br/>next.config.mjs"]
end
subgraph "基础设施"
PG["PostgreSQL"]
RD["Redis"]
end
CFG --> DB
CFG --> RD
CFG --> CE
CE --> KIMI
CE --> WENXIN
SCH --> CE
DB --> PG
RD -.-> 应用
TW --> 应用
PC --> TW
NEXT --> 应用
图表来源
- backend/app/config.py:1-17
- backend/app/database.py:1-29
- backend/app/workers/scheduler.py:1-95
- backend/app/workers/citation_engine.py:1-309
- backend/app/workers/platforms/kimi.py:1-206
- backend/app/workers/platforms/wenxin.py:1-205
- frontend/tailwind.config.ts:1-57
- frontend/postcss.config.mjs:1-9
- frontend/next.config.mjs:1-5
章节来源
- backend/app/config.py:1-17
- backend/app/database.py:1-29
- frontend/tailwind.config.ts:1-57
- docker-compose.yml:1-71
核心组件
- 配置中心(Settings):集中声明数据库、缓存、JWT、浏览器路径、AI平台密钥等关键参数,并通过.env文件注入。
- 数据库层:基于SQLAlchemy异步引擎,提供会话工厂与基础模型元数据。
- 引擎与调度:CitationEngine负责跨平台查询与品牌匹配;QueryScheduler周期性触发任务。
- 前端主题:Tailwind CSS通过CSS变量扩展颜色与圆角体系,PostCSS集成Tailwind,Next配置保持默认。
章节来源
- backend/app/config.py:1-17
- backend/app/database.py:1-29
- backend/app/workers/citation_engine.py:148-309
- backend/app/workers/scheduler.py:25-95
- frontend/tailwind.config.ts:10-54
架构总览
下图展示配置如何贯穿应用生命周期:从.env注入Settings,再到数据库与缓存连接、AI平台适配器初始化、调度器启动与任务执行。
sequenceDiagram
participant ENV as ".env"
participant S as "Settings"
participant DB as "数据库引擎"
participant RED as "Redis"
participant CE as "CitationEngine"
participant SCH as "QueryScheduler"
participant K as "Kimi适配器"
participant W as "文心一言适配器"
ENV-->>S : 注入键值对
S-->>DB : 提供DATABASE_URL
S-->>RED : 提供REDIS_URL
S-->>CE : 提供API密钥(可选)
SCH->>CE : 触发任务执行
CE->>K : query(keyword)
CE->>W : query(keyword)
K-->>CE : 原始响应文本
W-->>CE : 原始响应文本
CE-->>DB : 写入引用记录
CE-->>RED : 可选缓存写入
图表来源
- backend/app/config.py:1-17
- backend/app/database.py:1-29
- backend/app/workers/citation_engine.py:148-309
- backend/app/workers/platforms/kimi.py:33-125
- backend/app/workers/platforms/wenxin.py:33-124
详细组件分析
环境变量与配置管理
- 配置来源:Settings通过.env文件注入,支持额外键忽略策略,便于本地与CI/CD环境解耦。
- 关键参数:
- 数据库连接:DATABASE_URL
- 缓存连接:REDIS_URL
- 安全相关:JWT_SECRET、JWT_EXPIRE_HOURS
- 浏览器自动化:PLAYWRIGHT_BROWSERS_PATH
- AI平台密钥:ZHIPU_API_KEY、TONGYI_API_KEY(当前为空,需在生产环境注入)
classDiagram
class Settings {
+DATABASE_URL : string
+REDIS_URL : string
+JWT_SECRET : string
+JWT_EXPIRE_HOURS : number
+PLAYWRIGHT_BROWSERS_PATH : string
+ZHIPU_API_KEY : string
+TONGYI_API_KEY : string
}
图表来源
章节来源
数据库连接配置
- 引擎创建:使用异步引擎,echo关闭,future开启。
- 会话工厂:设置过期与自动提交/刷洗策略,保证事务一致性。
- 依赖注入:通过依赖函数提供会话,确保请求生命周期内正确释放。
flowchart TD
Start(["应用启动"]) --> LoadCfg["读取Settings.DATABASE_URL"]
LoadCfg --> CreateEngine["创建异步引擎"]
CreateEngine --> SessionFactory["创建会话工厂"]
SessionFactory --> ProvideDB["依赖注入会话"]
ProvideDB --> End(["请求处理完成,关闭会话"])
图表来源
章节来源
Redis缓存配置
- 连接字符串:REDIS_URL由Settings提供。
- 使用场景:可作为任务状态、查询结果或会话存储的缓存层(当前代码未直接使用Redis,可在业务层扩展)。
- 建议:生产环境务必独立Redis实例,设置密码与网络隔离。
章节来源
AI平台API密钥管理
- 当前实现:Settings声明密钥字段,但默认为空;引用引擎在执行平台查询时依赖适配器封装的内部逻辑。
- 建议:在生产环境通过.env注入密钥,或通过机密管理服务挂载至容器。
章节来源
功能开关与动态配置
- 现状:代码未实现运行时功能开关与配置热更新。
- 建议实现方式:
- 引入配置中心(如Consul、etcd或PostgreSQL表),定期拉取最新配置。
- 使用装饰器或中间件在请求入口处进行功能开关判断。
- 结合信号或健康检查接口触发重载,避免重启服务。
章节来源
性能调优参数
- 数据库连接池:可通过异步引擎参数调整最大连接数、空闲连接数、连接超时等(当前未显式配置,使用默认值)。
- 异步任务并发:调度器周期固定为1小时;平台查询采用指数退避与单次任务串行化,避免过度并发。
- 缓存策略:建议在业务层引入Redis缓存热点查询结果,降低重复抓取成本。
章节来源
- backend/app/workers/scheduler.py:32-38
- backend/app/workers/platforms/kimi.py:38-48
- backend/app/workers/platforms/wenxin.py:38-48
前端主题定制指南
- Tailwind CSS配置:通过CSS变量扩展colors与borderRadius,darkMode使用class模式。
- PostCSS:仅启用tailwindcss插件,简化构建流程。
- Next配置:默认配置,无需特殊改动。
- 定制步骤:
- 颜色方案:在tailwind.config.ts的theme.extend.colors中新增或覆盖HSL变量。
- 圆角体系:在theme.extend.borderRadius中扩展半径变量。
- 响应式断点:在theme.extend.screens中添加自定义断点名称与宽度。
- 主题切换:通过在html或body上切换class实现明暗主题切换。
flowchart TD
A["修改 tailwind.config.ts"] --> B["扩展 colors 或 borderRadius"]
B --> C["构建并预览"]
C --> D["在组件中使用新变量"]
D --> E["发布"]
图表来源
章节来源
- frontend/tailwind.config.ts:1-57
- frontend/postcss.config.mjs:1-9
- frontend/next.config.mjs:1-5
- frontend/package.json:11-38
生产环境配置最佳实践
- 环境变量:
- 使用独立.env文件,禁止提交到版本库;通过CI/CD注入。
- 设置JWT_SECRET为强随机字符串,JWT_EXPIRE_HOURS按业务安全策略设定。
- DATABASE_URL与REDIS_URL指向独立实例,启用TLS与访问控制。
- 安全加固:
- 限制CORS白名单,仅允许受信域名。
- 启用HTTPS与安全头(由网关或反向代理层处理)。
- 定期轮换密钥与证书。
- 可靠性:
- 数据库与Redis增加健康检查与自动重启策略。
- 后端服务设置优雅停机与进程监控。
章节来源
依赖分析
- 后端依赖:FastAPI、SQLAlchemy异步、Pydantic/Settings、Redis、APScheduler、Playwright。
- 前端依赖:Next.js、Tailwind CSS、Radix UI组件、Recharts等。
graph LR
R["requirements.txt"] --> F["FastAPI"]
R --> SA["SQLAlchemy异步"]
R --> PS["Pydantic/Settings"]
R --> RD["Redis"]
R --> AP["APScheduler"]
R --> PW["Playwright"]
P["package.json"] --> NX["Next.js"]
P --> TW["Tailwind CSS"]
P --> UI["@radix-ui/*"]
P --> RC["Recharts"]
图表来源
章节来源
性能考虑
- 数据库:根据QPS与查询复杂度调整连接池大小;开启连接复用与超时控制。
- 缓存:对热点查询结果进行缓存,设置合理TTL;避免缓存穿透与雪崩。
- 并发:平台查询采用指数退避与串行化,避免平台限流;必要时引入队列与限速器。
- 前端:Tailwind按需扫描内容文件,减少未使用样式体积;生产构建启用压缩与Tree Shaking。
故障排查指南
- 数据库连接失败:检查DATABASE_URL格式与可达性;确认容器网络与卷挂载。
- Redis连接失败:检查REDIS_URL与网络策略;确认容器健康检查状态。
- Playwright浏览器问题:确认PLAYWRIGHT_BROWSERS_PATH与浏览器安装;查看日志中的超时与选择器匹配失败信息。
- 调度器未启动:确认lifespan钩子与main.py中include_router顺序;查看日志输出。
- CORS错误:核对allow_origins与凭证设置;确保前端请求头一致。
章节来源
- backend/app/database.py:6-10
- backend/app/config.py:11
- backend/app/workers/platforms/kimi.py:21-32
- backend/app/workers/platforms/wenxin.py:21-32
- backend/app/main.py:13-21
- backend/app/main.py:30-36
结论
本文档提供了GEO项目配置定制的完整指南,涵盖后端环境变量、数据库与缓存、AI平台密钥、前端主题定制与生产安全实践。当前代码未实现运行时功能开关与配置热更新,建议在后续迭代中引入配置中心与热重载机制,以提升系统的可运维性与安全性。
附录
- Docker Compose编排:数据库、缓存与前后端服务均通过.env注入环境变量,建议在生产环境使用独立网络与只读根文件系统。
- 版本与依赖:后端与前端均采用稳定版本,升级前请进行兼容性测试。
章节来源