Files
sanguo_moziplus_v2/docs/design/deployment-scripts.md
T
cfdaily 0d7425b88c
Deploy / ci (push) Waiting to run
Deploy / deploy (push) Blocked by required conditions
Deploy / notify-deploy-failure (push) Blocked by required conditions
auto-sync: 2026-06-07 01:35:53
2026-06-07 01:35:53 +08:00

293 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
旧文档保留作为架构参考,不删除。