# 快速开始 **本文引用的文件** - [docker-compose.yml](file://docker-compose.yml) - [backend/Dockerfile](file://backend/Dockerfile) - [frontend/Dockerfile](file://frontend/Dockerfile) - [backend/requirements.txt](file://backend/requirements.txt) - [frontend/package.json](file://frontend/package.json) - [backend/app/main.py](file://backend/app/main.py) - [backend/app/config.py](file://backend/app/config.py) - [backend/alembic.ini](file://backend/alembic.ini) - [backend/alembic/env.py](file://backend/alembic/env.py) - [backend/alembic/versions/488d0bd5ab01_initial_migration.py](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py) - [backend/app/database.py](file://backend/app/database.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) - [frontend/README.md](file://frontend/README.md) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [前置条件与环境准备](#前置条件与环境准备) 4. [一键启动(Docker Compose)](#一键启动docker-compose) 5. [首次运行与基本操作](#首次运行与基本操作) 6. [架构概览](#架构概览) 7. [组件详解](#组件详解) 8. [依赖关系分析](#依赖关系分析) 9. [性能与资源建议](#性能与资源建议) 10. [故障排除](#故障排除) 11. [结语](#结语) ## 简介 本指南面向首次接触 GEO 项目的用户,帮助你在最短时间内完成环境准备、依赖安装、数据库初始化与容器编排,并体验核心功能:用户注册、创建查询任务、查看结果与图表。文档严格基于仓库中的实际配置与代码,提供可复现的命令行步骤与预期行为说明。 ## 项目结构 项目采用前后端分离的多容器架构,通过 Docker Compose 统一编排: - 后端:FastAPI 应用,提供认证、查询词、引用数据、报告等接口;内置定时任务调度器与浏览器自动化能力。 - 前端:Next.js 应用,提供登录、注册、仪表盘、查询管理、引用与报告可视化界面。 - 数据库:PostgreSQL(15),使用 Alembic 进行迁移管理。 - 缓存:Redis(7),用于任务队列与缓存。 - Playwright:用于浏览器自动化(爬虫/抓取)场景。 ```mermaid graph TB subgraph "容器编排" DB["PostgreSQL 容器"] REDIS["Redis 容器"] BE["后端容器"] FE["前端容器"] end FE --> |"HTTP 3000"| BE BE --> |"数据库 5432"| DB BE --> |"缓存 6379"| REDIS ``` **图示来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) **章节来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) ## 前置条件与环境准备 - 操作系统:Linux/macOS/Windows(WSL2 推荐) - Docker 与 Docker Compose:用于一键编排 - Git:克隆仓库 - 文本编辑器或 IDE:可选,用于查看/修改配置 说明 - 本项目未要求本地安装 Python 3.9+ 或 Node.js,因为所有运行时均在容器内完成。 - 若你希望在本地直接运行后端或前端,请参考各自镜像版本: - 后端镜像基于 Python 3.11(容器内运行) - 前端镜像基于 Node.js 20(容器内运行) **章节来源** - [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41) - [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15) ## 一键启动(Docker Compose) 以下为完整的一键启动流程,涵盖容器编排、服务启动顺序、端口映射与健康检查。 步骤 1. 克隆仓库 - git clone <仓库地址> - cd GEO 2. 构建并启动容器 - docker compose up -d 3. 查看服务状态 - docker compose ps - 预期:db、redis、backend、frontend 均为 Up(healthy) 4. 访问应用 - 前端:http://localhost:3000 - 后端:http://localhost:8000(健康检查接口 /health 可用) 5. 停止与清理 - docker compose down - 如需清理数据卷:docker compose down -v ```mermaid sequenceDiagram participant Dev as "开发者" participant Compose as "Docker Compose" participant DB as "PostgreSQL 容器" participant Redis as "Redis 容器" participant Backend as "后端容器" participant Frontend as "前端容器" Dev->>Compose : "docker compose up -d" Compose->>DB : "启动并健康检查" Compose->>Redis : "启动并健康检查" Compose->>Backend : "等待 DB/Redis 健康后启动" Backend->>DB : "连接数据库Alembic 已内置迁移" Compose->>Frontend : "启动并监听 3000" Frontend->>Backend : "请求 /api/v1/*" Backend-->>Frontend : "返回 JSON 响应" ``` **图示来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) - [backend/app/main.py:45-48](file://backend/app/main.py#L45-L48) **章节来源** - [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71) - [frontend/README.md:5-17](file://frontend/README.md#L5-L17) ## 首次运行与基本操作 首次启动后,你可以进行如下操作以体验核心功能: 1. 用户注册与登录 - 打开 http://localhost:3000 - 使用注册页面创建账户 - 登录后进入仪表盘 2. 创建查询任务 - 在“查询”页面新建查询词,设置关键词、目标品牌、平台(默认包含 wenxin/kimi)、频率(日/周/月) - 提交后,后端调度器会按频率与时间窗口自动执行 3. 查看结果 - “引用数据”页面查看各平台的引用检测结果(是否被提及、置信度、上下文片段等) - “报告”页面查看趋势与平台分布图表 4. 观察后台任务 - 后端启动时会加载调度器,每小时检查一次到期的查询任务 - 任务状态会在数据库中持久化,供前端展示 ```mermaid flowchart TD Start(["提交查询任务"]) --> Schedule["写入数据库
设置 next_query_at"] Schedule --> Timer["定时器每小时触发"] Timer --> Check{"查询是否到期?"} Check --> |否| Wait["等待下个小时"] Check --> |是| Run["执行查询多平台"] Run --> Detect["品牌匹配与竞争品牌检测"] Detect --> Persist["写入引用记录与任务状态"] Persist --> Report["生成可视化数据"] Report --> End(["前端展示结果"]) ``` **图示来源** - [backend/app/workers/scheduler.py:51-84](file://backend/app/workers/scheduler.py#L51-L84) - [backend/app/workers/citation_engine.py:159-234](file://backend/app/workers/citation_engine.py#L159-L234) **章节来源** - [backend/app/main.py:38-42](file://backend/app/main.py#L38-L42) - [backend/app/workers/scheduler.py:30-40](file://backend/app/workers/scheduler.py#L30-L40) - [backend/app/workers/citation_engine.py:148-170](file://backend/app/workers/citation_engine.py#L148-L170) ## 架构概览 整体架构由容器编排层、后端服务层、前端服务层、数据库与缓存组成。后端通过 Alembic 管理数据库迁移,使用 Redis 存储任务状态,使用 Playwright 进行浏览器自动化。 ```mermaid graph TB FE["前端应用
Next.js"] --> API["后端 API
FastAPI"] API --> DB["数据库
PostgreSQL"] API --> CACHE["缓存
Redis"] API --> WORKER["任务执行器
CitationEngine"] WORKER --> PLATFORMS["平台适配器
Kimi/Wenxin"] API --> SCHED["调度器
APScheduler"] SCHED --> API ``` **图示来源** - [backend/app/main.py:1-48](file://backend/app/main.py#L1-L48) - [backend/app/config.py:7-13](file://backend/app/config.py#L7-L13) - [backend/app/workers/scheduler.py:25-39](file://backend/app/workers/scheduler.py#L25-L39) - [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157) ## 组件详解 ### 后端应用入口与路由 - 应用生命周期:启动时初始化模型与调度器,关闭时优雅停机 - 路由模块:认证、查询词、引用数据、报告、即时执行查询 - CORS:允许前端 localhost:3000 访问 - 健康检查:/health 返回状态 **章节来源** - [backend/app/main.py:13-47](file://backend/app/main.py#L13-L47) ### 配置与连接 - 配置来源:.env 文件(通过 pydantic-settings 加载) - 默认数据库:postgresql+asyncpg://postgres:postgres123@db:5432/geo_platform - 默认缓存:redis://redis:6379/0 - Playwright 浏览器路径:/ms-playwright - JWT 密钥与过期时间:开发默认值(生产请务必修改) **章节来源** - [backend/app/config.py:4-16](file://backend/app/config.py#L4-L16) ### 数据库与迁移 - 引擎与会话:基于 SQLAlchemy AsyncEngine 与 async session - 迁移:Alembic 管理,初始迁移包含 users、queries、citation_records、query_tasks、subscriptions 表 - 运行方式:Compose 启动时由后端容器自动执行迁移(见后端 Dockerfile 中的安装与命令) ```mermaid erDiagram USERS { uuid id PK string email UK string password_hash string name string plan int max_queries bool 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 bool cited int 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:21-111](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py#L21-L111) **章节来源** - [backend/app/database.py:6-28](file://backend/app/database.py#L6-L28) - [backend/alembic/env.py:10-25](file://backend/alembic/env.py#L10-L25) - [backend/alembic.ini:89-89](file://backend/alembic.ini#L89-L89) ### 任务调度与执行 - 调度器:APScheduler AsyncIOScheduler,每小时检查到期查询 - 执行器:CitationEngine,遍历查询平台,执行品牌匹配与竞争品牌检测,写入记录并更新查询时间 - 平台适配器:Kimi 与 Wenxin(通过外部平台 API) ```mermaid classDiagram class QueryScheduler { +start() +check_and_execute_queries() +shutdown() } class CitationEngine { +execute_query(query, db) +execute_single_platform(keyword, platform, target_brand, brand_aliases) +close() } class KimiAdapter { +query(keyword) +close() } class WenxinAdapter { +query(keyword) +close() } QueryScheduler --> CitationEngine : "调用执行" CitationEngine --> KimiAdapter : "平台适配" CitationEngine --> WenxinAdapter : "平台适配" ``` **图示来源** - [backend/app/workers/scheduler.py:25-95](file://backend/app/workers/scheduler.py#L25-L95) - [backend/app/workers/citation_engine.py:148-157](file://backend/app/workers/citation_engine.py#L148-L157) **章节来源** - [backend/app/workers/scheduler.py:30-89](file://backend/app/workers/scheduler.py#L30-L89) - [backend/app/workers/citation_engine.py:159-308](file://backend/app/workers/citation_engine.py#L159-L308) ## 依赖关系分析 - 后端依赖:FastAPI、SQLAlchemy、asyncpg、Alembic、Pydantic、Passlib、Redis、APScheduler、Playwright、httpx、python-dotenv、pytest 等 - 前端依赖:Next.js、NextAuth、Radix UI、Recharts、Tailwind 等 ```mermaid graph LR BE_REQ["后端依赖
requirements.txt"] --> BE_IMG["后端镜像
Python 3.11"] FE_PKG["前端依赖
package.json"] --> FE_IMG["前端镜像
Node.js 20"] BE_IMG --> BE_RUN["后端运行时"] FE_IMG --> FE_RUN["前端运行时"] ``` **图示来源** - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [frontend/package.json:11-38](file://frontend/package.json#L11-L38) - [backend/Dockerfile:28-39](file://backend/Dockerfile#L28-L39) - [frontend/Dockerfile:6-14](file://frontend/Dockerfile#L6-L14) **章节来源** - [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35) - [frontend/package.json:11-38](file://frontend/package.json#L11-L38) ## 性能与资源建议 - CPU/内存:建议至少 2 核心 4GB 内存,以便同时运行 PostgreSQL、Redis、后端与前端 - 磁盘:为持久化卷预留足够空间(PostgreSQL 与 Redis 数据目录) - 网络:Playwright 需要访问外部平台(Kimi/Wenxin),请确保网络连通性 - 日志:后端默认关闭 SQL echo,若调试数据库问题可临时开启 [本节为通用建议,无需特定文件引用] ## 故障排除 常见问题与解决思路 - 容器无法启动或健康检查失败 - 检查端口占用:确认 5432、6379、8000、3000 未被占用 - 查看日志:docker compose logs db|redis|backend|frontend - 重启服务:docker compose restart db|redis|backend|frontend - 前端无法访问或跨域报错 - 确认前端已启动并监听 3000 - 后端 CORS 已允许 http://localhost:3000,若自定义域名请在后端 CORS 配置中添加 - 数据库连接失败 - 确认 .env 中 DATABASE_URL 与 docker-compose 中的 db 服务一致 - 确认数据库初始化已完成(首次启动后端会自动执行迁移) - Playwright 报错或浏览器不可用 - 确认后端镜像已安装 Playwright 并完成浏览器安装 - 如需离线部署,可在 .env 中配置 Playwright 浏览器路径 - 任务未执行或结果为空 - 检查查询频率与 next_query_at 是否正确 - 查看查询任务表状态(pending/running/success/failed) **章节来源** - [docker-compose.yml:16-20](file://docker-compose.yml#L16-L20) - [backend/app/main.py:30-36](file://backend/app/main.py#L30-L36) - [backend/app/config.py:7-11](file://backend/app/config.py#L7-L11) - [backend/Dockerfile:31-33](file://backend/Dockerfile#L31-L33) - [backend/app/workers/scheduler.py:51-75](file://backend/app/workers/scheduler.py#L51-L75) ## 结语 按照本指南完成 Docker Compose 一键启动后,你即可在浏览器中完成注册、创建查询任务并查看结果与图表。若需进一步扩展(如接入更多平台、调整调度策略或优化前端交互),可基于现有架构与配置进行定制。