# v2.6 部署指南 **版本**: 2.6.0 **作者**: 庞统(副军师)🐦 **日期**: 2026-05-17 --- ## 架构概览 ``` 安装目录: ~/.sanguo_projects/sanguo_moziplus_v2/ ├── config/default.yaml # 全局配置 ├── data/ # 运行时数据(项目黑板DB) ├── src/ # Python 源码 │ ├── main.py # FastAPI 入口 │ ├── frontend/dist/ # 前端构建产物 │ ├── api/ # API 路由 │ ├── blackboard/ # 黑板核心 │ └── daemon/ # Daemon 模块 ├── tests/ # 单元测试 ├── pyproject.toml # Python 项目配置 ├── ecosystem.config.cjs # PM2 配置 └── requirements.txt # Python 依赖 开发目录: ~/.openclaw/sanguo_projects/sanguo_moziplus_v2/ └── (同结构,git 仓库) ``` ## 路径解析策略 所有路径通过以下优先级解析: 1. **环境变量** `BLACKBOARD_ROOT` → 项目数据根目录(最高优先级) 2. **配置文件** `config/default.yaml` 的 `data_root` → 项目数据根目录 3. **相对路径默认** → `{安装目录}/data/`(`main.py` 用 `__file__` 相对定位) ### 关键路径 | 用途 | 解析方式 | 默认值 | |------|---------|--------| | 项目数据 | `BLACKBOARD_ROOT` 环境变量 或 `config.data_root` | `{src/../data/}` | | 配置文件 | `__file__` 相对定位 | `{src/../config/default.yaml}` | | 前端静态文件 | `__file__` 相对定位 | `{src/frontend/dist/}` | | Inbox JSONL | 相对于项目数据目录 | `{项目}/inbox/daemon.jsonl` | | 日志 | PM2 管理 | stdout | ## 部署步骤 ### 1. 同步代码 ```bash # 从开发目录同步到安装目录 rsync -av --exclude='__pycache__' --exclude='.pytest_cache' \ ~/.openclaw/sanguo_projects/sanguo_moziplus_v2/ \ ~/.sanguo_projects/sanguo_moziplus_v2/ ``` ### 2. 安装依赖 ```bash cd ~/.sanguo_projects/sanguo_moziplus_v2 pip3 install -r requirements.txt ``` ### 3. 配置 编辑 `config/default.yaml`,按需调整: ```yaml # 数据根目录(可选,不设则用 {安装目录}/data/) data_root: "~/.sanguo_projects/sanguo_moziplus_v2/data" daemon: tick_interval: 30 max_global_agents: 5 ``` ### 4. 前端构建(如果从开发目录 rsync 了 dist/ 可跳过) ```bash cd ~/.sanguo_projects/sanguo_moziplus_v2/src/frontend npm install npm run build # 产物在 src/frontend/dist/ ``` ### 5. PM2 启动 ```bash cd ~/.sanguo_projects/sanguo_moziplus_v2 pm2 start ecosystem.config.cjs ``` ### 6. 验证 ```bash # API curl http://localhost:8080/api/daemon/status # Swagger 文档 open http://localhost:8080/docs # 前端 Dashboard open http://localhost:8083 # 或(如果 FastAPI 托管静态文件) open http://localhost:8080/ ``` ## PM2 配置 `ecosystem.config.cjs`: ```javascript module.exports = { apps: [{ name: "sanguo-moziplus-v2", script: "src/main.py", interpreter: "python3", cwd: "/Users/chufeng/.sanguo_projects/sanguo_moziplus_v2", env: { BLACKBOARD_ROOT: "/Users/chufeng/.sanguo_projects/sanguo_moziplus_v2/data", }, max_memory_restart: "500M", log_date_format: "YYYY-MM-DD HH:mm:ss", }] }; ``` ## NAS/Docker 部署(姜维负责) - 数据目录挂载到 NAS `/Volumes/stock/moziplus-v2/` - Docker 容器运行 FastAPI + 前端 - 定时 `sqlite3 backup` 黑板 DB 到 NAS ## 开发 → 部署 同步流程 ``` 开发目录修改 → git commit → rsync 到安装目录 → pm2 restart → 验证 ↑ ↓ └────────────── 回滚(git revert)←─────────────┘ ``` ## 测试 ### 单元测试 ```bash cd ~/.sanguo_projects/sanguo_moziplus_v2 python3 -m pytest tests/ -q ``` ### 端到端测试(司马懿执行) ```bash # 1. 创建项目 python3 src/cli/admin.py create demo "Demo Project" --agents agent1,agent2 # 2. 创建任务 python3 src/cli/blackboard.py create demo --title "Test Task" --type coding # 3. 查看任务 python3 src/cli/blackboard.py read demo # 4. API 测试 curl http://localhost:8080/api/projects curl http://localhost:8080/api/daemon/status # 5. 前端访问 open http://localhost:8083 ```