文档修改

This commit is contained in:
2026-05-21 16:51:27 +08:00
parent 7dbc5542de
commit ab854b2c3c
14 changed files with 116 additions and 102 deletions
+12 -12
View File
@@ -1,12 +1,12 @@
# 复盘交易系统(crypto_monitor # 复盘交易系统(crypto_monitor_user
本仓库为 **多交易所 USDT 永续** 的下单监控、关键位监控与交易复盘工具集:四个子项目分别对接 **Binance、Gate.io(主号)、Gate.io(机器人/趋势策略)、OKX**,共享相似的 Flask 架构与本地 SQLite 记账思路,可按账户独立部署、独立端口运行。 本仓库为 **多交易所 USDT 永续** 的下单监控、关键位监控与交易复盘工具集:四个子项目分别对接 **Binance、Gate.io(主号)、Gate.io(机器人/趋势策略)、OKX**,共享相似的 Flask 架构与本地 SQLite 记账思路,可按账户独立部署、独立端口运行。
**远程仓库(克隆地址)**[https://git.bz121.com/dekun/crypto_monitor.git](https://git.bz121.com/dekun/crypto_monitor.git) **远程仓库(克隆地址)**[https://git.bz121.com/dekun/crypto_monitor_user.git](https://git.bz121.com/dekun/crypto_monitor_user.git)
```bash ```bash
git clone https://git.bz121.com/dekun/crypto_monitor.git git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor cd crypto_monitor_user
``` ```
### 一键环境部署 ### 一键环境部署
@@ -73,19 +73,19 @@ cd crypto_monitor
## 五、Linux 推荐目录布局(可选) ## 五、Linux 推荐目录布局(可选)
为与仓库内《部署文档》示例一致,可将整个克隆结果置于 **`/opt/crypto_monitor/`** 下,例如: 为与仓库内《部署文档》示例一致,可将整个克隆结果置于 **`/opt/crypto_monitor_user/`** 下,例如:
- `/opt/crypto_monitor/crypto_monitor_binance` - `/opt/crypto_monitor_user/crypto_monitor_binance`
- `/opt/crypto_monitor/crypto_monitor_gate` - `/opt/crypto_monitor_user/crypto_monitor_gate`
- `/opt/crypto_monitor/crypto_monitor_gate_bot` - `/opt/crypto_monitor_user/crypto_monitor_gate_bot`
- `/opt/crypto_monitor/crypto_monitor_okx` - `/opt/crypto_monitor_user/crypto_monitor_okx`
- `/opt/crypto_monitor/manual_trading_hub` - `/opt/crypto_monitor_user/manual_trading_hub`
具体 `mkdir``venv``pm2`**SSH SOCKS** 步骤以各子目录 **《部署文档.md》** 为准。 具体 `mkdir``venv``pm2`**SSH SOCKS** 步骤以各子目录 **《部署文档.md》** 为准。
### 备份与恢复(服务器必读) ### 备份与恢复(服务器必读)
项目路径 **`/opt/crypto_monitor`**,数据备份 **`/root/backups`** 项目路径 **`/opt/crypto_monitor_user`**,数据备份 **`/root/backups`**
| 类型 | 说明 | | 类型 | 说明 |
|------|------| |------|------|
@@ -135,7 +135,7 @@ cd crypto_monitor
| 项 | 内容 | | 项 | 内容 |
|----|------| |----|------|
| 远程地址 | `https://git.bz121.com/dekun/crypto_monitor.git` | | 远程地址 | `https://git.bz121.com/dekun/crypto_monitor_user.git` |
| 说明 | 复盘交易系统(骆驼比特币私有代码仓库,Gitea) | | 说明 | 复盘交易系统(骆驼比特币私有代码仓库,Gitea) |
| 本说明 | 仓库根目录 `README.md`,仅描述结构与文档索引,不包含业务代码变更说明 | | 本说明 | 仓库根目录 `README.md`,仅描述结构与文档索引,不包含业务代码变更说明 |
@@ -7,7 +7,7 @@ TAG = "div"
PATHS = [ PATHS = [
Path(__file__).resolve().parent.parent / "templates" / "index.html", Path(__file__).resolve().parent.parent / "templates" / "index.html",
Path(r"c:\Users\dekun\Desktop\crypto_monitor\crypto_monitor_gate\templates\index.html"), Path(r"c:\Users\dekun\Desktop\crypto_monitor_user\crypto_monitor_gate\templates\index.html"),
] ]
KEY_START = " {% if page == 'key_monitor' %}" KEY_START = " {% if page == 'key_monitor' %}"
@@ -3,7 +3,7 @@
from pathlib import Path from pathlib import Path
binance = Path(__file__).resolve().parent.parent / "app.py" binance = Path(__file__).resolve().parent.parent / "app.py"
gate = Path(r"c:\Users\dekun\Desktop\crypto_monitor\crypto_monitor_gate\app.py") gate = Path(r"c:\Users\dekun\Desktop\crypto_monitor_user\crypto_monitor_gate\app.py")
b = binance.read_text(encoding="utf-8") b = binance.read_text(encoding="utf-8")
g = gate.read_text(encoding="utf-8") g = gate.read_text(encoding="utf-8")
+16 -16
View File
@@ -28,13 +28,13 @@
将包含 `app.py` 的项目放到固定目录,例如: 将包含 `app.py` 的项目放到固定目录,例如:
```bash ```bash
mkdir -p /opt/crypto_monitor mkdir -p /opt/crypto_monitor_user
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
git clone https://git.bz121.com/dekun/crypto_monitor.git git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor/crypto_monitor_binance cd crypto_monitor_user/crypto_monitor_binance
``` ```
下文用 **`/opt/crypto_monitor/crypto_monitor_binance`** 仅为示例,请换成你的实际绝对路径。 下文用 **`/opt/crypto_monitor_user/crypto_monitor_binance`** 仅为示例,请换成你的实际绝对路径。
拉取代码后,若目录下尚无 `.env`,先从模板生成(**勿**把填好密钥的 `.env` 提交 Git): 拉取代码后,若目录下尚无 `.env`,先从模板生成(**勿**把填好密钥的 `.env` 提交 Git):
@@ -100,7 +100,7 @@ curl -4 -sS --max-time 15 --proxy socks5h://127.0.0.1:1080 https://api.binance.c
## 4. Python 虚拟环境 ## 4. Python 虚拟环境
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
@@ -128,7 +128,7 @@ export PYTHONDONTWRITEBYTECODE=1
### 5.1 首次配置 ### 5.1 首次配置
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
cp -n .env.example .env # 已存在 .env 时不覆盖 cp -n .env.example .env # 已存在 .env 时不覆盖
nano .env # 填入 API、登录密码、端口、代理等 nano .env # 填入 API、登录密码、端口、代理等
@@ -168,7 +168,7 @@ cp .env .env.backup.$(date +%Y%m%d)
**一次性安装定时任务**(在对应项目目录执行,Binance / Gate 各执行一次): **一次性安装定时任务**(在对应项目目录执行,Binance / Gate 各执行一次):
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
``` ```
@@ -176,14 +176,14 @@ bash scripts/install_backup_cron.sh
Gate 实例: Gate 实例:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
``` ```
Gate Bot 实例(趋势回调等): Gate Bot 实例(趋势回调等):
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
``` ```
@@ -247,7 +247,7 @@ BINANCE_SOCKS_PROXY=socks5h://127.0.0.1:1080
在已配置 `.env` 且网络可达的前提下: 在已配置 `.env` 且网络可达的前提下:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
source .venv/bin/activate source .venv/bin/activate
python scripts/verify_binance_funding.py python scripts/verify_binance_funding.py
``` ```
@@ -263,7 +263,7 @@ python scripts/verify_binance_funding.py
3. `.env` 已按需配置 `BINANCE_SOCKS_PROXY` 3. `.env` 已按需配置 `BINANCE_SOCKS_PROXY`
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
source .venv/bin/activate source .venv/bin/activate
python app.py python app.py
``` ```
@@ -286,7 +286,7 @@ pm2 -v
在项目根目录: 在项目根目录:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
pm2 start ecosystem.config.cjs pm2 start ecosystem.config.cjs
pm2 status pm2 status
pm2 logs --lines 200 pm2 logs --lines 200
@@ -323,9 +323,9 @@ ssh -N -D 127.0.0.1:1080 bn-vps \
### 10.2 Flask ### 10.2 Flask
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_binance cd /opt/crypto_monitor_user/crypto_monitor_binance
pm2 start /opt/crypto_monitor/crypto_monitor_binance/.venv/bin/python --name crypto-monitor-binance -- \ pm2 start /opt/crypto_monitor_user/crypto_monitor_binance/.venv/bin/python --name crypto-monitor-binance -- \
/opt/crypto_monitor/crypto_monitor_binance/app.py /opt/crypto_monitor_user/crypto_monitor_binance/app.py
``` ```
--- ---
+13 -13
View File
@@ -25,13 +25,13 @@
将包含 `app.py` 的项目放到固定目录,例如: 将包含 `app.py` 的项目放到固定目录,例如:
```bash ```bash
mkdir -p /opt/crypto_monitor mkdir -p /opt/crypto_monitor_user
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
git clone https://git.bz121.com/dekun/crypto_monitor.git git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor/crypto_monitor_gate cd crypto_monitor_user/crypto_monitor_gate
``` ```
下文用 **`/opt/crypto_monitor/crypto_monitor_gate`** 仅为示例,请换成你的实际绝对路径。 下文用 **`/opt/crypto_monitor_user/crypto_monitor_gate`** 仅为示例,请换成你的实际绝对路径。
拉取代码后,若目录下尚无 `.env` 拉取代码后,若目录下尚无 `.env`
@@ -97,7 +97,7 @@ curl -4 -sS --max-time 15 --proxy socks5h://127.0.0.1:1080 https://api.gateio.ws
## 4. Python 虚拟环境 ## 4. Python 虚拟环境
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
@@ -125,7 +125,7 @@ export PYTHONDONTWRITEBYTECODE=1
### 5.1 首次配置 ### 5.1 首次配置
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
cp -n .env.example .env cp -n .env.example .env
nano .env nano .env
@@ -143,7 +143,7 @@ nano .env
与 Binance 实例相同:每天 **北京时间 0:00****`/root/backups`**,保留 **30 天** 与 Binance 实例相同:每天 **北京时间 0:00****`/root/backups`**,保留 **30 天**
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
bash scripts/backup_data.sh # 试跑 bash scripts/backup_data.sh # 试跑
@@ -185,7 +185,7 @@ GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080
3. `.env` 已含 `GATE_SOCKS_PROXY` 3. `.env` 已含 `GATE_SOCKS_PROXY`
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
source .venv/bin/activate source .venv/bin/activate
python app.py python app.py
``` ```
@@ -208,7 +208,7 @@ pm2 -v
在项目根目录: 在项目根目录:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
pm2 start ecosystem.config.cjs pm2 start ecosystem.config.cjs
pm2 status pm2 status
pm2 logs --lines 200 pm2 logs --lines 200
@@ -245,9 +245,9 @@ ssh -N -D 127.0.0.1:1080 gate-vps \
### 9.2 Flask ### 9.2 Flask
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate cd /opt/crypto_monitor_user/crypto_monitor_gate
pm2 start /opt/crypto_monitor/crypto_monitor_gate/.venv/bin/python --name crypto-monitor-gate -- \ pm2 start /opt/crypto_monitor_user/crypto_monitor_gate/.venv/bin/python --name crypto-monitor-gate -- \
/opt/crypto_monitor/crypto_monitor_gate/app.py /opt/crypto_monitor_user/crypto_monitor_gate/app.py
``` ```
--- ---
+13 -13
View File
@@ -25,13 +25,13 @@
将包含 `app.py` 的项目放到固定目录,例如: 将包含 `app.py` 的项目放到固定目录,例如:
```bash ```bash
mkdir -p /opt/crypto_monitor mkdir -p /opt/crypto_monitor_user
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
git clone https://git.bz121.com/dekun/crypto_monitor.git git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor/crypto_monitor_gate_bot cd crypto_monitor_user/crypto_monitor_gate_bot
``` ```
下文用 **`/opt/crypto_monitor/crypto_monitor_gate_bot`** 仅为示例,请换成你的实际绝对路径。 下文用 **`/opt/crypto_monitor_user/crypto_monitor_gate_bot`** 仅为示例,请换成你的实际绝对路径。
拉取代码后,若目录下尚无 `.env` 拉取代码后,若目录下尚无 `.env`
@@ -97,7 +97,7 @@ curl -4 -sS --max-time 15 --proxy socks5h://127.0.0.1:1080 https://api.gateio.ws
## 4. Python 虚拟环境 ## 4. Python 虚拟环境
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
@@ -125,7 +125,7 @@ export PYTHONDONTWRITEBYTECODE=1
### 5.1 首次配置 ### 5.1 首次配置
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
cp -n .env.example .env cp -n .env.example .env
nano .env nano .env
@@ -143,7 +143,7 @@ nano .env
每天 **北京时间 0:00** 备份到 **`/root/backups`**,保留 **30 天**`crypto.db` + `static/images`)。 每天 **北京时间 0:00** 备份到 **`/root/backups`**,保留 **30 天**`crypto.db` + `static/images`)。
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
bash scripts/backup_data.sh # 试跑 bash scripts/backup_data.sh # 试跑
@@ -219,7 +219,7 @@ TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT=5
3. `.env` 已含 `GATE_SOCKS_PROXY` 3. `.env` 已含 `GATE_SOCKS_PROXY`
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
source .venv/bin/activate source .venv/bin/activate
python app.py python app.py
``` ```
@@ -242,7 +242,7 @@ pm2 -v
在项目根目录: 在项目根目录:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
pm2 start ecosystem.config.cjs pm2 start ecosystem.config.cjs
pm2 status pm2 status
pm2 logs --lines 200 pm2 logs --lines 200
@@ -279,9 +279,9 @@ ssh -N -D 127.0.0.1:1080 gate-vps \
### 9.2 Flask ### 9.2 Flask
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_gate_bot cd /opt/crypto_monitor_user/crypto_monitor_gate_bot
pm2 start /opt/crypto_monitor/crypto_monitor_gate_bot/.venv/bin/python --name crypto-monitor-gate -- \ pm2 start /opt/crypto_monitor_user/crypto_monitor_gate_bot/.venv/bin/python --name crypto-monitor-gate -- \
/opt/crypto_monitor/crypto_monitor_gate_bot/app.py /opt/crypto_monitor_user/crypto_monitor_gate_bot/app.py
``` ```
--- ---
+28 -14
View File
@@ -1,4 +1,4 @@
# `crypto_monitor` 本地部署 + SSH SOCKS 转发 + PM2 启动指南Ubuntu # `crypto_monitor_okx` 部署指南:SSH SOCKS + OKX + PM2Ubuntu
本文面向:**本地 Ubuntu 机器运行项目**,但 **本机直连 OKX 会被 TLS/SNI reset** 的场景。解决思路是: 本文面向:**本地 Ubuntu 机器运行项目**,但 **本机直连 OKX 会被 TLS/SNI reset** 的场景。解决思路是:
@@ -23,26 +23,40 @@
--- ---
## 1. 从云服务器把项目同步到本地(推荐:打包下载) ## 1. 获取代码与目录
### 1.1 Git 克隆(推荐)
```bash
mkdir -p /opt/crypto_monitor_user
cd /opt/crypto_monitor_user
git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor_user/crypto_monitor_okx
cp -n .env.example .env # 若尚无 .env
```
下文用 **`/opt/crypto_monitor_user/crypto_monitor_okx`** 仅为示例,请换成你的实际绝对路径。
### 1.2 从云服务器打包同步到本地(可选)
在云服务器项目目录(包含 `app.py` 的目录)执行: 在云服务器项目目录(包含 `app.py` 的目录)执行:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_okx cd /opt/crypto_monitor_user/crypto_monitor_okx
# 可选:清理 Python 缓存,减少小文件传输 # 可选:清理 Python 缓存,减少小文件传输
find . -type d -name __pycache__ -prune -exec rm -rf {} + find . -type d -name __pycache__ -prune -exec rm -rf {} +
find . -type f -name "*.pyc" -delete find . -type f -name "*.pyc" -delete
tar -czf crypto_monitor.tgz . tar -czf crypto_monitor_user.tgz .
``` ```
下载 `crypto_monitor.tgz` 到本机后解压: 下载 `crypto_monitor_user.tgz` 到本机后解压:
```bash ```bash
mkdir -p /opt/crypto_monitor/crypto_monitor_okx mkdir -p /opt/crypto_monitor_user/crypto_monitor_okx
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
tar -xzf crypto_monitor.tgz -C crypto_monitor_okx tar -xzf crypto_monitor_user.tgz -C crypto_monitor_okx
cd crypto_monitor_okx cd crypto_monitor_okx
cp -n .env.example .env # 若尚无 .env cp -n .env.example .env # 若尚无 .env
``` ```
@@ -109,7 +123,7 @@ curl -4 -Iv --max-time 15 --proxy socks5h://127.0.0.1:1080 https://www.okx.com/a
在本机项目目录: 在本机项目目录:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_okx cd /opt/crypto_monitor_user/crypto_monitor_okx
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
@@ -138,7 +152,7 @@ export PYTHONDONTWRITEBYTECODE=1
### 5.1 首次配置 ### 5.1 首次配置
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_okx cd /opt/crypto_monitor_user/crypto_monitor_okx
cp -n .env.example .env # 已存在 .env 时不覆盖 cp -n .env.example .env # 已存在 .env 时不覆盖
nano .env nano .env
@@ -195,7 +209,7 @@ AI_MODEL=你的模型名
启动: 启动:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_okx cd /opt/crypto_monitor_user/crypto_monitor_okx
source .venv/bin/activate source .venv/bin/activate
python app.py python app.py
``` ```
@@ -250,10 +264,10 @@ pm2 startup
`pm2` 管理 Python 的常用方式是直接启动解释器: `pm2` 管理 Python 的常用方式是直接启动解释器:
```bash ```bash
cd /opt/crypto_monitor/crypto_monitor_okx cd /opt/crypto_monitor_user/crypto_monitor_okx
pm2 start /opt/crypto_monitor/crypto_monitor_okx/.venv/bin/python --name crypto-monitor -- \ pm2 start /opt/crypto_monitor_user/crypto_monitor_okx/.venv/bin/python --name crypto-monitor -- \
/opt/crypto_monitor/crypto_monitor_okx/app.py /opt/crypto_monitor_user/crypto_monitor_okx/app.py
``` ```
> 若项目目录与上文不一致,请替换为实际绝对路径;或用 `readlink -f app.py` 得到绝对路径。 > 若项目目录与上文不一致,请替换为实际绝对路径;或用 `readlink -f app.py` 得到绝对路径。
+2 -2
View File
@@ -7,7 +7,7 @@
双击仓库根目录 **`一键部署.bat`**,或在 PowerShell 中: 双击仓库根目录 **`一键部署.bat`**,或在 PowerShell 中:
```powershell ```powershell
cd C:\path\to\crypto_monitor cd C:\path\to\crypto_monitor_user
.\deploy\setup_env.ps1 .\deploy\setup_env.ps1
``` ```
@@ -46,7 +46,7 @@ sudo bash deploy/setup_env.sh --install-system-deps
``` ```
```bash ```bash
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
bash deploy/setup_env.sh bash deploy/setup_env.sh
bash deploy/setup_env.sh --only binance,gate bash deploy/setup_env.sh --only binance,gate
bash deploy/setup_env.sh --recreate-venv bash deploy/setup_env.sh --recreate-venv
+2 -2
View File
@@ -1,7 +1,7 @@
#Requires -Version 5.1 #Requires -Version 5.1
<# <#
.SYNOPSIS .SYNOPSIS
crypto_monitor 一键环境部署Windows PowerShell crypto_monitor_user 一键环境部署Windows PowerShell
.DESCRIPTION .DESCRIPTION
- 为各子项目创建 Python venv 并安装依赖 - 为各子项目创建 Python venv 并安装依赖
@@ -176,7 +176,7 @@ function Install-Pm2IfNeeded() {
} }
# --- main --- # --- main ---
Write-Host "crypto_monitor 环境部署" -ForegroundColor White Write-Host "crypto_monitor_user 环境部署" -ForegroundColor White
Write-Host "仓库根目录: $RepoRoot" -ForegroundColor DarkGray Write-Host "仓库根目录: $RepoRoot" -ForegroundColor DarkGray
if (-not (Test-Path $ReqFile)) { if (-not (Test-Path $ReqFile)) {
+2 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# crypto_monitor 一键环境部署(Linux / macOS / Git Bash # crypto_monitor_user 一键环境部署(Linux / macOS / Git Bash
# #
# 用法: # 用法:
# bash deploy/setup_env.sh # bash deploy/setup_env.sh
@@ -233,7 +233,7 @@ install_pm2() {
echo " 各子目录: pm2 start ecosystem.config.cjs" echo " 各子目录: pm2 start ecosystem.config.cjs"
} }
echo "crypto_monitor 环境部署" echo "crypto_monitor_user 环境部署"
echo "仓库根目录: ${REPO_ROOT}" echo "仓库根目录: ${REPO_ROOT}"
[[ -f "${REQ_FILE}" ]] || { echo "缺少 ${REQ_FILE}" >&2; exit 1; } [[ -f "${REQ_FILE}" ]] || { echo "缺少 ${REQ_FILE}" >&2; exit 1; }
@@ -22,9 +22,9 @@ chmod +x manual_trading_hub/scripts/stop_hub_screen.sh
./manual_trading_hub/scripts/stop_agents_3screen.sh ./manual_trading_hub/scripts/stop_agents_3screen.sh
``` ```
脚本默认认为:`manual_trading_hub` 的**上一级目录**里并列放着三个 `crypto_monitor_*`。若你把 hub 单独放在 `/opt/crypto_monitor/manual_trading_hub`,而策略项目在例如 `/opt/crypto_monitor/` 下的其他位置,请先执行 脚本默认认为:`manual_trading_hub` 的**上一级目录**里并列放着三个 `crypto_monitor_*`。若你把 hub 单独放在 `/opt/crypto_monitor_user/manual_trading_hub`,而策略项目在例如 `/opt/crypto_monitor_user/` 下的其他位置,请先执行
`export MANUAL_TRADING_REPO_ROOT=/opt/crypto_monitor` 再运行 `start_agents_3screen.sh` `export MANUAL_TRADING_REPO_ROOT=/opt/crypto_monitor_user` 再运行 `start_agents_3screen.sh`
启动后若 `screen -ls` 里没有 `mt-agent-*`,看日志:`tail -80 /opt/crypto_monitor/manual_trading_hub/logs/mt-agent-bn.log` 启动后若 `screen -ls` 里没有 `mt-agent-*`,看日志:`tail -80 /opt/crypto_monitor_user/manual_trading_hub/logs/mt-agent-bn.log`
### 局域网内其他电脑访问中控 ### 局域网内其他电脑访问中控
@@ -39,14 +39,14 @@ chmod +x manual_trading_hub/scripts/stop_hub_screen.sh
```bash ```bash
# 新建会话,在里面照常启动 agent 或 hub,然后按键 Ctrl+B 再按 D 脱离 # 新建会话,在里面照常启动 agent 或 hub,然后按键 Ctrl+B 再按 D 脱离
tmux new -s hub tmux new -s hub
cd /opt/crypto_monitor/manual_trading_hub && source .venv/bin/activate && python hub.py cd /opt/crypto_monitor_user/manual_trading_hub && source .venv/bin/activate && python hub.py
# Ctrl+B, D # Ctrl+B, D
tmux new -s agent-bn tmux new -s agent-bn
cd /opt/crypto_monitor/crypto_monitor_binance && set -a && source .env && set +a cd /opt/crypto_monitor_user/crypto_monitor_binance && set -a && source .env && set +a
export EXCHANGE=binance PORT=15200 HOST=127.0.0.1 export EXCHANGE=binance PORT=15200 HOST=127.0.0.1
source /opt/crypto_monitor/manual_trading_hub/.venv/bin/activate source /opt/crypto_monitor_user/manual_trading_hub/.venv/bin/activate
python /opt/crypto_monitor/manual_trading_hub/agent.py python /opt/crypto_monitor_user/manual_trading_hub/agent.py
# Ctrl+B, D # Ctrl+B, D
``` ```
@@ -57,7 +57,7 @@ python /opt/crypto_monitor/manual_trading_hub/agent.py
## 二、nohup(快速、无守护重启) ## 二、nohup(快速、无守护重启)
```bash ```bash
cd /opt/crypto_monitor/manual_trading_hub cd /opt/crypto_monitor_user/manual_trading_hub
source .venv/bin/activate source .venv/bin/activate
nohup python hub.py > /tmp/manual-hub.log 2>&1 & nohup python hub.py > /tmp/manual-hub.log 2>&1 &
``` ```
@@ -70,7 +70,7 @@ nohup python hub.py > /tmp/manual-hub.log 2>&1 &
## 三、systemd(推荐:开机自启、崩溃自动拉起) ## 三、systemd(推荐:开机自启、崩溃自动拉起)
1. 把下面两个示例里的 **`YOUR_REPO`** 改成 **`/opt/crypto_monitor`**(或你本机实际仓库根目录),`YOUR_USER` 改成 Linux 用户名。 1. 把下面两个示例里的 **`YOUR_REPO`** 改成 **`/opt/crypto_monitor_user`**(或你本机实际仓库根目录),`YOUR_USER` 改成 Linux 用户名。
2. 复制到 `/etc/systemd/system/`(需 sudo),文件名例如 `manual-hub.service``manual-agent-binance.service` 2. 复制到 `/etc/systemd/system/`(需 sudo),文件名例如 `manual-hub.service``manual-agent-binance.service`
3. 执行: 3. 执行:
@@ -150,7 +150,7 @@ ExecStart=/bin/bash -lc 'set -a; source YOUR_REPO/crypto_monitor_binance/.env; s
## 四、常见问题(子代理 / screen / 依赖) ## 四、常见问题(子代理 / screen / 依赖)
1. **`curl http://127.0.0.1:15202/status`(或其它端口)返回 `ok:false`,错误里提到 pysocks / SOCKS** 1. **`curl http://127.0.0.1:15202/status`(或其它端口)返回 `ok:false`,错误里提到 pysocks / SOCKS**
策略目录 `.env` 里配置了 `GATE_SOCKS_PROXY`(或 `BINANCE_SOCKS_PROXY``OKX_SOCKS_PROXY`)时,ccxt 需要 **PySocks**。在 **`/opt/crypto_monitor/manual_trading_hub/.venv`**(或你本机的 `manual_trading_hub/.venv`)中执行: 策略目录 `.env` 里配置了 `GATE_SOCKS_PROXY`(或 `BINANCE_SOCKS_PROXY``OKX_SOCKS_PROXY`)时,ccxt 需要 **PySocks**。在 **`/opt/crypto_monitor_user/manual_trading_hub/.venv`**(或你本机的 `manual_trading_hub/.venv`)中执行:
`pip install PySocks``pip install -r requirements.txt` `pip install PySocks``pip install -r requirements.txt`
2. **已经 `pip install PySocks`,错误文案完全不变** 2. **已经 `pip install PySocks`,错误文案完全不变**
+2 -2
View File
@@ -17,7 +17,7 @@
1. 已安装 **Python 3.10+**,且 `pip` 可用。 1. 已安装 **Python 3.10+**,且 `pip` 可用。
2. 各策略目录下已配置好交易所 API:在对应 `crypto_monitor_*` 目录执行过 **`cp .env.example .env`** 并填好密钥(与平时运行 Flask 时同一份 **`.env`**,或等价环境变量)。各项目 `app.py` 会读取同目录 `.env` 中的 **`APP_HOST` / `APP_PORT`** 用于 **Flask**;子代理使用环境变量 **`PORT`**,二者不能占用同一端口。策略目录的 **`.env` 不在 Git 中**`git pull` 不会覆盖;升级前建议在各策略目录 `cp .env .env.backup.$(date +%Y%m%d)` 2. 各策略目录下已配置好交易所 API:在对应 `crypto_monitor_*` 目录执行过 **`cp .env.example .env`** 并填好密钥(与平时运行 Flask 时同一份 **`.env`**,或等价环境变量)。各项目 `app.py` 会读取同目录 `.env` 中的 **`APP_HOST` / `APP_PORT`** 用于 **Flask**;子代理使用环境变量 **`PORT`**,二者不能占用同一端口。策略目录的 **`.env` 不在 Git 中**`git pull` 不会覆盖;升级前建议在各策略目录 `cp .env .env.backup.$(date +%Y%m%d)`
3. 本机端口 **`15200``15203`、5100**(及你各策略 `.env` 里的 `APP_PORT`)无冲突;若被占用,须改子代理 `PORT` 并同步修改 `HUB_AGENTS` 3. 本机端口 **`15200``15203`、5100**(及你各策略 `.env` 里的 `APP_PORT`)无冲突;若被占用,须改子代理 `PORT` 并同步修改 `HUB_AGENTS`
4. **Linux 路径约定(可选)**:若部署在 Ubuntu 等环境,建议将整个代码树放在 **`/opt/crypto_monitor/`** 下(与 `scripts/后台运行-Ubuntu.md` 示例一致),例如策略目录为 `/opt/crypto_monitor/crypto_monitor_binance`、中控为 `/opt/crypto_monitor/manual_trading_hub` 4. **Linux 路径约定(可选)**:若部署在 Ubuntu 等环境,建议将整个代码树放在 **`/opt/crypto_monitor_user/`** 下(与 `scripts/后台运行-Ubuntu.md` 示例一致),例如策略目录为 `/opt/crypto_monitor_user/crypto_monitor_binance`、中控为 `/opt/crypto_monitor_user/manual_trading_hub`
--- ---
@@ -192,7 +192,7 @@ Windows 可将 `hub.py` 与各 `agent.py` 写入「启动」文件夹,或使
| `/status``ok:false`,文案含 **pysocks** / **SOCKS** | 使用 SOCKS 代理但未装 **PySocks** | 在 **`manual_trading_hub/.venv`** 执行 `pip install PySocks``pip install -r requirements.txt` | | `/status``ok:false`,文案含 **pysocks** / **SOCKS** | 使用 SOCKS 代理但未装 **PySocks** | 在 **`manual_trading_hub/.venv`** 执行 `pip install PySocks``pip install -r requirements.txt` |
| **已安装 PySocks**`/status` 仍报同样 pysocks 文案 | 子代理进程未重启 | 子代理是常驻进程,**仅 pip 不会替换已运行进程**;退出对应 screen / systemd 单元后重新拉起(Ubuntu 见 `scripts/后台运行-Ubuntu.md` §四) | | **已安装 PySocks**`/status` 仍报同样 pysocks 文案 | 子代理进程未重启 | 子代理是常驻进程,**仅 pip 不会替换已运行进程**;退出对应 screen / systemd 单元后重新拉起(Ubuntu 见 `scripts/后台运行-Ubuntu.md` §四) |
| 跑 `start_agents_3screen.sh` 无新会话 | screen 会话已存在被脚本跳过 | 先 `stop_agents_3screen.sh`,或 `screen -S mt-agent-xxx -X quit` 后再启动 | | 跑 `start_agents_3screen.sh` 无新会话 | screen 会话已存在被脚本跳过 | 先 `stop_agents_3screen.sh`,或 `screen -S mt-agent-xxx -X quit` 后再启动 |
| 子代理行为异常、依赖已装仍报错 | 实际用的不是 hub 的 venv | `ps aux` 查看命令行,应为 **`/opt/crypto_monitor/manual_trading_hub/.venv/bin/python`** `…/manual_trading_hub/agent.py`(路径按你机器实际根目录调整);否则在**当前使用的解释器**对应环境中装依赖,或改用官方脚本启动 | | 子代理行为异常、依赖已装仍报错 | 实际用的不是 hub 的 venv | `ps aux` 查看命令行,应为 **`/opt/crypto_monitor_user/manual_trading_hub/.venv/bin/python`** `…/manual_trading_hub/agent.py`(路径按你机器实际根目录调整);否则在**当前使用的解释器**对应环境中装依赖,或改用官方脚本启动 |
| 子代理端口与 Flask 抢端口 | `PORT` 与策略目录 `.env``APP_PORT` 相同 | 子代理用 **1520015203**(或自改),Flask 继续用 `APP_PORT`,二者勿重复 | | 子代理端口与 Flask 抢端口 | `PORT` 与策略目录 `.env``APP_PORT` 相同 | 子代理用 **1520015203**(或自改),Flask 继续用 `APP_PORT`,二者勿重复 |
| 全平失败 | 持仓模式、精度、交易所维护 | 看返回 JSON 中 `errors` 字段;对照交易所 App | | 全平失败 | 持仓模式、精度、交易所维护 | 看返回 JSON 中 `errors` 字段;对照交易所 App |
+1 -1
View File
@@ -2,7 +2,7 @@
chcp 65001 >nul chcp 65001 >nul
setlocal setlocal
cd /d "%~dp0" cd /d "%~dp0"
echo crypto_monitor 一键环境部署 ... echo crypto_monitor_user 一键环境部署 ...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0deploy\setup_env.ps1" %* powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0deploy\setup_env.ps1" %*
set ERR=%ERRORLEVEL% set ERR=%ERRORLEVEL%
if not "%ERR%"=="0" ( if not "%ERR%"=="0" (
+13 -13
View File
@@ -1,6 +1,6 @@
# 备份与恢复(Ubuntu 服务器) # 备份与恢复(Ubuntu 服务器)
本文档面向 **VPS / Ubuntu**,项目统一放在 **`/opt/crypto_monitor`**,数据备份统一放在 **`/root/backups`**。 本文档面向 **VPS / Ubuntu**,项目统一放在 **`/opt/crypto_monitor_user`**,数据备份统一放在 **`/root/backups`**。
| 类型 | 内容 | 存放位置 | 频率 | | 类型 | 内容 | 存放位置 | 频率 |
|------|------|----------|------| |------|------|----------|------|
@@ -20,7 +20,7 @@
apt install -y sqlite3 2>/dev/null || true apt install -y sqlite3 2>/dev/null || true
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
cd "/opt/crypto_monitor/${dir}" || exit 1 cd "/opt/crypto_monitor_user/${dir}" || exit 1
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
bash scripts/backup_data.sh bash scripts/backup_data.sh
@@ -51,7 +51,7 @@ ls -la /root/backups/*/
```bash ```bash
INSTANCE=crypto_monitor_binance INSTANCE=crypto_monitor_binance
cd "/opt/crypto_monitor/${INSTANCE}" cd "/opt/crypto_monitor_user/${INSTANCE}"
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh bash scripts/install_backup_cron.sh
bash scripts/backup_data.sh bash scripts/backup_data.sh
@@ -68,7 +68,7 @@ bash scripts/backup_data.sh
```bash ```bash
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
echo ">>> ${dir}" echo ">>> ${dir}"
bash "/opt/crypto_monitor/${dir}/scripts/backup_data.sh" bash "/opt/crypto_monitor_user/${dir}/scripts/backup_data.sh"
done done
ls -la /root/backups/*/*/ ls -la /root/backups/*/*/
``` ```
@@ -95,8 +95,8 @@ tail -n 20 /var/log/crypto-monitor-backup-crypto_monitor_gate_bot.log
```bash ```bash
DATE=$(TZ=Asia/Shanghai date +%Y%m%d) DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
src="/opt/crypto_monitor/${dir}/.env" src="/opt/crypto_monitor_user/${dir}/.env"
dst="/opt/crypto_monitor/${dir}/.env.backup.${DATE}" dst="/opt/crypto_monitor_user/${dir}/.env.backup.${DATE}"
if [ -f "$src" ]; then if [ -f "$src" ]; then
cp -a "$src" "$dst" cp -a "$src" "$dst"
echo "ok: $dst" echo "ok: $dst"
@@ -112,7 +112,7 @@ done
DATE=$(TZ=Asia/Shanghai date +%Y%m%d) DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
mkdir -p /root/backups/env mkdir -p /root/backups/env
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
src="/opt/crypto_monitor/${dir}/.env" src="/opt/crypto_monitor_user/${dir}/.env"
if [ -f "$src" ]; then if [ -f "$src" ]; then
cp -a "$src" "/root/backups/env/${dir}.env.${DATE}" cp -a "$src" "/root/backups/env/${dir}.env.${DATE}"
echo "ok: /root/backups/env/${dir}.env.${DATE}" echo "ok: /root/backups/env/${dir}.env.${DATE}"
@@ -134,7 +134,7 @@ ls -la /root/backups/env/
```bash ```bash
INSTANCE=crypto_monitor_binance INSTANCE=crypto_monitor_binance
DATE=20260517 DATE=20260517
cd "/opt/crypto_monitor/${INSTANCE}" cd "/opt/crypto_monitor_user/${INSTANCE}"
cp -a ".env.backup.${DATE}" .env cp -a ".env.backup.${DATE}" .env
echo "restored .env from .env.backup.${DATE}" echo "restored .env from .env.backup.${DATE}"
``` ```
@@ -144,7 +144,7 @@ echo "restored .env from .env.backup.${DATE}"
```bash ```bash
INSTANCE=crypto_monitor_binance INSTANCE=crypto_monitor_binance
DATE=20260517 DATE=20260517
cp -a "/root/backups/env/${INSTANCE}.env.${DATE}" "/opt/crypto_monitor/${INSTANCE}/.env" cp -a "/root/backups/env/${INSTANCE}.env.${DATE}" "/opt/crypto_monitor_user/${INSTANCE}/.env"
echo "restored from /root/backups/env/${INSTANCE}.env.${DATE}" echo "restored from /root/backups/env/${INSTANCE}.env.${DATE}"
``` ```
@@ -170,7 +170,7 @@ pm2 restart crypto-monitor-gate-bot
INSTANCE=crypto_monitor_binance INSTANCE=crypto_monitor_binance
DATE=2026-05-17 DATE=2026-05-17
BK="/root/backups/${INSTANCE}/${DATE}" BK="/root/backups/${INSTANCE}/${DATE}"
PROJ="/opt/crypto_monitor/${INSTANCE}" PROJ="/opt/crypto_monitor_user/${INSTANCE}"
test -f "${BK}/crypto.db" || { echo "backup not found: ${BK}"; exit 1; } test -f "${BK}/crypto.db" || { echo "backup not found: ${BK}"; exit 1; }
@@ -198,12 +198,12 @@ DATE=$(TZ=Asia/Shanghai date +%Y%m%d)
mkdir -p /root/backups/env mkdir -p /root/backups/env
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
PROJ="/opt/crypto_monitor/${dir}" PROJ="/opt/crypto_monitor_user/${dir}"
[ -f "${PROJ}/.env" ] && cp -a "${PROJ}/.env" "/root/backups/env/${dir}.env.${DATE}" [ -f "${PROJ}/.env" ] && cp -a "${PROJ}/.env" "/root/backups/env/${dir}.env.${DATE}"
bash "${PROJ}/scripts/backup_data.sh" 2>/dev/null || true bash "${PROJ}/scripts/backup_data.sh" 2>/dev/null || true
done done
cd /opt/crypto_monitor cd /opt/crypto_monitor_user
git pull git pull
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
@@ -250,7 +250,7 @@ pm2 restart all
```bash ```bash
for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do for dir in crypto_monitor_binance crypto_monitor_gate crypto_monitor_gate_bot; do
SCRIPT="/opt/crypto_monitor/${dir}/scripts/backup_data.sh" SCRIPT="/opt/crypto_monitor_user/${dir}/scripts/backup_data.sh"
crontab -l 2>/dev/null | grep -vF "$SCRIPT" | crontab - crontab -l 2>/dev/null | grep -vF "$SCRIPT" | crontab -
done done
crontab -l crontab -l