# Plan B：整目录重装（生产清库）

适用于：**保留三所 `.env` 与中控配置，丢弃旧代码、旧 SQLite、脏 PM2 名单**（例如移除 `gate_bot` 后偶发重启）。

与 **[setup_env.sh](./setup_env.sh)** 的关系：

| 脚本 | 用途 |
|------|------|
| `setup_env.sh` | **首次安装 / 日常**：建 venv、装依赖、从 `.env.example` 复制（**不变**） |
| `reinstall.sh` | **整目录重装**：备份 → 移走旧目录 → `git clone` → 调 `setup_env.sh` → 恢复配置 → PM2 |

---

## 一键执行（推荐）

在现有服务器安装上以 **root** 执行：

```bash
cd /opt/crypto_monitor
bash deploy/reinstall.sh --yes
```

交互确认（不加 `--yes`）：

```bash
bash deploy/reinstall.sh
```

仅预览步骤：

```bash
bash deploy/reinstall.sh --dry-run
```

---

## 脚本会做什么

1. 备份到 **`/root/backups/pre-reinstall-YYYYMMDD-HHMMSS/`**
   - 三所 `crypto_monitor_*/.env`
   - `manual_trading_hub/.env`
   - `manual_trading_hub/hub_settings.json`（若有）
   - 可选：仓库内 `one_shot` 备份目录
2. **`pm2 stop all` + `pm2 delete all`**
3. **`mv /opt/crypto_monitor /opt/crypto_monitor.old.时间戳`**
4. **`git clone`** 到 `/opt/crypto_monitor`（默认 `main`）
5. **`bash deploy/setup_env.sh --skip-env-copy --recreate-venv --skip-pm2`**
6. 从备份 **恢复 `.env` / `hub_settings.json`**
7. **`deploy/sanitize_hub_settings.py`** 去掉 `gate_bot` / 第四账户
8. **`deploy/pm2_start_all.sh`** + `pm2 save`
9. 为三所重装 **每日 0 点备份 cron**（可用 `--no-backup-cron` 跳过）

**不会备份/恢复**：`crypto.db`、hub `data/*.db`、`static/images`（符合「全新启动」）。

**不会动**：宝塔/Nginx 反代、SSH SOCKS 隧道（tmux 内）。

---

## 环境变量

```bash
export INSTALL_ROOT=/opt/crypto_monitor
export GIT_URL=https://git.bz121.com/dekun/crypto_monitor.git
export GIT_BRANCH=main
export BACKUP_ROOT=/root/backups
bash deploy/reinstall.sh --yes
```

---

## 验收

```bash
pm2 list
# 应有 7 个: crypto_binance crypto_gate crypto_okx manual-trading-hub manual-agent-*

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5100/
```

浏览器：中控 `/monitor` 登录，三所 LINK 绿，监控区为空库。

---

## 回滚

旧目录默认保留为 `/opt/crypto_monitor.old.时间戳`，配置在 `/root/backups/pre-reinstall-*`：

```bash
pm2 delete all
rm -rf /opt/crypto_monitor
mv /opt/crypto_monitor.old.XXXXXXXX /opt/crypto_monitor
bash /opt/crypto_monitor/deploy/pm2_start_all.sh
```

确认新环境稳定后再删 `.old.*` 目录。

---

## 辅助脚本

| 文件 | 说明 |
|------|------|
| [pm2_start_all.sh](./pm2_start_all.sh) | 按顺序 PM2 启动三所 + hub（setup_env 之后手动用） |
| [sanitize_hub_settings.py](./sanitize_hub_settings.py) | 清理 `hub_settings.json` 中 gate_bot 条目 |

---

## 相关文档

- [deploy/README.md](./README.md) — 首次一键安装
- [docs/ubuntu-server.md](../docs/ubuntu-server.md) — Python / PM2 版本
- [备份与恢复.md](../备份与恢复.md) — 日常 DB 备份 cron
