auto-sync: 2026-05-22 18:37:17

This commit is contained in:
cfdaily
2026-05-22 18:37:17 +08:00
parent 2c5f886998
commit c4824da298
+292
View File
@@ -0,0 +1,292 @@
# moziplus v2 运维脚本设计
**版本**: 3.0.0
**作者**: 庞统(副军师)🐦
**日期**: 2026-05-22
**基于**: deployment-v2.6.md + deployment-v2.6-guide.md(更新版)
---
## 1. 概述
moziplus v2 提供一套运维脚本,覆盖部署、状态查看、数据管理、备份和卸载的全生命周期。
### 脚本清单
| 脚本 | 用途 | 风险等级 |
|------|------|---------|
| `deploy.sh` | 部署/升级 | 低(不覆盖 data/config |
| `status.sh` | 运行状态查看 | 无(只读) |
| `build-frontend.sh` | 构建前端 | 无 |
| `backup.sh` | 备份数据到 NAS | 无 |
| `reset-data.sh` | 清空运行数据 | 高(删数据) |
| `uninstall.sh` | 完全卸载 | 高(删目录) |
### 目录约定
```
开发目录: ~/.openclaw/sanguo_projects/sanguo_moziplus_v2/ ← Git 仓库
安装目录: ~/.sanguo_projects/sanguo_moziplus_v2/ ← PM2 运行
脚本位置: 开发目录/scripts/
```
---
## 2. 环境要求
| 依赖 | 版本 | 用途 |
|------|------|------|
| Python | ≥ 3.9 | 后端运行 |
| Node.js | ≥ 20 | 前端构建 |
| PM2 | ≥ 5.0 | 进程管理 |
| rsync | 任意 | 代码同步 |
| curl | 任意 | 健康检查 |
| sqlite3 | 任意 | 数据查询(status -v |
| NAS SMB | — | 备份目标(backup.sh |
---
## 3. 场景手册
### 场景 1:首次部署
**触发**:新机器上第一次安装 moziplus v2
```bash
# 从开发目录部署
cd ~/.openclaw/sanguo_projects/sanguo_moziplus_v2
bash scripts/deploy.sh
# 自定义安装目录
bash scripts/deploy.sh --target=/path/to/install
# 跳过前端构建(已有 dist/
bash scripts/deploy.sh --skip-build
```
**deploy.sh 执行流程**
1. 前置检查(Python/PM2/源码目录)
2. 前端构建(npm install → npm run build
3. 创建安装目录
4. rsync 同步代码(排除 data/logs/inbox/config/docs/tests
5. 确保目录结构(data/logs/inbox/config
6. 首次创建默认配置(不覆盖已有)
7. PM2 start(首次)
8. 前端 + 后端健康检查
9. 输出结果
**排除项**(不部署到生产):
- `docs/` — 设计文档只存开发目录
- `tests/` — 测试代码不需要在生产环境
- `scripts/` — 脚本从开发目录执行
- `config/` — 不覆盖用户配置
- `data/` `logs/` `inbox/` — 运行时数据
- `frontend/src/` `node_modules/` — 只需要 dist/
### 场景 2:日常升级(代码更新后)
**触发**:开发目录有代码变更,需要更新生产环境
```bash
# 标准升级(自动构建前端 + 重启)
cd ~/.openclaw/sanguo_projects/sanguo_moziplus_v2
bash scripts/deploy.sh
# 仅后端改动,跳过前端构建
bash scripts/deploy.sh --skip-build
```
**deploy.sh 自动检测**
- 安装目录已存在 → PM2 restart(而非 start
- 不覆盖 `config/``data/`
- 健康检查确认服务正常
### 场景 3:查看运行状态
```bash
# 简要状态
bash scripts/status.sh
# 详细状态(项目列表、任务数、磁盘占用)
bash scripts/status.sh -v
```
**输出示例**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
moziplus v2 — Status
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Version: v3.0.0
Install: ~/.sanguo_projects/sanguo_moziplus_v2 ✅
PM2: online ✅
PID: 19591
Restarts: 18
Memory: 49.6MB
Health: running ✅
Ticks: 106
Projects: 26
Data size: 23M
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### 场景 4:前端独立构建
**触发**:只改了前端代码,不需要完整部署
```bash
bash scripts/build-frontend.sh
# 产物在 src/frontend/dist/
# 然后用 deploy.sh --skip-build 同步
```
### 场景 5:数据备份
```bash
# 在线备份(不停服务,SQLite 可能有不一致快照,日常可接受)
bash scripts/backup.sh
# 一致性备份(停服务)
bash scripts/backup.sh --stop
# 指定 NAS 路径
bash scripts/backup.sh --nas=/Volumes/stock
```
**备份策略**
- 目标:NAS `/Volumes/stock/moziplus-v2-backups/backup-<timestamp>/`
- 内容:data/ + config/ + metadata.json
- 自动保留最近 10 个备份
- metadata.json 记录时间、版本、是否停服务
### 场景 6:数据重置
**触发**:测试数据污染、需要干净环境
```bash
# 预览(不加 --confirm 只显示会做什么)
bash scripts/reset-data.sh
# 清空所有数据
bash scripts/reset-data.sh --confirm
# 只清指定项目
bash scripts/reset-data.sh --project=demo --confirm
bash scripts/reset-data.sh --project=demo,e2e-test --confirm
```
**安全保护**
- 必须传 `--confirm`,否则只预览不执行
- 停服务 → 清数据 → 重启
- trap EXIT 确保异常时也恢复服务
- 保留 config/ 配置
### 场景 7:完全卸载
**触发**:不再使用 moziplus v2
```bash
# 预览
bash scripts/uninstall.sh
# 完全删除(含数据)
bash scripts/uninstall.sh --confirm
# 保留数据
bash scripts/uninstall.sh --confirm --keep-data
```
**安全保护**
- 必须传 `--confirm`
- `--keep-data` 将 data/ 移动到 `~/moziplus-v2-data-backup-<timestamp>/`
- PM2 delete + save
---
## 4. 典型工作流
### 日常开发 → 部署循环
```
开发目录修改代码
git commitsanguo-git-sync 自动推送到 gitee
bash scripts/deploy.sh
bash scripts/status.sh(确认正常)
继续开发 或 测试验证
```
### 版本发布
```
1. 开发目录完成功能 + 测试
2. 司马评审通过
3. 更新 pyproject.toml 版本号
4. git tag + git push
5. bash scripts/deploy.sh
6. bash scripts/backup.sh --stop(发布前备份)
7. bash scripts/status.sh -v(确认)
```
### 故障恢复
```
1. bash scripts/status.sh(确认问题)
2. pm2 logs sanguo-moziplus-v2(查看日志)
3. 如需回滚数据:从 NAS 恢复备份
4. 如需回滚代码:git revert → bash scripts/deploy.sh
5. 如 v2 不可用:pm2 stop sanguo-moziplus-v2,切回 v1(8082)
```
---
## 5. 脚本参数速查
### deploy.sh
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--source=DIR` | 开发目录 | 源码目录 |
| `--target=DIR` | `~/.sanguo_projects/sanguo_moziplus_v2` | 安装目标 |
| `--skip-build` | false | 跳过前端构建 |
### status.sh
| 参数 | 说明 |
|------|------|
| `-v, --verbose` | 显示项目详情、配置信息 |
### build-frontend.sh
无参数。自动检测 package-lock 变化并安装依赖。
### backup.sh
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--target=DIR` | 安装目录 | 数据源 |
| `--nas=DIR` | `/Volumes/stock` | NAS 挂载点 |
| `--stop` | false | 备份前停服务 |
### reset-data.sh
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--target=DIR` | 安装目录 | 目标 |
| `--project=NAME` | 全部 | 指定项目(逗号分隔) |
| `--confirm` | false | **必须传** |
### uninstall.sh
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--target=DIR` | 安装目录 | 目标 |
| `--keep-data` | false | 保留数据到备份目录 |
| `--confirm` | false | **必须传** |
---
## 6. 与旧部署文档的关系
本文档替代以下旧文档:
- `deployment-v2.6.md` §6 部署流程 → 改用 `deploy.sh`
- `deployment-v2.6-guide.md` 全文 → 改用脚本 + 本文档场景说明
- `deployment-v2.6.md` §13 运维场景手册 → 改用 `status.sh` + `backup.sh` + `reset-data.sh`
旧文档保留作为架构参考,不删除。