# 环境一键部署（Ubuntu / root /opt）

在 **`/opt/crypto_monitor`** 下以 **root** 为各子项目创建 Python **`.venv`**、安装依赖、从 `.env.example` 生成 `.env`（不覆盖已有），并可选安装 **PM2**。

完整系统要求（Python / Node / PM2 版本、启动顺序）见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。

---

## 前置条件

- **Ubuntu 22.04 / 24.04**，用户 **root**
- 已安装 **git**，仓库位于 **`/opt/crypto_monitor`**

```bash
apt update
apt install -y python3 python3-pip python3-venv curl git ca-certificates
# Node 20 + PM2 见 docs/ubuntu-server.md §3
```

---

## 一键执行

```bash
cd /opt/crypto_monitor
bash deploy/setup_env.sh --install-system-deps
```

常用参数：

```bash
bash deploy/setup_env.sh --only binance,gate_bot    # 仅部分子项目
bash deploy/setup_env.sh --recreate-venv            # 重建虚拟环境
bash deploy/setup_env.sh --skip-pm2                 # 不尝试安装 pm2
bash deploy/setup_env.sh --skip-env-copy            # 不复制 .env.example
```

若在其它环境编辑过脚本后报 `pipefail` 错误，先转 LF：

```bash
sed -i 's/\r$//' deploy/setup_env.sh
```

---

## 脚本会做什么

| 步骤 | 说明 |
|------|------|
| 检查 Python | 需要 **3.10+** |
| `crypto_monitor_*` | 各目录 `.venv` + `pip install -r ../requirements.txt` |
| `manual_trading_hub` | 独立 `requirements.txt` |
| `.env` | 不存在则从 `.env.example` 复制 |
| 目录 | `static/images`、`static/images/order_charts` |
| PM2 | 已装 Node 时 `npm install -g pm2` |

---

## 部署之后

1. 编辑各子目录 **`.env`**（API、登录密码、SOCKS、AI 复盘等）。
2. **仅用 PM2 常驻**（见 [docs/ubuntu-server.md](../docs/ubuntu-server.md) §3）：

   ```bash
   cd /opt/crypto_monitor/crypto_monitor_binance && pm2 start ecosystem.config.cjs
   # … 其余三所 …
   cd /opt/crypto_monitor/manual_trading_hub && pm2 start ecosystem.config.cjs
   pm2 save
   ```

3. 四所 `.env` 同步脚本见 **[docs/env-sync-scripts.md](../docs/env-sync-scripts.md)**。

---

## 依赖说明

- 四个监控子项目共用根目录 **[requirements.txt](../requirements.txt)**。
- 走 SOCKS 须 **PySocks**（已包含在 requirements 中）。
