geo/.qoder/repowiki/zh/content/开发指南/开发流程.md

283 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发流程
<cite>
**本文引用的文件**
- [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)
- [tests/conftest.py](file://tests/conftest.py)
- [backend/alembic.ini](file://backend/alembic.ini)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py)
- [frontend/README.md](file://frontend/README.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向GEO项目的开发团队提供一套完整的开发流程规范涵盖Git分支策略与工作流、代码审查流程、版本发布管理、持续集成/持续部署CI/CD配置说明以及开发环境搭建与团队协作最佳实践。内容基于仓库现有技术栈与容器化配置进行设计确保前后端协同开发、数据库迁移与测试流程可追溯、可复现。
## 项目结构
GEO采用前后端分离与容器编排的组织方式
- 前端Next.js 14 应用使用TypeScript与TailwindCSS开发端口3000。
- 后端FastAPI + Uvicorn使用异步数据库驱动与Redis缓存开发端口8000。
- 数据层PostgreSQL 15 + Redis 7通过Docker Compose统一编排。
- 迁移与版本管理Alembic用于数据库迁移脚本生成与执行。
- 测试pytest + pytest-asyncio配合HTTP异步客户端与依赖注入覆盖。
```mermaid
graph TB
subgraph "本地开发环境"
FE["前端服务<br/>Next.js 3000"]
BE["后端服务<br/>FastAPI 8000"]
DB["数据库<br/>PostgreSQL 15"]
RC["缓存<br/>Redis 7"]
end
FE --> |"HTTP 请求"| BE
BE --> DB
BE --> RC
```
图表来源
- [docker-compose.yml:36-66](file://docker-compose.yml#L36-L66)
- [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
- [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-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)
## 核心组件
- 前端工程
- 使用Next.js应用路由与API路由开发脚本与构建脚本在package.json中定义。
- TypeScript与ESLint配置位于前端根目录保证类型安全与代码风格一致。
- 后端工程
- FastAPI应用入口与异步数据库连接依赖通过requirements.txt集中管理。
- Alembic迁移配置与初始迁移脚本存在支持数据库演进。
- 测试工程
- pytest会话级fixture用于屏蔽真实定时任务提供模拟用户与认证头便于快速集成测试。
- 容器化与编排
- Dockerfile分别构建前后端镜像docker-compose统一启动数据库、缓存、后端与前端服务并设置健康检查与依赖顺序。
章节来源
- [frontend/package.json:1-40](file://frontend/package.json#L1-L40)
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
- [tests/conftest.py:1-71](file://tests/conftest.py#L1-L71)
- [backend/alembic.ini:1-134](file://backend/alembic.ini#L1-L134)
- [backend/alembic/versions/488d0bd5ab01_initial_migration.py](file://backend/alembic/versions/488d0bd5ab01_initial_migration.py)
## 架构总览
下图展示从浏览器到后端API再到数据库与缓存的整体调用链路体现开发环境中的典型请求路径与数据流向。
```mermaid
sequenceDiagram
participant Browser as "浏览器"
participant Frontend as "前端应用"
participant Backend as "后端API"
participant DB as "数据库"
participant Cache as "缓存"
Browser->>Frontend : "访问页面"
Frontend->>Backend : "发起HTTP请求"
Backend->>DB : "查询/写入数据"
DB-->>Backend : "返回结果"
Backend->>Cache : "读取/更新缓存"
Cache-->>Backend : "返回缓存命中/更新"
Backend-->>Frontend : "响应JSON"
Frontend-->>Browser : "渲染页面"
```
图表来源
- [docker-compose.yml:36-66](file://docker-compose.yml#L36-L66)
- [backend/Dockerfile:1-41](file://backend/Dockerfile#L1-L41)
- [frontend/Dockerfile:1-15](file://frontend/Dockerfile#L1-L15)
## 详细组件分析
### Git 分支策略与工作流
建议采用Git Flow变体结合Feature分支与Release分支确保开发与发布的可控性与可追溯性
- 主分支
- main仅允许来自release或hotfix的合并保持生产就绪状态。
- develop集成各功能特性作为后续release的基线。
- 功能分支feature
- 命名feature/<issue-id>-短描述
- 从develop切出完成后合并回develop并删除分支。
- 预发布分支release
- 从develop切出进行最终修复与回归测试完成后合并至main与develop并打标签。
- 热修复分支hotfix
- 从main切出紧急修复后同时合并回main与develop。
```mermaid
flowchart TD
A["开始"] --> B["创建功能分支 feature/<id>-desc"]
B --> C["提交到功能分支"]
C --> D{"完成开发?"}
D --> |否| C
D --> |是| E["推送并发起PR到 develop"]
E --> F["代码审查与测试通过"]
F --> G["合并到 develop 并删除分支"]
G --> H["准备 release 分支"]
H --> I["最终测试与修复"]
I --> J["合并到 main 与 develop 并打标签"]
```
说明
- PR需关联Issue确保需求可追溯。
- 合并前必须通过本地与CI测试且无冲突。
### 代码审查流程
- Pull Request 模板
- 必填字段:标题(简述变更)、类型(修复/特性/重构/文档)、影响范围、变更摘要、测试要点、风险评估与回滚预案。
- 关联信息关联Issue编号、相关PR链接、模块负责人。
- 审查标准
- 正确性:单元测试与集成测试覆盖率达标;边界条件与异常处理完备。
- 可读性:命名规范、注释清晰、函数长度与复杂度合理。
- 兼容性:接口变更需向后兼容或提供迁移方案;数据库变更需可逆。
- 安全性:输入校验、权限控制、敏感信息脱敏。
- 合并要求
- 至少一名审查者批准。
- CI流水线通过。
- 无未解决评论。
- 合并后清理功能分支。
### 版本发布管理
- 语义化版本控制
- 主版本号:破坏性变更
- 次版本号:新增兼容功能
- 修订号:修复兼容问题
- 变更日志维护
- 按版本记录:新增、修复、改进、废弃与破坏性变更。
- 引用相关PR与Issue便于追溯。
- 发布标签
- 在release分支合并后于main打标签格式vMAJOR.MINOR.REVISION。
- 为每个版本生成对应Docker镜像并推送到制品库。
### 持续集成/持续部署CI/CD
当前仓库未包含CI配置文件建议在CI系统中实现以下流程
- 触发条件
- push到develop/release/main/hotfix或打开PR时触发。
- 步骤
- 安装依赖后端pip、前端npm ci。
- 代码质量后端使用ruff/black前端使用ESLint。
- 单元测试pytest与pytest-asyncio生成覆盖率报告。
- 容器构建:分别构建后端与前端镜像。
- 健康检查启动docker-compose并在数据库/缓存健康后运行端到端测试。
- 制品归档:上传测试报告与镜像。
- 部署
- develop自动部署到预发布环境。
- release手动审批后部署到生产环境。
- hotfix自动部署到生产并回补到develop。
```mermaid
flowchart TD
S["提交/PR触发"] --> L["安装依赖与代码质量检查"]
L --> T["运行单元测试与覆盖率"]
T --> B["构建后端/前端镜像"]
B --> D["启动容器并健康检查"]
D --> E["端到端测试"]
E --> R{"是否发布?"}
R --> |否| P["归档制品与报告"]
R --> |是| DEP["部署到目标环境"]
DEP --> TAG["打标签并发布"]
```
说明
- 以上为通用CI/CD流程建议具体实现需在CI平台配置相应作业与工件。
### 开发环境搭建与团队协作最佳实践
- 环境准备
- 安装Docker与Docker Compose确保端口未被占用。
- 复制示例环境变量文件并按需调整数据库与缓存参数。
- 启动步骤
- 后端进入backend目录安装依赖并启动服务或使用docker-compose一键启动。
- 前端进入frontend目录安装依赖并启动开发服务器。
- 团队协作
- 统一代码风格后端使用ruff/black前端使用ESLint/TailwindCSS。
- 提交信息规范type(scope): subject如feat(api): 新增用户认证接口。
- 冲突解决优先rebase保持线性历史必要时使用merge并保留解决记录。
- 文档同步变更涉及用户界面或API时同步更新README与变更日志。
章节来源
- [docker-compose.yml:1-71](file://docker-compose.yml#L1-L71)
- [frontend/README.md:1-37](file://frontend/README.md#L1-L37)
## 依赖关系分析
- 技术栈依赖
- 前端Next.js、React、TypeScript、TailwindCSS、Radix UI等。
- 后端FastAPI、SQLAlchemy、AsyncPG、Alembic、Redis、APScheduler、Playwright等。
- 容器与编排
- docker-compose定义了数据库、缓存、后端与前端服务的依赖关系与健康检查。
- 测试依赖
- pytest与pytest-asyncio用于异步测试ASGI传输用于HTTP客户端测试依赖注入覆盖用于模拟认证上下文。
```mermaid
graph LR
FE["前端应用"] --> |HTTP| BE["后端API"]
BE --> DB["PostgreSQL"]
BE --> RC["Redis"]
BE --> AL["Alembic 迁移"]
TEST["pytest 测试"] --> BE
```
图表来源
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
- [docker-compose.yml:36-66](file://docker-compose.yml#L36-L66)
- [tests/conftest.py:1-71](file://tests/conftest.py#L1-L71)
章节来源
- [backend/requirements.txt:1-35](file://backend/requirements.txt#L1-L35)
- [tests/conftest.py:1-71](file://tests/conftest.py#L1-L71)
- [backend/alembic.ini:1-134](file://backend/alembic.ini#L1-L134)
## 性能考虑
- 数据库
- 使用异步驱动与连接池避免阻塞迁移脚本应最小化DDL变更避免长事务锁表。
- 缓存
- 合理设置TTL与键空间热点数据优先缓存定期清理过期键。
- API
- 控制响应大小与分页;对高频接口启用缓存;限制并发与速率。
- 前端
- 图片与静态资源优化按需加载TailwindCSS类名避免冗余。
- 容器
- 使用多阶段构建减少镜像体积;健康检查降低重启时间;资源限制防止资源争用。
## 故障排查指南
- 本地服务无法启动
- 检查端口占用与防火墙;确认数据库与缓存服务已健康运行。
- 数据库迁移失败
- 查看Alembic配置与URL确认迁移脚本语法正确必要时回滚至上一版本。
- 测试异常
- 确认pytest会话级fixture已正确屏蔽定时任务检查依赖注入覆盖是否生效。
- 前后端联调失败
- 核对CORS与代理配置确认API路由与鉴权头正确传递。
章节来源
- [docker-compose.yml:16-20](file://docker-compose.yml#L16-L20)
- [docker-compose.yml:30-34](file://docker-compose.yml#L30-L34)
- [backend/alembic.ini:86-89](file://backend/alembic.ini#L86-L89)
- [tests/conftest.py:19-25](file://tests/conftest.py#L19-L25)
## 结论
通过明确的分支策略、严格的代码审查流程、规范的版本发布管理与可落地的CI/CD实践GEO项目能够在保障交付质量的同时提升团队协作效率。建议尽快在CI平台落地上述流程并根据实际运行情况迭代优化。
## 附录
- 快速启动命令
- docker-compose启动所有服务并进入交互模式。
- 前端进入frontend目录安装依赖后启动开发服务器。
- 后端进入backend目录安装依赖后启动Uvicorn服务。
- 参考文档
- Next.js官方文档与部署指南。
- FastAPI与SQLAlchemy异步数据库实践。
- Alembic迁移最佳实践。