auto-sync: 2026-05-22 18:37:17
This commit is contained in:
@@ -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 commit(sanguo-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`
|
||||
|
||||
旧文档保留作为架构参考,不删除。
|
||||
Reference in New Issue
Block a user