# Code 项目架构分层图 > 一个现代化的代码协作与团队沟通平台 > > 技术栈:Rust (后端) + TypeScript/React (前端) + Kubernetes (部署) --- ## 系统全景架构 ``` ┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ 用 户 层 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ Web 浏览器 │ │ Git 客户端 │ │ 外部 CI/CD │ │ │ │ (React SPA) │ │ (git/SSH) │ │ (GitHub/GitLab) │ │ │ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │ └──────────────────┼────────────────────────────────┼────────────────────────────────┼────────────────┘ │ │ │ │ HTTP/WS │ Git Protocol │ Webhook │ │ │ ┌──────────────────▼────────────────────────────────▼────────────────────────────────▼────────────────┐ │ 接入层 (Ingress/LB) │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Load Balancer / K8s Ingress (:80/:443) │ │ │ └──────────────────────┬──────────────────────┬──────────────────────┬─────────────┘ │ └────────────────────────────────┼──────────────────────┼──────────────────────┼──────────────────────┘ │ │ │ │ REST API │ Git Ops │ Webhook │ │ │ ┌────────────────────────────────▼──────────────────────▼──────────────────────▼──────────────────────┐ │ 应 用 服 务 层 (apps/) │ │ │ │ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ │ │ │ apps/app │ │ apps/gitserver │ │ apps/git-hook │ │ apps/email │ │ │ │ 主 Web API 服务 │ │ Git HTTP/SSH 服务 │ │ Git Hook 处理器 │ │ 邮件发送 Worker │ │ │ │ :8080 │ │ :8021/:2222 │ │ Worker │ │ Worker │ │ │ │ HTTP + WebSocket │ │ HTTP + SSH │ │ 异步任务 │ │ 队列消费 │ │ │ │ 多实例部署 │ │ 单实例 │ │ 单实例 │ │ 单实例 │ │ │ └─────────┬──────────┘ └─────────┬──────────┘ └─────────┬──────────┘ └─────────┬──────────┘ │ └─────────────┼───────────────────────┼───────────────────────┼───────────────────────┼───────────────┘ │ │ │ │ │ │ │ │ ┌─────────────▼───────────────────────▼───────────────────────▼───────────────────────▼───────────────┐ │ 应 用 编 排 层 (apps/operator) │ │ │ │ ┌───────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ apps/operator (Kubernetes Operator) │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ App CRD │ │GitSrv CRD│ │Email CRD │ │Hook CRD │ │Mig CRD │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ K8s 资源 (Deployments, Services, PVCs, Jobs) │ │ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────▼───────────────────────▼───────────────────────▼───────────────────────▼───────────────┐ │ 业 务 逻 辑 层 (libs/service) │ │ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ AppService { 全局服务聚合 } │ │ │ │ │ │ │ │ ┌─────────┐ ┌────────┐ ┌─────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ ┌───────────┐ │ │ │ │ │ agent/ │ │ auth/ │ │git/ │ │ issue/ │ │ project/ │ │ user/ │ │ pull_req/ │ │ │ │ │ │ (8文件) │ │ (10) │ │(16) │ │ (8) │ │ (20) │ │ (12) │ │ (5) │ │ │ │ │ │ AI模型 │ │ 认证 │ │Git │ │ Issue │ │ 项目管理 │ │ 用户 │ │ PR审查 │ │ │ │ │ │ 管理 │ │ 会话 │ │操作 │ │ 追踪 │ │ 权限控制 │ │ 偏好 │ │ 合并 │ │ │ │ │ └─────────┘ └────────┘ └─────┘ └──────────┘ └───────────┘ └────────┘ └───────────┘ │ │ │ │ │ │ │ │ + utils/(project,repo,user) + ws_token + error + Pager │ │ │ └──────────────────────────────────────┬──────────────────────────────────────────────────┘ │ └──────────────────────────────────────────┼──────────────────────────────────────────────────────────┘ │ ┌──────────────────────┼──────────────────────┐ │ │ │ ┌───────────────────▼──────────┐ ┌────────▼─────────────┐ ┌──────▼────────────────────────────┐ │ HTTP 路由层 (libs/api) │ │ WebSocket 层 │ │ 后台 Worker 层 │ │ 100 个路由文件 │ │ (libs/room) │ │ │ │ │ │ │ │ libs/queue: │ │ /api/auth/* (9端点) │ │ /ws │ │ MessageProducer │ │ /api/git/* (100+端点) │ │ /ws/rooms/{id} │ │ RedisPubSub │ │ /api/projects/* (50+端点) │ │ /ws/projects/{id} │ │ room_worker_task │ │ /api/issue/* (30+端点) │ │ │ │ start_email_worker │ │ /api/room/* (40+端点) │ │ 实时消息广播 │ │ │ │ /api/pull_request/* (20端点)│ │ 多实例同步 │ │ libs/git/hook: │ │ /api/agent/* (15端点) │ │ AI 流式输出 │ │ GitServiceHooks │ │ /api/user/* (20端点) │ │ │ │ GitHookPool │ │ /api/openapi/* (文档) │ │ │ │ │ └───────────┬────────────────┘ └──────────┬───────────┘ └─────────────┬───────────────────────┘ │ │ │ └─────────────────────────────┼───────────────────────────┘ │ ┌─────────────────────────────────────────▼────────────────────────────────────────────────────────┐ │ 基 础 设 施 层 (Infrastructure Libs) │ │ │ │ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ │ │ libs/models │ │ libs/db │ │ libs/config │ │ libs/session │ │ │ │ 92 个实体文件 │ │ 数据库连接池 │ │ 全局配置管理 │ │ 会话管理中间件 │ │ │ │ Sea-ORM 实体定义 │ │ 缓存抽象 │ │ .env 加载 │ │ Redis Store │ │ │ │ 类型别名 │ │ 重试机制 │ │ 12 子模块 │ │ JWT + Cookie │ │ │ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ │ │ │ │ │ │ │ │ ┌─────────▼─────────┐ ┌────────▼─────────┐ ┌─────────▼─────────┐ ┌─────────▼─────────┐ │ │ │ libs/git │ │ libs/agent │ │ libs/email │ │ libs/avatar │ │ │ │ 19 子模块 │ │ 6 子模块 │ │ SMTP 邮件发送 │ │ 图片处理 │ │ │ │ libgit2 封装 │ │ OpenAI 集成 │ │ lettre 客户端 │ │ image crate │ │ │ │ HTTP + SSH 协议 │ │ Qdrant 向量库 │ │ 模板引擎 │ │ 缩放/裁剪 │ │ │ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ │ │ │ │ │ │ │ │ ┌─────────▼─────────┐ ┌────────▼─────────┐ ┌─────────▼───────────────────────▼─────────┐ │ │ │ libs/queue │ │ libs/room │ │ libs/migrate │ │ │ │ 消息队列 │ │ 实时聊天室 │ │ 82+ 数据库迁移脚本 │ │ │ │ Redis Streams │ │ 19 子模块 │ │ sea-orm-migration │ │ │ │ Pub/Sub │ │ WebSocket 管理 │ │ up/down/fresh/refresh/reset │ │ │ └─────────┬─────────┘ └─────────┬─────────┘ └─────────────────────────────────────────┘ │ │ │ │ │ │ ┌─────────▼─────────┐ ┌────────▼─────────┐ │ │ │ libs/webhook │ │ libs/rpc │ libs/transport │ │ │ (占位) │ │ (占位) │ (占位) │ │ └───────────────────┘ └─────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────▼──────────────────────▼────────────────────────────────────────────────────────────┐ │ 存 储 层 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ PostgreSQL │ │ Redis │ │ Qdrant │ │ 文件系统 │ │ │ │ :5432 │ │ :6379 │ │ :6333 │ │ │ │ │ │ │ │ │ │ │ │ /data/avatars │ │ │ │ • 用户数据 │ │ • 会话存储 │ │ • 向量嵌入 │ │ /data/repos │ │ │ │ • 项目/仓库 │ │ • 缓存数据 │ │ • AI 索引 │ │ • 头像图片 │ │ │ │ • Issue/PR │ │ • Pub/Sub │ │ • 相似度检索 │ │ • Git 仓库 │ │ │ │ • Room 消息 │ │ • Stream 队列 │ │ │ │ • 上传文件 │ │ │ │ • 评论/标签 │ │ • Hook 队列 │ │ │ │ │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ 外部 API │ ┌─────────────▼────────────────────────────────────────────────────────────────────────────────────┐ │ 外 部 服 务 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ SMTP 服务器 │ │ OpenAI API │ │ Embedding API │ │ │ │ :587 │ │ HTTPS │ │ HTTPS │ │ │ │ │ │ │ │ │ │ │ │ • 邮件发送 │ │ • 聊天补全 │ │ • 文本向量化 │ │ │ │ • 通知邮件 │ │ • AI 助手 │ │ • 相似度计算 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 前端架构分层 ``` ┌────────────────────────────────────────────────────────────────────────────────────────────────┐ │ 前 端 应 用 层 (src/) │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Vite + React + TypeScript │ │ │ │ │ │ │ │ src/main.tsx ──▶ App.tsx ──▶ BrowserRouter ──▶ Routes │ │ │ │ │ │ │ │ ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐ │ │ │ │ │ 页面层 (app/) │ │ 组件层 (components/) │ │ 状态管理层 │ │ │ │ │ │ 59 页面组件 │ │ 108 UI 组件 │ │ │ │ │ │ │ │ │ │ │ │ TanStack Query │ │ │ │ │ │ auth/ (4) │ │ ui/ (66) │ │ (服务端状态) │ │ │ │ │ │ init/ (2) │ │ room/ (20) │ │ │ │ │ │ │ │ user/ (1) │ │ repository/ (8) │ │ React Context │ │ │ │ │ │ project/ (22) │ │ project/ (4) │ │ (全局状态) │ │ │ │ │ │ repository/ (12) │ │ auth/ (2) │ │ │ │ │ │ │ │ settings/ (8) │ │ layout/ (2) │ │ Local State │ │ │ │ │ │ │ │ │ │ (组件状态) │ │ │ │ │ └───────────┬───────────┘ └───────────┬───────────┘ └───────────┬────────────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────────────────────┼────────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌────────────────────────────────────────┼────────────────────────────────────────┐ │ │ │ │ │ API 客户端层 │ │ │ │ │ │ │ │ │ │ │ │ src/client/ ──▶ openapi-ts 自动生成 (从 openapi.json) │ │ │ │ │ │ 400+ API 函数 + 完整 TypeScript 类型 │ │ │ │ │ │ Axios HTTP 客户端 │ │ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ 工具层 │ │ │ │ │ │ │ │ │ │ │ │ src/hooks/ ──▶ 自定义 React Hooks │ │ │ │ │ │ src/lib/ ──▶ 工具函数 (api-error, rsa, date 等) │ │ │ │ │ │ src/contexts/ ──▶ React Context (User, Theme 等) │ │ │ │ │ │ src/assets/ ──▶ 静态资源 (图片、图标) │ │ │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 前端路由结构 ``` / 首页/仪表板 │ ├── /auth/ 认证路由 │ ├── /login 登录页 │ ├── /register 注册页 │ ├── /password/reset 密码重置 │ └── /verify-email 邮箱验证 │ ├── /init/ 初始化路由 │ ├── /project 初始化项目 │ └── /repository 初始化仓库 │ ├── /user/:user 用户资料页 │ ├── /settings/ 个人设置 │ ├── /profile 个人资料 │ ├── /account 账户设置 │ ├── /security 安全设置 │ ├── /tokens 访问令牌 │ ├── /ssh-keys SSH 密钥 │ ├── /preferences 偏好设置 │ └── /activity 活动日志 │ ├── /project/:project_name/ 项目路由 │ ├── / 项目概览 │ ├── /activity 项目活动 │ ├── /repositories 仓库列表 │ ├── /issues Issue 列表 │ │ ├── /new 新建 Issue │ │ └── /:issueNumber Issue 详情 │ ├── /boards 看板列表 │ │ └── /:boardId 看板详情 │ ├── /members 成员管理 │ ├── /room 聊天室列表 │ │ └── /:roomId 聊天室 │ ├── /articles 文章 │ ├── /resources 资源 │ └── /settings/ 项目设置 │ ├── /general 通用设置 │ ├── /labels 标签管理 │ ├── /billing 账单 │ ├── /members 成员管理 │ ├── /oauth OAuth 配置 │ └── /webhook Webhook 管理 │ ├── /repository/:namespace/:repoName/ 仓库路由 │ ├── / 仓库概览 │ ├── /branches 分支管理 │ ├── /commits 提交历史 │ │ └── /:oid 提交详情 │ ├── /contributors 贡献者 │ ├── /files 文件浏览 │ ├── /tags 标签 │ ├── /pull-requests PR 列表 │ │ ├── /new 新建 PR │ │ └── /:prNumber PR 详情 │ └── /settings 仓库设置 │ ├── /search 全局搜索 └── /notifications 通知中心 ``` --- ## 后端服务依赖关系 ``` ┌──────────────────────────────────────────────────────────────────────────────────────┐ │ apps/ 应用依赖关系 │ │ │ │ apps/app ────────────────┐ │ │ apps/email ──────────────┤ │ │ apps/git-hook ───────────┤──▶ libs/config (全局配置) │ │ apps/gitserver ──────────┤──▶ libs/db (数据库连接池 + 缓存) │ │ apps/migrate ────────────┤──▶ libs/session (会话管理) │ │ apps/operator ───────────┘──▶ libs/migrate (数据库迁移) │ │ ├──▶ libs/service (业务逻辑层) │ │ │ │ │ │ │ ├──▶ libs/api (HTTP 路由) │ │ │ │ │ │ │ ├──▶ libs/agent (AI 服务) │ │ │ ├──▶ libs/avatar (头像处理) │ │ │ ├──▶ libs/email (邮件发送) │ │ │ ├──▶ libs/room (聊天室) │ │ │ │ │ │ │ │ │ └──▶ libs/queue (消息队列) │ │ │ │ │ │ │ └──▶ libs/git (Git 操作) │ │ │ │ │ │ │ ├──▶ git2 (libgit2 绑定) │ │ │ ├──▶ git2-hooks (Git 钩子) │ │ │ └──▶ russh (SSH 协议) │ │ │ │ │ └──▶ libs/models (数据模型 - 所有层共享) │ │ │ │ │ ├──▶ users/ (12 实体) │ │ ├──▶ projects/ (19 实体) │ │ ├──▶ repos/ (16 实体) │ │ ├──▶ issues/ (10 实体) │ │ ├──▶ pull_request/ (5 实体) │ │ ├──▶ rooms/ (11 实体) │ │ ├──▶ agents/ (6 实体) │ │ ├──▶ ai/ (3 实体) │ │ └──▶ system/ (3 实体) │ └──────────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## libs/models 实体分组 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ libs/models 实体分组 (92 个) │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ Users (12 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ user 用户基本信息 │ │ │ │ user_2fa 双因素认证 │ │ │ │ user_activity_log 用户活动日志 │ │ │ │ user_email 用户邮箱 │ │ │ │ user_email_change 邮箱变更历史 │ │ │ │ user_notification 用户通知 │ │ │ │ user_password 用户密码 │ │ │ │ user_password_reset 密码重置令牌 │ │ │ │ user_preferences 用户偏好设置 │ │ │ │ user_relation 用户关系 │ │ │ │ user_ssh_key SSH 密钥 │ │ │ │ user_token 访问令牌 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Projects (19 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ project 项目基本信息 │ │ │ │ project_access_log 访问日志 │ │ │ │ project_activity 活动记录 │ │ │ │ project_audit_log 审计日志 │ │ │ │ project_billing 账单信息 │ │ │ │ project_billing_history 账单历史 │ │ │ │ project_board 看板 │ │ │ │ project_board_card 看板卡片 │ │ │ │ project_board_column 看板列 │ │ │ │ project_follow 项目关注 │ │ │ │ project_history_name 历史名称 │ │ │ │ project_label 项目标签 │ │ │ │ project_like 项目点赞 │ │ │ │ project_member_ 成员邀请 │ │ │ │ invitations │ │ │ │ project_member_join_ 加入问答 │ │ │ │ answers │ │ │ │ project_member_join_ 加入请求 │ │ │ │ request │ │ │ │ project_member_join_ 加入设置 │ │ │ │ settings │ │ │ │ project_members 项目成员 │ │ │ │ project_watch 项目观看 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Repos (16 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ repo 仓库基本信息 │ │ │ │ repo_branch 分支信息 │ │ │ │ repo_branch_protect 分支保护 │ │ │ │ repo_collaborator 协作者 │ │ │ │ repo_commit 提交记录 │ │ │ │ repo_fork 仓库 Fork │ │ │ │ repo_history_name 历史名称 │ │ │ │ repo_hook Git 钩子 │ │ │ │ repo_lfs_lock LFS 锁定 │ │ │ │ repo_lfs_object LFS 对象 │ │ │ │ repo_lock 仓库锁定 │ │ │ │ repo_star 仓库星标 │ │ │ │ repo_tag 仓库标签 │ │ │ │ repo_upstream 上游仓库 │ │ │ │ repo_watch 仓库观看 │ │ │ │ repo_webhook 仓库 Webhook │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Issues (10 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ issue Issue 基本信息 │ │ │ │ issue_assignee Issue 负责人 │ │ │ │ issue_comment Issue 评论 │ │ │ │ issue_comment_reaction 评论表情 │ │ │ │ issue_label Issue 标签 │ │ │ │ issue_pull_request Issue 关联 PR │ │ │ │ issue_reaction Issue 表情 │ │ │ │ issue_repo Issue 仓库 │ │ │ │ issue_subscriber Issue 订阅者 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Pull Requests (5 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ pull_request PR 基本信息 │ │ │ │ pull_request_commit PR 提交记录 │ │ │ │ pull_request_review PR 审查 │ │ │ │ pull_request_review_ PR 审查评论 │ │ │ │ comment │ │ │ │ pull_request_review_ PR 审查请求 │ │ │ │ request │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Rooms (11 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ room 聊天室基本信息 │ │ │ │ room_ai 聊天室 AI 配置 │ │ │ │ room_category 聊天室分类 │ │ │ │ room_member 聊天室成员 │ │ │ │ room_message 聊天消息 │ │ │ │ room_message_edit_ 消息编辑历史 │ │ │ │ history │ │ │ │ room_message_reaction 消息表情 │ │ │ │ room_notifications 聊天室通知 │ │ │ │ room_pin 聊天室置顶 │ │ │ │ room_thread 聊天室 Thread │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ Agents (6 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ model AI 模型 │ │ │ │ model_capability 模型能力 │ │ │ │ model_parameter_profile 模型参数配置 │ │ │ │ model_pricing 模型定价 │ │ │ │ model_provider 模型提供商 │ │ │ │ model_version 模型版本 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ AI (3 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ ai_session AI 会话 │ │ │ │ ai_tool_auth AI 工具认证 │ │ │ │ ai_tool_call AI 工具调用 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ System (3 实体) │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ label 系统标签 │ │ │ │ notify 系统通知 │ │ │ └─────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ ``` --- ## libs/service 业务模块 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ libs/service 业务模块 (93 个文件) │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ agent/ AI 模型管理 (8 文件) │ │ ├── code_review AI 代码审查 │ │ ├── model AI 模型管理 │ │ ├── model_capability 模型能力管理 │ │ ├── model_parameter_ 模型参数配置 │ │ │ profile │ │ ├── model_pricing 模型定价管理 │ │ ├── model_version 模型版本管理 │ │ ├── pr_summary PR 摘要生成 │ │ └── provider 模型提供商管理 │ │ │ │ auth/ 认证管理 (10 文件) │ │ ├── captcha 验证码管理 │ │ ├── email 邮箱认证 │ │ ├── login 登录逻辑 │ │ ├── logout 登出逻辑 │ │ ├── me 当前用户信息 │ │ ├── password 密码管理 │ │ ├── register 注册逻辑 │ │ ├── rsa RSA 加密 │ │ └── totp TOTP 双因素认证 │ │ │ │ git/ Git 操作 (16 文件) │ │ ├── archive 仓库归档 │ │ ├── blocking 阻塞操作 │ │ ├── blame Git Blame │ │ ├── blob Blob 操作 │ │ ├── branch 分支操作 │ │ ├── branch_ 分支保护 │ │ │ protection │ │ ├── commit 提交操作 │ │ ├── contributors 贡献者统计 │ │ ├── diff Diff 操作 │ │ ├── init 仓库初始化 │ │ ├── refs 引用操作 │ │ ├── repo 仓库操作 │ │ ├── star 星标操作 │ │ ├── tag 标签操作 │ │ ├── tree 树操作 │ │ └── watch 观看操作 │ │ │ │ issue/ Issue 管理 (8 文件) │ │ ├── assignee 负责人管理 │ │ ├── comment 评论管理 │ │ ├── issue Issue CRUD │ │ ├── label 标签管理 │ │ ├── pull_request Issue 关联 PR │ │ ├── reaction 表情回应 │ │ ├── repo 仓库 Issue │ │ └── subscriber 订阅者管理 │ │ │ │ project/ 项目管理 (20 文件) │ │ ├── activity 项目活动 │ │ ├── audit 审计日志 │ │ ├── avatar 项目头像 │ │ ├── billing 账单管理 │ │ ├── board 看板管理 │ │ ├── can_use 权限检查 │ │ ├── info 项目信息 │ │ ├── init 项目初始化 │ │ ├── invitation 邀请管理 │ │ ├── join_answers 加入问答 │ │ ├── join_request 加入请求 │ │ ├── join_settings 加入设置 │ │ ├── labels 标签管理 │ │ ├── like 点赞管理 │ │ ├── members 成员管理 │ │ ├── repo 仓库管理 │ │ ├── repo_ 仓库权限 │ │ │ permission │ │ ├── settings 项目设置 │ │ ├── standard 项目标准 │ │ ├── transfer_repo 仓库转移 │ │ └── watch 观看管理 │ │ │ │ pull_request/ PR 管理 (5 文件) │ │ ├── merge PR 合并 │ │ ├── pull_request PR CRUD │ │ ├── review PR 审查 │ │ ├── review_comment 审查评论 │ │ └── review_request 审查请求 │ │ │ │ user/ 用户管理 (12 文件) │ │ ├── access_key 访问密钥 │ │ ├── avatar 用户头像 │ │ ├── chpc 用户 CHPC │ │ ├── notification 通知管理 │ │ ├── notify 通知发送 │ │ ├── preferences 偏好设置 │ │ ├── profile 用户资料 │ │ ├── projects 用户项目 │ │ ├── repository 用户仓库 │ │ ├── ssh_key SSH 密钥 │ │ ├── subscribe 订阅管理 │ │ └── user_info 用户信息 │ │ │ │ utils/ 工具函数 (3 文件) │ │ ├── project 项目工具 │ │ ├── repo 仓库工具 │ │ └── user 用户工具 │ │ │ │ ws_token WebSocket Token 服务 │ │ error 服务层错误 │ │ Pager 分页结构体 │ └─────────────────────────────────────────────────────────────────────────┘ ``` --- ## libs/api 路由模块 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ libs/api 路由模块 (100 个文件) │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ auth/ 认证路由 (9 文件) │ │ ├── captcha 验证码接口 │ │ ├── email 邮箱认证接口 │ │ ├── login 登录接口 │ │ ├── logout 登出接口 │ │ ├── me 当前用户接口 │ │ ├── password 密码接口 │ │ ├── register 注册接口 │ │ ├── totp TOTP 接口 │ │ └── ws_token WebSocket Token 接口 │ │ │ │ git/ Git 路由 (18 文件) │ │ ├── archive 归档接口 │ │ ├── blame Blame 接口 │ │ ├── blob Blob 接口 │ │ ├── branch 分支接口 │ │ ├── branch_ 分支保护接口 │ │ │ protection │ │ ├── commit 提交接口 │ │ ├── contributors 贡献者接口 │ │ ├── diff Diff 接口 │ │ ├── init 初始化接口 │ │ ├── refs 引用接口 │ │ ├── repo 仓库接口 │ │ ├── star 星标接口 │ │ ├── tag 标签接口 │ │ ├── tree 树接口 │ │ └── watch 观看接口 │ │ │ │ project/ 项目路由 (17 文件) │ │ ├── activity 活动接口 │ │ ├── audit 审计接口 │ │ ├── billing 账单接口 │ │ ├── board 看板接口 │ │ ├── info 信息接口 │ │ ├── init 初始化接口 │ │ ├── invitation 邀请接口 │ │ ├── join_answers 加入问答接口 │ │ ├── join_request 加入请求接口 │ │ ├── join_settings 加入设置接口 │ │ ├── labels 标签接口 │ │ ├── like 点赞接口 │ │ ├── members 成员接口 │ │ ├── repo 仓库接口 │ │ ├── settings 设置接口 │ │ ├── transfer_repo 仓库转移接口 │ │ └── watch 观看接口 │ │ │ │ issue/ Issue 路由 (10 文件) │ │ ├── assignee 负责人接口 │ │ ├── comment 评论接口 │ │ ├── comment_ 评论表情接口 │ │ │ reaction │ │ ├── issue_label Issue 标签接口 │ │ ├── label 标签接口 │ │ ├── pull_request Issue 关联 PR 接口 │ │ ├── reaction 表情接口 │ │ ├── repo 仓库 Issue 接口 │ │ └── subscriber 订阅者接口 │ │ │ │ room/ 聊天室路由 (14 文件) │ │ ├── ai AI 接口 │ │ ├── category 分类接口 │ │ ├── draft_and_ 草稿和历史接口 │ │ │ history │ │ ├── member 成员接口 │ │ ├── message 消息接口 │ │ ├── notification 通知接口 │ │ ├── pin 置顶接口 │ │ ├── reaction 表情接口 │ │ ├── room 聊天室接口 │ │ ├── thread Thread 接口 │ │ ├── ws WebSocket 接口 │ │ ├── ws_handler WebSocket 处理器 │ │ ├── ws_types WebSocket 类型 │ │ └── ws_universal 通用 WebSocket 接口 │ │ │ │ pull_request/ PR 路由 (5 文件) │ │ ├── merge 合并接口 │ │ ├── pull_request PR CRUD 接口 │ │ ├── review 审查接口 │ │ ├── review_comment 审查评论接口 │ │ └── review_request 审查请求接口 │ │ │ │ agent/ AI Agent 路由 (8 文件) │ │ ├── code_review 代码审查接口 │ │ ├── model 模型接口 │ │ ├── model_ 模型能力接口 │ │ │ capability │ │ ├── model_ 模型参数配置接口 │ │ │ parameter_profile │ │ ├── model_pricing 模型定价接口 │ │ ├── model_version 模型版本接口 │ │ ├── pr_summary PR 摘要接口 │ │ └── provider 模型提供商接口 │ │ │ │ user/ 用户路由 (10 文件) │ │ ├── access_key 访问密钥接口 │ │ ├── chpc CHPC 接口 │ │ ├── notification 通知接口 │ │ ├── preferences 偏好接口 │ │ ├── profile 资料接口 │ │ ├── projects 项目接口 │ │ ├── repository 仓库接口 │ │ ├── ssh_key SSH 密钥接口 │ │ ├── subscribe 订阅接口 │ │ └── user_info 用户信息接口 │ │ │ │ openapi/ OpenAPI 文档生成 │ │ route/ 路由聚合 │ │ error/ API 错误处理 │ └─────────────────────────────────────────────────────────────────────────┘ ``` --- ## 服务间通信机制 ``` ┌────────────────────────────────────────────────────────────────────────────────────────────┐ │ 服务间通信机制 │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Redis (核心通信总线) │ │ │ │ │ │ │ │ Redis Streams ──▶ 异步消息队列 │ │ │ │ ├── room:stream:{room_id} 房间消息持久化 │ │ │ │ └── email:stream 邮件发送队列 │ │ │ │ │ │ │ │ Redis Pub/Sub ──▶ 实时事件广播 │ │ │ │ ├── room:pub:{room_id} 房间级广播 │ │ │ │ └── project:pub:{proj_id} 项目级广播 │ │ │ │ │ │ │ │ Redis Lists ──▶ 任务队列 │ │ │ │ ├── {hook}:sync Git Hook 同步任务 │ │ │ │ ├── {hook}:fsck Git Hook 完整性检查 │ │ │ │ └── {hook}:gc Git Hook 垃圾回收 │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ HTTP/REST API ──▶ 同步服务调用 │ │ │ │ ├── app ↔ gitserver Git 元数据查询 │ │ │ │ └── app → 外部 AI 服务 OpenAI 兼容 API 调用 │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ WebSocket ──▶ 客户端实时通信 │ │ │ │ ├── /ws 通用 WebSocket (多房间订阅) │ │ │ │ ├── /ws/rooms/{room_id} 房间级 WebSocket │ │ │ │ └── /ws/projects/{proj_id} 项目级 WebSocket │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │ │ Kubernetes CRD + Operator ──▶ 基础设施编排 │ │ │ │ ├── apps.code.dev App CRD → Deployment + Service │ │ │ │ ├── gitservers.code.dev GitServer CRD → Deployment + Service + PVC │ │ │ │ ├── emailworkers.code.dev EmailWorker CRD → Deployment │ │ │ │ ├── githooks.code.dev GitHook CRD → Deployment + ConfigMap │ │ │ │ └── migrates.code.dev Migrate CRD → Job │ │ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 数据流详解 ### 1. 聊天消息流程 ``` 客户端 A app 实例 1 Redis app 实例 2 客户端 B │ │ │ │ │ │── WS 发送消息 ───────▶│ │ │ │ │ │── XADD ──────────────▶│ │ │ │ │ room:stream:{id} │ │ │ │ │── PUBLISH ────────────▶│ │ │ │ │ room:pub:{id} │ │ │ │ │ │── 事件通知 ────────────▶│ │ │ │ │ │── WS 推送 ────────────▶│ │◀─ ACK ───────────────│ │ │ │ │ │ │ │ │ │ │◀──── XREADGROUP ─────│ │ │ │ │ (room_worker) │ │ │ │ │── 写入 PostgreSQL ────│ │ │ ``` ### 2. Git Push 流程 ``` 客户端 gitserver Redis git-hook PostgreSQL │ │ │ │ │ │── git push ────────▶│ │ │ │ │ (HTTP/SSH) │ │ │ │ │ │── git-receive-pack──▶│ │ │ │ │── LPUSH ────────────▶│ │ │ │ │ {hook}:sync │ │ │ │◀─ ACK ─────────────│ │ │ │ │ │ │── BRPOPLPUSH ─────▶│ │ │ │ │ │── 同步元数据 ────────▶│ │ │ │ │── 可选: fsck/gc ─────▶│ │ │ │◀── XACK ──────────│ │ ``` ### 3. 邮件发送流程 ``` 业务逻辑 app Redis email-worker SMTP │ │ │ │ │ │── 触发邮件 ────────▶│ │ │ │ │ │── XADD ───────────▶│ │ │ │ │ email:stream │ │ │ │◀─ 返回 ───────────│ │ │ │ │ │ │── XREADGROUP ─────▶│ │ │ │ │ │── 渲染模板 ──────────▶│ │ │ │ │── SMTP 发送 ─────────▶│ │ │ │◀── XACK ──────────│ │ ``` ### 4. AI 聊天流程 ``` 客户端 app OpenAI API Qdrant PostgreSQL │ │ │ │ │ │── AI 消息 ──────────▶│ │ │ │ │ │── 生成 Embedding ──▶│ │ │ │ │◀──── 向量 ──────────│ │ │ │ │── 存储向量 ─────────────────────────────▶│ │ │ │── 流式 Chat ─────────▶│ │ │ │◀─ Stream Chunk ──────│◀──── Stream ─────────│ │ │ │ │ │ │ │ │ │── 保存消息 ────────────────────────────────────────────────▶│ │ │── 检索相似消息 ────────────────────────▶│ │ │ │◀── 相似结果 ───────────────────────────│ │ ``` --- ## 技术栈汇总 ### 后端技术栈 | 类别 | 技术 | 版本 | |------|------|------| | **语言** | Rust | Edition 2024 | | **Web 框架** | Actix-web | 4.13.0 | | **WebSocket** | Actix-ws | 0.4.0 | | **ORM** | SeaORM | 2.0.0-rc.37 | | **数据库** | PostgreSQL | - | | **缓存/消息** | Redis | 1.1.0 | | **向量库** | Qdrant | 1.17.0 | | **Git** | git2 / russh | 0.20.0 / 0.55.0 | | **邮件** | Lettre | 0.11.19 | | **AI** | async-openai | 0.34.0 | | **K8s** | kube-rs | 0.98 | | **gRPC** | Tonic | 0.14.5 | | **日志** | slog / tracing | 2.8 / 0.1.44 | ### 前端技术栈 | 类别 | 技术 | 版本 | |------|------|------| | **语言** | TypeScript | 5.9 | | **框架** | React | 19.2 | | **路由** | React Router | 7.13 | | **构建** | Vite + SWC | 8.0 | | **UI** | shadcn/ui + Tailwind | 4.11 / 4.2 | | **状态** | TanStack Query | 5.96 | | **HTTP** | Axios + OpenAPI 生成 | 1.7 | | **Markdown** | react-markdown + Shiki | 10 / 1 | | **拖拽** | dnd-kit | 6.3 | --- ## Docker 与 K8s 部署 ``` ┌──────────────────────────────────────────────────────────────────────────────┐ │ Docker 镜像 (6 个) │ │ │ │ docker/app.Dockerfile ──▶ apps/app 主应用镜像 │ │ docker/email-worker.Dockerfile ──▶ apps/email 邮件 Worker 镜像 │ │ docker/git-hook.Dockerfile ──▶ apps/git-hook Git Hook 镜像 │ │ docker/gitserver.Dockerfile ──▶ apps/gitserver Git Server 镜像 │ │ docker/migrate.Dockerfile ──▶ apps/migrate 数据库迁移镜像 │ │ docker/operator.Dockerfile ──▶ apps/operator K8s Operator 镜像 │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────────────┐ │ Kubernetes CRD (5 个) │ │ │ │ docker/crd/app-crd.yaml ──▶ apps.code.dev │ │ docker/crd/gitserver-crd.yaml ──▶ gitservers.code.dev │ │ docker/crd/email-worker-crd.yaml ──▶ emailworkers.code.dev │ │ docker/crd/git-hook-crd.yaml ──▶ githooks.code.dev │ │ docker/crd/migrate-crd.yaml ──▶ migrates.code.dev │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────────────┐ │ K8s 部署配置 │ │ │ │ docker/operator/deployment.yaml ──▶ Operator Deployment │ │ docker/operator/example/ ──▶ CRD 使用示例 │ │ code-system.yaml │ └──────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 关键设计特点 | 特点 | 描述 | |------|------| | **Monorepo 架构** | Rust workspace + 前端 monorepo,统一管理 | | **清晰分层** | 路由层 → 业务层 → 基础设施层 → 存储层,职责明确 | | **异步优先** | 基于 Redis Streams 的异步消息处理 | | **实时通信** | WebSocket + Redis Pub/Sub 实现多实例同步 | | **K8s 原生** | Operator + 5 个 CRD 管理全生命周期 | | **类型安全** | OpenAPI 自动生成 TypeScript 客户端 | | **可扩展** | 服务独立部署,水平扩展 | | **Git 兼容** | 完整支持 HTTP/SSH Git 协议 + LFS | | **AI 集成** | 原生集成 OpenAI 兼容 API + 向量检索 | | **92 个数据库实体** | 覆盖用户、项目、仓库、Issue、PR、聊天室、AI 等完整业务域 |