7.4 KiB
7.4 KiB
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
# 从开发目录部署
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 执行流程:
- 前置检查(Python/PM2/源码目录)
- 前端构建(npm install → npm run build)
- 创建安装目录
- rsync 同步代码(排除 data/logs/inbox/config/docs/tests)
- 确保目录结构(data/logs/inbox/config)
- 首次创建默认配置(不覆盖已有)
- PM2 start(首次)
- 前端 + 后端健康检查
- 输出结果
排除项(不部署到生产):
docs/— 设计文档只存开发目录tests/— 测试代码不需要在生产环境scripts/— 脚本从开发目录执行config/— 不覆盖用户配置data/logs/inbox/— 运行时数据frontend/src/node_modules/— 只需要 dist/
场景 2:日常升级(代码更新后)
触发:开发目录有代码变更,需要更新生产环境
# 标准升级(自动构建前端 + 重启)
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 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 scripts/build-frontend.sh
# 产物在 src/frontend/dist/
# 然后用 deploy.sh --skip-build 同步
场景 5:数据备份
# 在线备份(不停服务,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:数据重置
触发:测试数据污染、需要干净环境
# 预览(不加 --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 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.shdeployment-v2.6-guide.md全文 → 改用脚本 + 本文档场景说明deployment-v2.6.md§13 运维场景手册 → 改用status.sh+backup.sh+reset-data.sh
旧文档保留作为架构参考,不删除。