From 1282293e91e61484b96f1db8aff3e860e9c71ebe Mon Sep 17 00:00:00 2001 From: dekun Date: Thu, 4 Jun 2026 11:48:54 +0800 Subject: [PATCH] docs: unify Ubuntu root /opt PM2 deployment and refresh README Add docs/ubuntu-server.md; remove Windows and alternate process managers from deployment guides; index strategy, key monitor, TP/SL, breakeven, and replay docs in root README. Co-authored-by: Cursor --- README.md | 168 +++++---------- crypto_monitor_binance/README.md | 23 +- crypto_monitor_binance/部署文档.md | 6 +- crypto_monitor_gate/README.md | 20 +- crypto_monitor_gate/部署文档.md | 6 +- crypto_monitor_gate_bot/部署文档.md | 8 +- crypto_monitor_okx/README.md | 10 +- crypto_monitor_okx/部署文档.md | 4 +- deploy/README.md | 123 ++++------- deploy/setup_env.sh | 5 +- docs/ubuntu-server.md | 160 ++++++++++++++ manual_trading_hub/README.md | 3 +- manual_trading_hub/scripts/后台运行-Ubuntu.md | 201 ++---------------- manual_trading_hub/使用说明.md | 87 +++----- manual_trading_hub/部署文档.md | 15 +- 策略交易说明.md | 7 +- 16 files changed, 355 insertions(+), 491 deletions(-) create mode 100644 docs/ubuntu-server.md diff --git a/README.md b/README.md index c45b0ca..0a40a7e 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,85 @@ # 复盘交易系统(crypto_monitor) -本仓库为 **多交易所 USDT 永续** 的下单监控、关键位监控与交易复盘工具集:四个子项目分别对接 **Binance、Gate.io(主号)、Gate.io(机器人/趋势策略)、OKX**,共享相似的 Flask 架构与本地 SQLite 记账思路,可按账户独立部署、独立端口运行。 +多交易所 **USDT 永续** 的下单监控、**关键位**、**策略交易**、**止盈止损 / 移动保本** 与 **AI 复盘**,四所独立部署 + 可选 **中控** 聚合监控。 -**远程仓库(克隆地址)**:[https://git.bz121.com/dekun/crypto_monitor.git](https://git.bz121.com/dekun/crypto_monitor.git) +**远程仓库**:[https://git.bz121.com/dekun/crypto_monitor.git](https://git.bz121.com/dekun/crypto_monitor.git) + +--- + +## 部署环境(必读) + +| 项 | 约定 | +|----|------| +| 系统 | **Ubuntu 22.04 / 24.04** | +| 用户 | **root** | +| 路径 | **`/opt/crypto_monitor`** | +| 进程 | **PM2**(唯一推荐的常驻方式) | + +**环境详解**(Python 3.10+、Node、PM2 安装与启动顺序):**[docs/ubuntu-server.md](./docs/ubuntu-server.md)** +**一键 venv**:`bash deploy/setup_env.sh` → **[deploy/README.md](./deploy/README.md)** ```bash -git clone https://git.bz121.com/dekun/crypto_monitor.git -cd crypto_monitor +cd /opt +git clone https://git.bz121.com/dekun/crypto_monitor.git crypto_monitor +cd /opt/crypto_monitor +bash deploy/setup_env.sh --install-system-deps ``` -### 一键环境部署 - -| 系统 | 命令 | -|------|------| -| **Windows** | 双击根目录 **`一键部署.bat`**,或 `.\deploy\setup_env.ps1` | -| **Linux / macOS** | `bash deploy/setup_env.sh` | - -会为各子项目创建 `.venv`、安装依赖、从 `.env.example` 生成 `.env`(不覆盖已有)。详见 **[deploy/README.md](./deploy/README.md)**。 - -四所 `.env` 同步脚本(计仓 + 自动划转):见 **[docs/env-sync-scripts.md](./docs/env-sync-scripts.md)**。 -计仓模式(以损定仓 / 全仓杠杆):见 **[docs/position-sizing-mode.md](./docs/position-sizing-mode.md)**。 -每日自动划转(双向归集至目标 U):见 **[docs/auto-transfer-daily.md](./docs/auto-transfer-daily.md)**。 -Chrome 快捷方式图标:见 **[docs/shortcut-icon.md](./docs/shortcut-icon.md)**。 +配置与运维脚本: **[docs/env-sync-scripts.md](./docs/env-sync-scripts.md)** · **[备份与恢复.md](./备份与恢复.md)** --- -## 一、仓库目录一览 +## 功能导航 -| 目录 | 交易所 / 角色 | 说明文档 | -|------|-----------------|----------| -| `crypto_monitor_binance/` | Binance USDT-M 永续 | [部署文档.md](./crypto_monitor_binance/部署文档.md) · [README.md](./crypto_monitor_binance/README.md) | -| `crypto_monitor_gate/` | Gate.io 永续(主号) | [部署文档.md](./crypto_monitor_gate/部署文档.md) | -| `crypto_monitor_gate_bot/` | Gate.io 永续(机器人;含趋势回调等) | [部署文档.md](./crypto_monitor_gate_bot/部署文档.md) · [趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md) · [策略交易说明.md](./策略交易说明.md) | -| `crypto_monitor_okx/` | OKX 永续(功能对齐币安) | [部署文档.md](./crypto_monitor_okx/部署文档.md) · [使用说明.md](./crypto_monitor_okx/使用说明.md) · [README.md](./crypto_monitor_okx/README.md) | -| `manual_trading_hub/` | 多账户中控(监控 + **行情 K 线** + 紧急全平 + 登录;**不在中控网页下单**) | [README.md](./manual_trading_hub/README.md) · [使用说明.md](./manual_trading_hub/使用说明.md) · [行情区说明.md](./manual_trading_hub/行情区说明.md) · [部署文档.md](./manual_trading_hub/部署文档.md) · [常见问题.md](./manual_trading_hub/常见问题.md) | -| 根目录 `strategy_*.py` | **策略交易**(趋势回调 + 顺势加仓共用逻辑) | [策略交易说明.md](./策略交易说明.md) | -| 根目录 `ai_client.py` | **AI 复盘**(OpenAI 兼容网关 / Ollama 二选一) | [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md) | +| 功能 | 说明 | 文档 | +|------|------|------| +| **关键位监控** | 箱体/收敛自动开仓、阻力支撑提醒、斐波限价;止盈止损方案与 **移动保本** 开关 | 各所 [关键位自动下单说明.md](./crypto_monitor_binance/关键位自动下单说明.md)(Gate/OKX 目录内同名);方案细则 **[关键位止盈止损与移动保本更新说明.md](./关键位止盈止损与移动保本更新说明.md)** | +| **实盘下单 / 下单监控** | 首仓、以损定仓;监控内 **止盈 / 止损**、**移动保本**(步进 R、偏移%) | 各所 [使用说明.md](./crypto_monitor_binance/使用说明.md) · 顶栏「实盘下单」`/trade` | +| **策略交易** | **趋势回调** + **顺势加仓**(`/strategy` 双栏) | **[策略交易说明.md](./策略交易说明.md)** · 趋势细则 [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md) | +| **策略交易记录** | 已结束计划快照(最近 100 条)、筛选与展开详情 | [策略交易说明.md §五](./策略交易说明.md) · 顶栏 `/strategy/records` | +| **交易复盘** | 平仓记录、错过机会、图表;**AI 点评** | **[AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md)** · 顶栏「交易记录与复盘」`/records` | +| **中控** | 多账户持仓/委托聚合、行情 K 线、紧急全平(**不在中控网页下单**) | [manual_trading_hub/使用说明.md](./manual_trading_hub/使用说明.md) · [部署文档.md](./manual_trading_hub/部署文档.md) | -前四列为四个 **`crypto_monitor_*`** 交易/监控应用;`manual_trading_hub` 与四者 **进程独立**,无需改四者代码即可并行使用。 +其它专题:[计仓模式](./docs/position-sizing-mode.md) · [每日自动划转](./docs/auto-transfer-daily.md) · [Chrome 快捷方式图标](./docs/shortcut-icon.md) --- -## 二、四个 `crypto_monitor_*` 子项目:共同点 +## 仓库目录 -- **技术栈**:Python 3.10+、`Flask` Web、`ccxt` 调交易所 API、本地 SQLite(默认 `crypto.db`)等。 -- **能力类型**(各所细节见各自 README / 部署文档): - - **关键位监控**、**下单监控**(含风控与移动保本等逻辑)、**交易复盘**(AI 点评,见 [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md)); - - **策略交易**(顶栏 `/strategy`:趋势回调 + 顺势加仓双栏,四所共用根目录逻辑,见 [策略交易说明.md](./策略交易说明.md)); - - **实盘(可选)**:在对应 `.env` 中开启 `LIVE_TRADING_ENABLED=true` 并配置各所 API 后,由程序发起真实委托(请务必理解风险并做好权限与 IP 白名单控制)。 -- **网络**:若本机直连交易所不稳定,可通过 **SSH 动态转发 SOCKS** 或 HTTP/S 代理;经 SOCKS 时依赖中需包含 **`PySocks`**(各《部署文档》中有说明)。 -- **进程托管**:Linux 上常用 **PM2** 托管 `app.py`;各目录内一般有 `ecosystem.config.cjs` 或文档中的等价命令。 +| 目录 | 交易所 / 角色 | 部署文档 | +|------|----------------|----------| +| `crypto_monitor_binance/` | Binance U 本位永续 | [部署文档.md](./crypto_monitor_binance/部署文档.md) | +| `crypto_monitor_gate/` | Gate 主号 | [部署文档.md](./crypto_monitor_gate/部署文档.md) | +| `crypto_monitor_gate_bot/` | Gate 机器人 / 趋势户 | [部署文档.md](./crypto_monitor_gate_bot/部署文档.md) | +| `crypto_monitor_okx/` | OKX 永续 | [部署文档.md](./crypto_monitor_okx/部署文档.md) | +| `manual_trading_hub/` | 中控 + 子代理 | [部署文档.md](./manual_trading_hub/部署文档.md) | +| 根目录 `strategy_*.py` | 策略共用库 | [策略交易说明.md](./策略交易说明.md) | +| 根目录 `key_*_lib.py` | 关键位 / 止盈止损共用库 | [关键位止盈止损与移动保本更新说明.md](./关键位止盈止损与移动保本更新说明.md) | --- -## 三、四个子项目:差异速查 +## 技术要点 -| 项目 | 环境变量前缀(示例) | 典型用途区分 | -|------|----------------------|--------------| -| `crypto_monitor_binance` | `BINANCE_*` | 币安 U 本位永续;止盈止损以 `STOP_MARKET` / `TAKE_PROFIT_MARKET` 等与币安规则对齐 | -| `crypto_monitor_gate` | `GATE_*` | Gate 主账户监控与交易页面 | -| `crypto_monitor_gate_bot` | `GATE_*` | Gate 侧 **独立子账户 / 机器人**;文档中含 **趋势回调** 等策略说明 | -| `crypto_monitor_okx` | `OKX_*` | OKX 永续;需 API Key / Secret / Passphrase | - -各目录根下: - -- **`.env.example`**:配置模板(**可** `git pull` 同步),新机执行 `cp .env.example .env` 后编辑。 -- **`.env`**:本机真实配置(**勿**提交 Git);`app.py` 只读此文件。`git pull` **不会**覆盖 `.env`;升级前建议 `cp .env .env.backup.$(date +%Y%m%d)`。 - -变量名以前缀区分,**不可混用**(例如在 Gate 项目中写 OKX 变量会导致代理与密钥不生效)。 +- **Python 3.10+**、Flask、ccxt、SQLite(`crypto.db`) +- 四所 `.env` 前缀不同(`BINANCE_*` / `GATE_*` / `OKX_*`),**不可混用** +- 实盘须 `LIVE_TRADING_ENABLED=true` 且理解 API 权限与 IP 白名单风险 +- 经 **SOCKS** 访问交易所时配置各所 `*_SOCKS_PROXY` 并安装 PySocks --- -## 四、与 `manual_trading_hub` 的关系(可选) +## 推荐阅读顺序 -- **中控** `hub.py`(`:5100`):多账户 **监控聚合**、**行情 K 线**(`/market`)、**紧急全平**、系统设置;可选 **用户名+密码** 登录(反代公网时务必配置)。 -- **子代理** `agent.py`:每账户一进程,默认 **`15200`~`15203`**,与四所 Flask **`APP_PORT`**(5000/5001/5002/5004)**必须错开**。 -- **下单、关键位、策略交易、复盘**:在各 `crypto_monitor_*` 原网页操作(中控 **「实例」** / **「复盘」**);中控**已移除下单区**。增加子账户见 [manual_trading_hub/使用说明.md §4.3](./manual_trading_hub/使用说明.md#43-增加账户例如再挂一个-gate)。 -- 账户列表由 **`hub_settings.json`**(网页「系统设置」)维护,**不再使用** `HUB_AGENTS`。 -- 部署与排障:[manual_trading_hub/README.md](./manual_trading_hub/README.md)、[常见问题.md](./manual_trading_hub/常见问题.md)。 +1. [docs/ubuntu-server.md](./docs/ubuntu-server.md) — 装 Python / Node / PM2,PM2 启动四所 + 中控 +2. 各所 **`.env`**(从 `.env.example` 复制) +3. 所用功能对应上表 **功能导航** 文档 +4. [备份与恢复.md](./备份与恢复.md) — 生产机备份习惯 --- -## 五、Linux 推荐目录布局(可选) +## 安全 -为与仓库内《部署文档》示例一致,可将整个克隆结果置于 **`/opt/crypto_monitor/`** 下,例如: +- **勿** 将 `.env`、API Secret、`.pem` 提交 Git +- 公网暴露中控须配置登录、`HUB_BRIDGE_TOKEN`、HTTPS Cookie +- 实盘风险由使用者自行承担 -- `/opt/crypto_monitor/crypto_monitor_binance` -- `/opt/crypto_monitor/crypto_monitor_gate` -- `/opt/crypto_monitor/crypto_monitor_gate_bot` -- `/opt/crypto_monitor/crypto_monitor_okx` -- `/opt/crypto_monitor/manual_trading_hub` - -具体 `mkdir`、`venv`、`pm2` 与 **SSH SOCKS** 步骤以各子目录 **《部署文档.md》** 为准。 - -### 备份与恢复(服务器必读) - -项目路径 **`/opt/crypto_monitor`**,数据备份 **`/root/backups`**: - -| 类型 | 说明 | -|------|------| -| **数据库 + 复盘图片** | 每天北京时间 0:00 自动备份,保留 30 天 | -| **`.env`** | 升级 / 改配置前手动备份与恢复 | - -**一键复制命令(Ubuntu SSH)** 见根目录 **[备份与恢复.md](./备份与恢复.md)**:含安装 cron、手动备份、`.env` 备份/恢复、从备份还原数据库等整段脚本。 - ---- - -## 六、推荐阅读顺序 - -1. 克隆本仓库后,执行 **一键环境部署**(上表),或手动在各子目录 `python -m venv .venv` 与 `pip install`。 -2. 根据实际交易所进入对应 **`crypto_monitor_*`** 目录,编辑 **`.env`**(填入 API 与密码等;部署脚本已可从 `.env.example` 复制)。 -3. 阅读该目录下的 **《部署文档.md》**(Ubuntu / PM2 / 代理 / 升级说明)。 -4. 服务器部署完成后,按 **[备份与恢复.md](./备份与恢复.md)** 配置自动备份与 `.env` 备份习惯。 -5. 需要 **策略交易**(趋势回调 / 顺势加仓)时,阅读 [策略交易说明.md](./策略交易说明.md);趋势细则另见 [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md)。 -6. 需要 **AI 复盘**(OpenAI 网关或 Ollama)时,阅读 [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md),并在各所 `.env` 配置 `AI_PROVIDER` 等。 -7. 需要 **多账户一块看 + 紧急全平** 时,阅读 [manual_trading_hub](./manual_trading_hub/) 下 [使用说明](./manual_trading_hub/使用说明.md)、[部署文档](./manual_trading_hub/部署文档.md);遇问题先查 [常见问题](./manual_trading_hub/常见问题.md)。 - ---- - -## 七、安全与合规 - -- **切勿**将 `.env`、`.env.backup*`、API Secret、SSH 私钥 `.pem` 等提交到版本库或公开渠道;仅 **`.env.example`** 可提交(占位符,无真实密钥)。 - -### 从旧版仓库升级(曾把 `.env` 提交进 Git) - -在 **`git pull` 之前**按 **[备份与恢复.md](./备份与恢复.md)** 备份 `.env` 与数据库;pull 后若本地 `.env` 被误删,用备份恢复;再对照新的 **`.env.example`** 补全可能新增的变量名。 -- 实盘前务必在 **`LIVE_TRADING_ENABLED=false`** 下验证页面与网络;API 权限与 IP 白名单遵循各交易所要求。 -- 使用本仓库进行实盘交易的风险由使用者自行承担;请遵守当地法律法规与交易所用户协议。 - ---- - -## 八、仓库信息摘要 - -| 项 | 内容 | -|----|------| -| 远程地址 | `https://git.bz121.com/dekun/crypto_monitor.git` | -| 说明 | 复盘交易系统(骆驼比特币私有代码仓库,Gitea) | -| 本说明 | 仓库根目录 `README.md`,仅描述结构与文档索引,不包含业务代码变更说明 | - -若各子项目 README 与根说明不一致,以 **子目录内当前代码与《部署文档》** 为准。 +若子目录 README 与本文冲突,以 **子目录《部署文档》与当前代码** 为准。 diff --git a/crypto_monitor_binance/README.md b/crypto_monitor_binance/README.md index fc3c6f7..ea7ee33 100644 --- a/crypto_monitor_binance/README.md +++ b/crypto_monitor_binance/README.md @@ -19,9 +19,10 @@ 安装示例: ```bash -python -m venv .venv -source .venv/bin/activate # Windows: .venv\Scripts\activate -pip install flask requests ccxt werkzeug PySocks Pillow +# 推荐在 /opt/crypto_monitor 执行仓库根目录 deploy/setup_env.sh +cd /opt/crypto_monitor/crypto_monitor_binance +source .venv/bin/activate +pip install -r ../requirements.txt ``` 页面上的 **「当日资金(交易账户)」** 与 **「可开仓」可用 U** 仅统计 **Binance U 本位永续合约账户**(`fetch_balance` 的 `swap` / FAPI `assets` 中的 USDT),**不会**再用现货余额顶替。 @@ -46,19 +47,17 @@ pip install flask requests ccxt werkzeug PySocks Pillow 其余变量(登录、企业微信、风控参数、**`AI_PROVIDER` / `OPENAI_*` / `OLLAMA_*`**、数据库路径等)见 **`.env.example` 内注释** 或 `app.py` 顶部默认值。 -## 本地运行 +## 运行 -**Windows(UTF-8 控制台)** 可使用: +生产环境使用 **PM2**(`ecosystem.config.cjs`)。临时调试: -```powershell -.\start_utf8.ps1 +```bash +cd /opt/crypto_monitor/crypto_monitor_binance +source .venv/bin/activate +python app.py ``` -或直接: - -```powershell -python .\app.py -``` +环境说明见 [docs/ubuntu-server.md](../docs/ubuntu-server.md)。 默认监听端口由 `.env` 的 `APP_PORT` 决定(未设置时多为 `5000`)。 diff --git a/crypto_monitor_binance/部署文档.md b/crypto_monitor_binance/部署文档.md index 29ade5d..d18e3fe 100644 --- a/crypto_monitor_binance/部署文档.md +++ b/crypto_monitor_binance/部署文档.md @@ -1,12 +1,12 @@ # `crypto_monitor_binance` 部署指南:SSH SOCKS + Binance + PM2(Ubuntu) -项目功能、环境变量总览与本地运行说明见 **[README.md](./README.md)**。 +项目功能、环境变量总览见 **[README.md](./README.md)**。Ubuntu 环境(Python / Node / PM2)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 本文面向:**在本机或 VPS 上运行本项目**,但 **直连 Binance API 不稳定、超时或被网络策略拦截** 的场景。思路是: - 本机用 `ssh -D` 做动态转发,把 **SOCKS5 出口**放到能稳定访问 Binance 的机器(常见为一台境外 VPS) - 项目在 `.env` 中设置 **`BINANCE_SOCKS_PROXY=socks5h://127.0.0.1:1080`**(或你实际端口),`ccxt` 经 SOCKS 访问交易所 -- **SSH 隧道**:用 `ssh -D` 在本机常驻即可(screen / tmux / systemd 等),**不必交给 PM2** +- **SSH 隧道**:用 `ssh -D` 在本机常驻(可用 **tmux** 或 **autossh** 保持连接),**不要** 把 `ssh` 交给 PM2 - 使用 **PM2** 仅托管 **Flask 应用**;仓库根目录 **`ecosystem.config.cjs`** 默认进程名为 **`crypto-monitor-binance`** > 安全提醒:不要把 `.env`、私钥 `.pem`、Binance API Key / Secret 提交到 Git;下文只用占位符。 @@ -323,7 +323,7 @@ pm2 startup ### 10.1 SSH SOCKS(自行后台常驻,不推荐用 PM2) -示例(前台;实际可用 `screen`/`tmux`/`-f` 后台化或 systemd): +示例(前台调试;生产请用 **PM2**,见本文 §6 与 [docs/ubuntu-server.md](../docs/ubuntu-server.md)): ```bash ssh -N -D 127.0.0.1:1080 bn-vps \ diff --git a/crypto_monitor_gate/README.md b/crypto_monitor_gate/README.md index 183f8c4..f87d643 100644 --- a/crypto_monitor_gate/README.md +++ b/crypto_monitor_gate/README.md @@ -31,9 +31,9 @@ 安装示例: ```bash -python -m venv .venv -source .venv/bin/activate # Windows: .venv\Scripts\activate -pip install flask requests ccxt werkzeug PySocks Pillow +cd /opt/crypto_monitor/crypto_monitor_gate +source .venv/bin/activate +pip install -r ../requirements.txt ``` ## 配置(`.env.example` → `.env`) @@ -56,19 +56,15 @@ pip install flask requests ccxt werkzeug PySocks Pillow 其余见 **`.env.example` 内注释** 或 **`app.py` 顶部默认值**。 -## 本地运行 +## 运行 -**Windows** 推荐使用 UTF-8 控制台脚本: +生产使用 **PM2**(`ecosystem.config.cjs`)。调试: -```powershell -.\start_utf8.ps1 +```bash +source .venv/bin/activate && python app.py ``` -或直接: - -```powershell -python .\app.py -``` +见 [docs/ubuntu-server.md](../docs/ubuntu-server.md)。 端口由 **`APP_PORT`** 控制(未设置默认 **5000**)。浏览器登录 **`/login`**,口令为 **`APP_PASSWORD`**。 diff --git a/crypto_monitor_gate/部署文档.md b/crypto_monitor_gate/部署文档.md index 46b5ed3..20210a1 100644 --- a/crypto_monitor_gate/部署文档.md +++ b/crypto_monitor_gate/部署文档.md @@ -1,10 +1,12 @@ # `crypto_monitor_gate` 部署指南:SSH SOCKS + Gate.io + PM2(Ubuntu) +Ubuntu 环境(Python / Node / PM2、/opt 路径)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 + 本文面向:**在本机运行本项目**,但 **直连 Gate.io API 不稳定或被重置** 的场景。思路是: - 本机用 `ssh -D` 做动态转发,把 **SOCKS5 出口**放到能正常访问 Gate 的机器(常见为一台境外 VPS) - 项目在 `.env` 中设置 **`GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080`**(或你实际端口),`ccxt` 经 SOCKS 访问交易所 -- **SSH 隧道**:用 `ssh -D` 在本机常驻即可(screen / tmux / systemd 等),**不必交给 PM2** +- **SSH 隧道**:用 `ssh -D` 在本机常驻(可用 **tmux** 或 **autossh** 保持连接),**不要** 把 `ssh` 交给 PM2 - 使用 **PM2** 仅托管 **Flask 应用**;仓库根目录 **`ecosystem.config.cjs`** 只定义 `crypto-monitor-gate` > 安全提醒:不要把 `.env`、私钥 `.pem`、Gate API Key 提交到 Git;下文只用占位符。 @@ -238,7 +240,7 @@ pm2 startup ### 9.1 SSH SOCKS(自行后台常驻,不推荐用 PM2) -示例(前台;实际可用 `screen`/`tmux`/`-f` 后台化或 systemd): +示例(前台调试;生产请用 **PM2**,见本文与 [docs/ubuntu-server.md](../docs/ubuntu-server.md)): ```bash ssh -N -D 127.0.0.1:1080 gate-vps \ diff --git a/crypto_monitor_gate_bot/部署文档.md b/crypto_monitor_gate_bot/部署文档.md index 98e8c5e..af9ed1d 100644 --- a/crypto_monitor_gate_bot/部署文档.md +++ b/crypto_monitor_gate_bot/部署文档.md @@ -1,10 +1,12 @@ -# `crypto_monitor_gate` 部署指南:SSH SOCKS + Gate.io + PM2(Ubuntu) +# `crypto_monitor_gate_bot` 部署指南:SSH SOCKS + Gate.io + PM2(Ubuntu) + +Ubuntu 环境总览见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 本文面向:**在本机运行本项目**,但 **直连 Gate.io API 不稳定或被重置** 的场景。思路是: - 本机用 `ssh -D` 做动态转发,把 **SOCKS5 出口**放到能正常访问 Gate 的机器(常见为一台境外 VPS) - 项目在 `.env` 中设置 **`GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080`**(或你实际端口),`ccxt` 经 SOCKS 访问交易所 -- **SSH 隧道**:用 `ssh -D` 在本机常驻即可(screen / tmux / systemd 等),**不必交给 PM2** +- **SSH 隧道**:用 `ssh -D` 在本机常驻(可用 **tmux** 或 **autossh** 保持连接),**不要** 把 `ssh` 交给 PM2 - 使用 **PM2** 仅托管 **Flask 应用**;仓库根目录 **`ecosystem.config.cjs`** 只定义 `crypto-monitor-gate` > 安全提醒:不要把 `.env`、私钥 `.pem`、Gate API Key 提交到 Git;下文只用占位符。 @@ -272,7 +274,7 @@ pm2 startup ### 9.1 SSH SOCKS(自行后台常驻,不推荐用 PM2) -示例(前台;实际可用 `screen`/`tmux`/`-f` 后台化或 systemd): +示例(前台调试;生产请用 **PM2**,见本文与 [docs/ubuntu-server.md](../docs/ubuntu-server.md)): ```bash ssh -N -D 127.0.0.1:1080 gate-vps \ diff --git a/crypto_monitor_okx/README.md b/crypto_monitor_okx/README.md index 5c38374..87a1bc1 100644 --- a/crypto_monitor_okx/README.md +++ b/crypto_monitor_okx/README.md @@ -28,15 +28,15 @@ 完整模板见 **`.env.example`**。 -## 本地运行 +## 运行 -```powershell -cd crypto_monitor_okx -$env:PYTHONPATH=".." +```bash +cd /opt/crypto_monitor/crypto_monitor_okx +source .venv/bin/activate python app.py ``` -默认端口 **`APP_PORT`**(常为 `5004`,与中控登记一致)。 +生产使用 **PM2**;见 [docs/ubuntu-server.md](../docs/ubuntu-server.md)。默认 **`APP_PORT`** 常为 `5004`。 ## 部署 diff --git a/crypto_monitor_okx/部署文档.md b/crypto_monitor_okx/部署文档.md index 2ae185c..cbf2b12 100644 --- a/crypto_monitor_okx/部署文档.md +++ b/crypto_monitor_okx/部署文档.md @@ -1,6 +1,6 @@ # `crypto_monitor_okx` 部署文档(Ubuntu) -**功能与页面操作** 见同目录 **[使用说明.md](./使用说明.md)**。策略与 AI 见仓库根 **[策略交易说明.md](../策略交易说明.md)**、**[AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md)**。 +**功能与页面操作** 见同目录 **[使用说明.md](./使用说明.md)**。Ubuntu 环境(Python / Node / PM2)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。策略与 AI 见 **[策略交易说明.md](../策略交易说明.md)**、**[AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md)**。 --- @@ -10,7 +10,7 @@ - 本机启动 `ssh -D` 动态转发,把 **SOCKS5 出口**放到你可正常访问 OKX 的 VPS 上 - 项目通过环境变量 `OKX_SOCKS_PROXY=socks5h://127.0.0.1:1080` 让 `ccxt` 走 SOCKS -- 用 `pm2` 托管 **SSH 隧道** 与 **Flask 应用**(你也可以只用 `screen`,但本文按你要求用 PM2) +- **SSH 隧道**用 `ssh -D` 常驻(可用 tmux / autossh);**Flask 应用** 仅用 **PM2** 托管(见 [docs/ubuntu-server.md](../docs/ubuntu-server.md)) > 安全提醒:不要把 `.env`、私钥 `.pem`、OKX API Key 提交到 Git;文档里只用占位符。 diff --git a/deploy/README.md b/deploy/README.md index c523f82..b8e1cd6 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,65 +1,48 @@ -# 环境一键部署 +# 环境一键部署(Ubuntu / root /opt) -为仓库内各子项目创建 Python 虚拟环境、安装依赖、初始化 `.env` 与静态目录。 +在 **`/opt/crypto_monitor`** 下以 **root** 为各子项目创建 Python **`.venv`**、安装依赖、从 `.env.example` 生成 `.env`(不覆盖已有),并可选安装 **PM2**。 -## Windows(推荐) +完整系统要求(Python / Node / PM2 版本、启动顺序)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 -双击仓库根目录 **`一键部署.bat`**,或在 PowerShell 中: +--- -```powershell -cd C:\path\to\crypto_monitor -.\deploy\setup_env.ps1 -``` +## 前置条件 -仅部署部分项目: - -```powershell -.\deploy\setup_env.ps1 -Only binance,gate_bot -``` - -重建虚拟环境: - -```powershell -.\deploy\setup_env.ps1 -RecreateVenv -``` - -跳过 PM2、跳过复制 `.env`: - -```powershell -.\deploy\setup_env.ps1 -SkipPm2 -SkipEnvCopy -``` - -## Linux / macOS - -**Ubuntu / Debian 首次部署**(若 `python -m venv` 报 `ensurepip is not available`): +- **Ubuntu 22.04 / 24.04**,用户 **root** +- 已安装 **git**,仓库位于 **`/opt/crypto_monitor`** ```bash apt update -apt install -y python3.10-venv python3-pip curl # 版本号与 python3 --version 一致 -bash deploy/setup_env.sh +apt install -y python3 python3-pip python3-venv curl git ca-certificates +# Node 20 + PM2 见 docs/ubuntu-server.md §3 ``` -脚本在 **root** 下会自动尝试 `apt install python*-venv`;非 root 请先装系统包或使用: +--- -```bash -sudo bash deploy/setup_env.sh --install-system-deps -``` +## 一键执行 ```bash cd /opt/crypto_monitor -bash deploy/setup_env.sh -bash deploy/setup_env.sh --only binance,gate -bash deploy/setup_env.sh --recreate-venv +bash deploy/setup_env.sh --install-system-deps ``` -若在 Windows 编辑过脚本后在 Linux 报错 `set: pipefail: invalid option name`,先去掉 CRLF 再执行: +常用参数: + +```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 -# 或: apt install -y dos2unix && dos2unix deploy/setup_env.sh -bash deploy/setup_env.sh ``` +--- + ## 脚本会做什么 | 步骤 | 说明 | @@ -67,57 +50,29 @@ bash 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.js 且未 `-SkipPm2`,尝试 `npm install -g pm2` | +| `.env` | 不存在则从 `.env.example` 复制 | +| 目录 | `static/images`、`static/images/order_charts` | +| PM2 | 已装 Node 时 `npm install -g pm2` | + +--- ## 部署之后 -1. 编辑各子目录 **`.env`**(API、登录密码、SOCKS 代理、**AI 复盘** 等)。AI 默认走 OpenAI 兼容网关 `https://op.bz121.com/v1`(`AI_PROVIDER=openai`,`OPENAI_API_KEY` 等),详见根目录 [AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md)。 -2. 本地试运行(以 Binance 为例): +1. 编辑各子目录 **`.env`**(API、登录密码、SOCKS、AI 复盘等)。 +2. **仅用 PM2 常驻**(见 [docs/ubuntu-server.md](../docs/ubuntu-server.md) §3): ```bash - cd crypto_monitor_binance - source .venv/bin/activate # Windows: .\.venv\Scripts\activate - python app.py + 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. 服务器长期运行见各目录 **《部署文档.md》**(SSH SOCKS、PM2)。 -4. **多账户中控**(`manual_trading_hub`):编辑 `manual_trading_hub/.env`(`HUB_PASSWORD`、`HUB_BRIDGE_TOKEN` 等与四实例一致),再 `pm2 start ecosystem.config.cjs`;验收 `bash manual_trading_hub/scripts/verify_hub_deploy.sh`。详见 [manual_trading_hub/部署文档.md](../manual_trading_hub/部署文档.md)、[常见问题.md](../manual_trading_hub/常见问题.md)。 +3. 四所 `.env` 同步脚本见 **[docs/env-sync-scripts.md](../docs/env-sync-scripts.md)**。 -## 四所 `.env` 同步脚本(已有 .env 时) - -在仓库根目录用 Python 脚本**补全或更新**四所 `crypto_monitor_*` 下的 `.env`(不覆盖 API 密钥;无 `.env` 的目录会跳过)。 - -```bash -cd /path/to/crypto_monitor -git pull - -# 推荐:计仓 + 自动划转 一次补全 -python scripts/sync_four_exchange_env.py - -# 预览 -python scripts/sync_four_exchange_env.py --dry-run - -# 常见:划转目标 50U 并开启 + 计仓补全 -python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer - -# 无仓后切全仓杠杆 -python scripts/sync_four_exchange_env.py --set-mode full_margin - -pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate crypto-monitor-gate-bot -``` - -| 脚本 | 作用 | -|------|------| -| `scripts/sync_four_exchange_env.py` | 一键:计仓 + 划转 | -| `scripts/sync_four_exchange_transfer_env.py` | 仅自动划转 | -| `scripts/sync_four_exchange_position_sizing_env.py` | 仅计仓模式 | - -**完整参数、缺项默认值与示例**见 **[docs/env-sync-scripts.md](../docs/env-sync-scripts.md)**。 -功能说明:[计仓模式](../docs/position-sizing-mode.md)、[每日自动划转](../docs/auto-transfer-daily.md)。 +--- ## 依赖说明 -- 四个监控子项目共用仓库根目录 **[requirements.txt](../requirements.txt)**。 -- 走 SOCKS 代理时必须安装 **PySocks**(已包含在 requirements 中)。 +- 四个监控子项目共用根目录 **[requirements.txt](../requirements.txt)**。 +- 走 SOCKS 须 **PySocks**(已包含在 requirements 中)。 diff --git a/deploy/setup_env.sh b/deploy/setup_env.sh index bf64c19..679b71d 100644 --- a/deploy/setup_env.sh +++ b/deploy/setup_env.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# crypto_monitor 一键环境部署(Linux / macOS / Git Bash) +# crypto_monitor 一键环境部署(Ubuntu / root /opt/crypto_monitor) # # 用法: # bash deploy/setup_env.sh @@ -253,6 +253,5 @@ install_pm2 echo "" echo "部署完成。下一步:" echo " 1. 编辑各子目录 .env" -echo " 2. 启动示例: cd crypto_monitor_binance && source .venv/bin/activate && python app.py" -echo " 3. Windows 可用: powershell -File deploy/setup_env.ps1" +echo " 2. 编辑各目录 .env 后使用 PM2: pm2 start ecosystem.config.cjs(见 docs/ubuntu-server.md)" echo "" diff --git a/docs/ubuntu-server.md b/docs/ubuntu-server.md new file mode 100644 index 0000000..7e24881 --- /dev/null +++ b/docs/ubuntu-server.md @@ -0,0 +1,160 @@ +# Ubuntu 服务器部署与环境说明 + +本文档为 **生产环境唯一推荐路径**:**Ubuntu**、**root** 用户、代码目录 **`/opt/crypto_monitor`**、进程托管 **PM2**。不使用 Windows 部署、不使用 systemd/screen/nohup 托管应用(SSH 隧道除外)。 + +--- + +## 1. 系统要求 + +| 项 | 要求 | +|----|------| +| 操作系统 | **Ubuntu 22.04 LTS** 或 **24.04 LTS**(64 位) | +| 运行用户 | **root**(下文命令均按 root 编写) | +| 项目路径 | **`/opt/crypto_monitor`**(整仓克隆到此目录) | +| 进程管理 | **PM2**(全局安装,见 §3) | +| 网络 | 能 `git clone` 私有仓库;访问交易所不稳定时需 **SSH SOCKS**(见各所《部署文档》) | + +--- + +## 2. Python 环境 + +| 项 | 说明 | +|----|------| +| **版本** | **Python 3.10 或 3.11**(`python3 --version` ≥ 3.10);脚本会拒绝 3.9 及以下 | +| **虚拟环境** | 每个子项目独立 **`.venv`**(`deploy/setup_env.sh` 自动创建) | +| **依赖文件** | 四所监控共用仓库根目录 **`requirements.txt`**;中控用 **`manual_trading_hub/requirements.txt`** | +| **SOCKS** | 走代理时必须安装 **PySocks**(已写入 requirements) | + +### 2.1 系统包(root) + +```bash +apt update +apt install -y python3 python3-pip python3-venv curl git ca-certificates +# 若 python3 为 3.10: +apt install -y python3.10-venv +# 若为 3.12: +apt install -y python3.12-venv +``` + +### 2.2 一键创建各目录 venv + +```bash +cd /opt/crypto_monitor +bash deploy/setup_env.sh --install-system-deps +# 或已是 root 且已装 venv 包: +bash deploy/setup_env.sh +``` + +完成后各目录使用 **`.venv/bin/python`** 运行 `app.py` / `hub.py`;**PM2 的 ecosystem 脚本已指向该解释器**。 + +--- + +## 3. Node.js 与 PM2 + +| 项 | 说明 | +|----|------| +| **Node.js** | 建议 **18 LTS** 或 **20 LTS**(用于安装 PM2;应用本体为 Python) | +| **PM2** | 全局安装,托管所有 Flask 与中控/子代理 | + +### 3.1 安装 Node + PM2(root) + +```bash +# 方式 A:NodeSource(示例 Node 20) +curl -fsSL https://deb.nodesource.com/setup_20.x | bash - +apt install -y nodejs +node -v # v20.x +npm -v + +npm install -g pm2 +pm2 -v +pm2 startup # 按提示执行,保证重启后 PM2 自启 +``` + +`deploy/setup_env.sh` 在检测到 Node 时也会尝试 `npm install -g pm2`(未装 Node 则跳过并提示手动安装)。 + +### 3.2 PM2 启动顺序(推荐) + +```bash +# 1) 四所 Flask(在各子目录执行,或分别 start) +cd /opt/crypto_monitor/crypto_monitor_binance && pm2 start ecosystem.config.cjs +cd /opt/crypto_monitor/crypto_monitor_gate && pm2 start ecosystem.config.cjs +cd /opt/crypto_monitor/crypto_monitor_gate_bot && pm2 start ecosystem.config.cjs +cd /opt/crypto_monitor/crypto_monitor_okx && pm2 start ecosystem.config.cjs + +# 2) 中控 + 四子代理(一条配置 5 进程) +cd /opt/crypto_monitor/manual_trading_hub +pm2 start ecosystem.config.cjs + +pm2 save +pm2 list +``` + +升级代码后: + +```bash +cd /opt/crypto_monitor && git pull +# 若 requirements 有变,对各目录 .venv/bin/pip install -r ... +pm2 restart all # 或按进程名 restart +``` + +**不要** 再用 systemd unit、screen、nohup 启动 `app.py` / `hub.py` / `agent.py`,避免与 PM2 抢端口。 + +### 3.3 常见 PM2 进程名 + +| 目录 | ecosystem 内典型名称 | +|------|---------------------| +| `crypto_monitor_binance` | `crypto-monitor-binance` | +| `crypto_monitor_gate` | `crypto-monitor-gate` | +| `crypto_monitor_gate_bot` | `crypto-monitor-gate-bot` | +| `crypto_monitor_okx` | `crypto-monitor-okx` | +| `manual_trading_hub` | `manual-trading-hub`、`manual-agent-*` | + +以各目录 **`ecosystem.config.cjs`** 为准。 + +--- + +## 4. 目录与权限 + +```bash +mkdir -p /opt +cd /opt +git clone https://git.bz121.com/dekun/crypto_monitor.git crypto_monitor +chown -R root:root /opt/crypto_monitor +``` + +- 数据库默认:各所 **`crypto.db`**(SQLite) +- 备份目录建议:**`/root/backups`**(见 [备份与恢复.md](../备份与恢复.md)) +- **`.env`**:仅本机编辑,**勿提交 Git**;升级前 `cp .env .env.backup.$(date +%Y%m%d)` + +--- + +## 5. SSH 动态转发(SOCKS) + +若交易所 API 需经境外 VPS: + +- 在本机用 **`ssh -N -D 127.0.0.1:1080 别名`** 建立隧道(配置见各所《部署文档》`~/.ssh/config`) +- 隧道进程可用 **tmux** 或 **autossh** 保持常驻;**不必** 也不建议把 `ssh` 交给 PM2 +- 各所 `.env` 设置对应 `*_SOCKS_PROXY=socks5h://127.0.0.1:1080` + +--- + +## 6. 部署后检查 + +```bash +# 中控验收(需已 start hub) +bash /opt/crypto_monitor/manual_trading_hub/scripts/verify_hub_deploy.sh + +pm2 logs manual-trading-hub --lines 50 +curl -sS http://127.0.0.1:5100/api/monitor/board | head +``` + +--- + +## 7. 相关文档 + +| 文档 | 内容 | +|------|------| +| [deploy/README.md](../deploy/README.md) | `setup_env.sh` 参数说明 | +| [备份与恢复.md](../备份与恢复.md) | 数据库与 `.env` 备份 | +| 各 `crypto_monitor_*/部署文档.md` | 交易所 SOCKS、`.env`、PM2 细节 | +| [manual_trading_hub/部署文档.md](../manual_trading_hub/部署文档.md) | 中控 PM2、端口、反代 | diff --git a/manual_trading_hub/README.md b/manual_trading_hub/README.md index 99dc1c1..3d33213 100644 --- a/manual_trading_hub/README.md +++ b/manual_trading_hub/README.md @@ -87,7 +87,8 @@ curl -s http://127.0.0.1:5100/api/ping | [scripts/verify_hub_deploy.sh](./scripts/verify_hub_deploy.sh) | 验收代码版本与 ping | | [scripts/fix_env_crlf.sh](./scripts/fix_env_crlf.sh) | 修复 .env 的 Windows 换行 | | [scripts/pm2_hub.sh](./scripts/pm2_hub.sh) | PM2 启停 hub+agent | -| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | screen / systemd | +| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | PM2 常驻 | +| [docs/ubuntu-server.md](../docs/ubuntu-server.md) | Ubuntu / Python / Node / PM2 | --- diff --git a/manual_trading_hub/scripts/后台运行-Ubuntu.md b/manual_trading_hub/scripts/后台运行-Ubuntu.md index e6b76a3..5d5d0ad 100644 --- a/manual_trading_hub/scripts/后台运行-Ubuntu.md +++ b/manual_trading_hub/scripts/后台运行-Ubuntu.md @@ -1,201 +1,44 @@ -# Ubuntu 后台运行(中控 + 子代理) +# 中控与子代理 · 后台常驻(Ubuntu) -> **推荐生产**:用本目录 **`ecosystem.config.cjs`** + PM2 一次启动 4 agent + hub,见 [部署文档.md](../部署文档.md) §五。 -> 故障实录:[常见问题.md](../常见问题.md) +**唯一推荐方式:PM2。** -各 `crypto_monitor_*` 策略目录:首次 **`cp .env.example .env`** 并编辑;**`.env` 不进 Git**,`git pull` 不覆盖。升级前建议 `cp .env .env.backup.$(date +%Y%m%d)`。子代理启动前须 **`source` 该目录 `.env`**(见下文;PM2 经 `run_agent.sh` 会自动处理)。 - -前台跑 `python agent.py` / `python hub.py` 时,关掉终端进程会结束。要**常驻后台**,可用下面三种之一(推荐 **systemd**)。 +请勿使用 screen、nohup、systemd 与 PM2 **同时** 启动同一端口上的 `hub.py` / `agent.py`。 --- -## 一、tmux / screen(最简单,适合先试用) - -仓库已提供 **一键起 3 个 agent(不含 OKX)** 的 screen 脚本(需可执行权限): - -```bash -chmod +x manual_trading_hub/scripts/start_agents_3screen.sh -chmod +x manual_trading_hub/scripts/start_hub_screen.sh -chmod +x manual_trading_hub/scripts/stop_agents_3screen.sh -chmod +x manual_trading_hub/scripts/stop_hub_screen.sh -./manual_trading_hub/scripts/start_agents_3screen.sh -./manual_trading_hub/scripts/start_hub_screen.sh -# 关闭: -./manual_trading_hub/scripts/stop_hub_screen.sh -./manual_trading_hub/scripts/stop_agents_3screen.sh -``` - -脚本默认认为:`manual_trading_hub` 的**上一级目录**里并列放着三个 `crypto_monitor_*`。若你把 hub 单独放在 `/opt/crypto_monitor/manual_trading_hub`,而策略项目在例如 `/opt/crypto_monitor/` 下的其他位置,请先执行 -`export MANUAL_TRADING_REPO_ROOT=/opt/crypto_monitor` 再运行 `start_agents_3screen.sh`。 -启动后若 `screen -ls` 里没有 `mt-agent-*`,看日志:`tail -80 /opt/crypto_monitor/manual_trading_hub/logs/mt-agent-bn.log`。 - -### 局域网内其他电脑访问中控 - -中控 **默认** `HUB_HOST=0.0.0.0`、`HUB_TRUST_LAN=开启`,同一局域网内可用 `http://<中控机局域网IP>:5100/monitor` 打开(本机 `http://127.0.0.1:5100/`)。请确保防火墙放行端口,例如:`sudo ufw allow 5100/tcp`。 - -- 若 `.env` 设置了 **`HUB_PASSWORD`**,须先访问 `/login`(用户名见 `HUB_USERNAME`,默认 `admin`)。 -- **公网** 建议只经 **HTTPS 反代** 访问,勿把 5100 直接暴露公网;详见 [部署文档.md](../部署文档.md) §八。 -- 若 **域名 HTTPS 能登录、内网 IP:5100 HTTP 不能**,见 [常见问题.md](../常见问题.md) §2.1(Cookie Secure)。 - -若改为 **仅本机** 访问:`HUB_HOST=127.0.0.1` 或 `HUB_TRUST_LAN=0`,重启 hub。 - -也可把上述变量写进 `manual_trading_hub/.env`,再用 `start_hub_screen.sh` 启动。 - -以下为手工 tmux 示例: - -```bash -# 新建会话,在里面照常启动 agent 或 hub,然后按键 Ctrl+B 再按 D 脱离 -tmux new -s hub -cd /opt/crypto_monitor/manual_trading_hub && source .venv/bin/activate && python hub.py -# Ctrl+B, D - -tmux new -s agent-bn -cd /opt/crypto_monitor/crypto_monitor_binance && set -a && source .env && set +a -export EXCHANGE=binance PORT=15200 HOST=127.0.0.1 -source /opt/crypto_monitor/manual_trading_hub/.venv/bin/activate -python /opt/crypto_monitor/manual_trading_hub/agent.py -# Ctrl+B, D -``` - -重新连上:`tmux attach -t hub` - ---- - -## 二、nohup(快速、无守护重启) +## 启动 ```bash cd /opt/crypto_monitor/manual_trading_hub source .venv/bin/activate -nohup python hub.py > /tmp/manual-hub.log 2>&1 & +pip install -r requirements.txt +cp -n .env.example .env # 首次 + +pm2 start ecosystem.config.cjs +pm2 save +pm2 list ``` -子代理同理(每个账户一条):**先 `source` 该策略目录的 `.env`**(`agent.py` 不会自己读文件),再 `nohup python …/agent.py`。 - -停进程:`ps aux | grep hub.py` 或 `grep agent.py`,再 `kill `。 +一条 `ecosystem.config.cjs` 会拉起 **4 个子代理 + 1 个 hub**。 --- -## 三、systemd(推荐:开机自启、崩溃自动拉起) - -1. 把下面两个示例里的 **`YOUR_REPO`** 改成 **`/opt/crypto_monitor`**(或你本机实际仓库根目录),`YOUR_USER` 改成 Linux 用户名。 -2. 复制到 `/etc/systemd/system/`(需 sudo),文件名例如 `manual-hub.service`、`manual-agent-binance.service`。 -3. 执行: +## 常用命令 ```bash -sudo systemctl daemon-reload -sudo systemctl enable --now manual-hub.service -sudo systemctl enable --now manual-agent-binance.service -# 其余 OKX / Gate 同理再建 3 个 unit 或合并为多条 +pm2 logs manual-trading-hub +pm2 restart manual-trading-hub +pm2 restart all +bash scripts/verify_hub_deploy.sh ``` -查看状态:`sudo systemctl status manual-hub` -日志:`journalctl -u manual-hub -f` - -### 示例:`/etc/systemd/system/manual-hub.service` - -```ini -[Unit] -Description=手工交易中控 hub -After=network-online.target -Wants=network-online.target - -[Service] -Type=simple -User=YOUR_USER -WorkingDirectory=YOUR_REPO/manual_trading_hub -Environment=HUB_HOST=0.0.0.0 -Environment=HUB_TRUST_LAN=1 -Environment=HUB_PORT=5100 -ExecStart=YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/hub.py -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target -``` - -**注意:** `agent.py` **不会**像 Flask 那样自动加载目录里的 `.env`,密钥必须由 **systemd 的 `EnvironmentFile=`** 注入,或用下面 `bash -c` 方式 `source .env` 后再启动。 - -### 示例:`/etc/systemd/system/manual-agent-binance.service` - -```ini -[Unit] -Description=手工交易子代理 Binance -After=network-online.target -Wants=network-online.target - -[Service] -Type=simple -User=YOUR_USER -WorkingDirectory=YOUR_REPO/crypto_monitor_binance -Environment=PATH=YOUR_REPO/manual_trading_hub/.venv/bin:/usr/bin:/bin -Environment=EXCHANGE=binance -Environment=PORT=15200 -Environment=HOST=127.0.0.1 -# 把该账户的 .env 注入进程(与 Flask 同一份即可;仅支持 KEY=VALUE 行,勿写 shell 语法) -EnvironmentFile=-YOUR_REPO/crypto_monitor_binance/.env -ExecStart=YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/agent.py -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target -``` - -若 `.env` 含 **systemd 无法解析** 的内容(复杂引号、`export` 等),改用: - -```ini -ExecStart=/bin/bash -lc 'set -a; source YOUR_REPO/crypto_monitor_binance/.env; set +a; exec YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/agent.py' -``` - -并删掉或注释掉 `EnvironmentFile=` 行,避免重复注入。 - -**OKX / Gate / Gate-Bot**:各复制一份 `.service`,改 `Description`、`WorkingDirectory`、以及 `EXCHANGE` / `PORT`(`15201`、`15202`、`15203`)。 - --- -## 四、常见问题(子代理 / screen / 依赖) +## 详细说明 -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`)中执行: - `pip install PySocks` 或 `pip install -r requirements.txt`。 +| 文档 | 内容 | +|------|------| +| [../部署文档.md](../部署文档.md) | 端口、反代、故障排查 | +| [../../docs/ubuntu-server.md](../../docs/ubuntu-server.md) | Python / Node / PM2 版本与四所启动顺序 | -2. **已经 `pip install PySocks`,错误文案完全不变** - 子代理是**常驻进程**,首次请求已创建 ccxt;在运行中的进程里**仅安装包不会自动生效**。须**重启**该 agent:例如 - `screen -S mt-agent-gate -X quit` - 再执行 `start_agents_3screen.sh`(或你的等价启动方式)。**不要**依赖「会话还在、以为已经更新」的旧进程。 - -3. **`start_agents_3screen.sh` 打印「已存在会话、跳过」** - 脚本检测到 `mt-agent-*` 已在跑会跳过创建。需要先停再启: - `./stop_agents_3screen.sh` - 或对单个会话:`screen -S mt-agent-gate -X quit`,再跑启动脚本。 - -4. **确认 15200/15202/15203 上的进程用的是 hub 的 venv** - ```bash - ps aux | grep agent.py - tr '\0' ' ' < /proc//cmdline; echo - ``` - 应看到 `…/manual_trading_hub/.venv/bin/python` 与 `…/manual_trading_hub/agent.py`。若用的是系统 `python3`,要么在**同一解释器环境**里装依赖,要么改为用 `start_agents_3screen.sh` 启动(脚本内写死 `VENV_PY`)。 - -5. **中控某账户一直红 / 非 JSON** - 对应该端口的 agent 未启动,或 **系统设置** 里 Agent URL 与 `PORT`(15200~15203)不一致。本机先测: - `curl -sS http://127.0.0.1:1520x/status | head -c 400` - 再看 `logs/mt-agent-*.log` 或 `pm2 logs manual-agent-*`。 - -6. **PM2 日志仍见 `api_trade_key` / 添加关键位 SyntaxError** - 多为旧版 hub 或未重启。`git pull` → `bash scripts/fix_hub_deps.sh` → `bash scripts/verify_hub_deploy.sh` → `pm2 restart manual-trading-hub`。中控**已移除下单区**,关键位请在监控卡片 **「实例」** 进各 Flask 操作。详见 [常见问题.md](../常见问题.md) §1。 - -7. **子代理端口与 Flask 冲突** - agent 使用环境变量 **`PORT`**(脚本里 15200、15202、15203);各策略 `.env` 里的 **`APP_PORT`** 给 Flask。二者**不能**相同。 - -8. **systemd 下改依赖或 `.env` 后** - 与 screen 相同:`pip install` 或改 `EnvironmentFile` 后需 **`systemctl restart `**,否则仍是旧进程。 - ---- - -## 五、注意 - -- 子代理与中控仍建议只监听 **127.0.0.1**;Flask 的 `APP_HOST=0.0.0.0` 与中控无关。 -- 若策略项目用**自己的** `.venv`,把 `ExecStart` 里的 Python 改成该 venv 的 `python`,但 `agent.py` 路径仍指向 `manual_trading_hub/agent.py`。 - -同目录下另有 `example-systemd/*.service.example` 可复制后改路径使用。 +历史 screen/systemd 示例已废弃,仅保留 PM2 运维。 diff --git a/manual_trading_hub/使用说明.md b/manual_trading_hub/使用说明.md index b4ebe14..088d3d1 100644 --- a/manual_trading_hub/使用说明.md +++ b/manual_trading_hub/使用说明.md @@ -104,70 +104,32 @@ $env:HUB_DISABLED_IDS="1" # 默认即关闭 OKX(id=1) --- -## 3. 启动顺序(Windows 示例) +## 3. 启动顺序(Ubuntu + PM2) -**原则**:先子代理与四实例 Flask,再中控。 - -### 3.1 子代理(每所一个终端) - -在对应策略目录加载 `.env` 后: - -```powershell -# 币安 -cd c:\Users\dekun\Desktop\crypto_monitor\crypto_monitor_binance -$env:EXCHANGE="binance"; $env:PORT="15200"; $env:HOST="127.0.0.1" -# 可选:$env:CONTROL_TOKEN="你的随机串" -python ..\manual_trading_hub\agent.py -``` - -```powershell -# OKX(若启用) -cd ..\crypto_monitor_okx -$env:EXCHANGE="okx"; $env:PORT="15201" -python ..\manual_trading_hub\agent.py -``` - -```powershell -# Gate 训练 -cd ..\crypto_monitor_gate -$env:EXCHANGE="gate"; $env:PORT="15202" -python ..\manual_trading_hub\agent.py -``` - -```powershell -# Gate 趋势 -cd ..\crypto_monitor_gate_bot -$env:EXCHANGE="gate"; $env:PORT="15203" -python ..\manual_trading_hub\agent.py -``` - -### 3.2 四实例 Flask - -在各目录按原有方式启动 `app.py`(确保 `APP_PORT` 与设置页 Flask URL 一致)。 - -### 3.3 中控 - -```powershell -cd c:\Users\dekun\Desktop\crypto_monitor\manual_trading_hub -$env:HUB_HOST="0.0.0.0" # 仅本机可改为 127.0.0.1 -$env:HUB_PORT="5100" -$env:HUB_BRIDGE_TOKEN="你的随机串" # 与各实例、子代理一致 -python hub.py -``` - -浏览器打开: - -- 监控区:http://127.0.0.1:5100/monitor -- 行情区:http://127.0.0.1:5100/market -- 系统设置:http://127.0.0.1:5100/settings -- 登录页:http://127.0.0.1:5100/login(已设 `HUB_PASSWORD` 时) -- 旧链接 `/trade` 会自动跳转到 `/monitor` - -验收(无需登录): +**原则**:代码在 **`/opt/crypto_monitor`**,先四实例 Flask,再中控(一条 PM2 含 4 agent + hub)。环境见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 ```bash +# 四所 Flask(示例:币安;其余三所同理) +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 +``` + +浏览器(本机或反代): + +- 监控区:`http://127.0.0.1:5100/monitor` +- 行情区:`http://127.0.0.1:5100/market` +- 系统设置:`http://127.0.0.1:5100/settings` + +验收: + +```bash +bash /opt/crypto_monitor/manual_trading_hub/scripts/verify_hub_deploy.sh curl -s http://127.0.0.1:5100/api/ping -# 应含 "build":"20260521-no-trade-ui", "trade_ui":false ``` --- @@ -451,7 +413,7 @@ pm2 save && pm2 startup 快捷:`bash scripts/pm2_hub.sh start|restart|logs`(同样 hub+agent 一起)。 -更细的安装顺序、反代、验收见 **《部署文档.md》**;screen / systemd 见 **scripts/**。 +更细的安装顺序、反代、验收见 **《部署文档.md》**;PM2 见 **[scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md)**。 --- @@ -478,4 +440,5 @@ pm2 save && pm2 startup | [常见问题.md](./常见问题.md) | 故障实录与排障 | | [README.md](./README.md) | 速览 | | [.env.example](./.env.example) | 环境变量模板 | -| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | screen / systemd | +| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | PM2 常驻 | +| [docs/ubuntu-server.md](../docs/ubuntu-server.md) | Ubuntu 环境总览 | diff --git a/manual_trading_hub/部署文档.md b/manual_trading_hub/部署文档.md index 4637e48..cdf4306 100644 --- a/manual_trading_hub/部署文档.md +++ b/manual_trading_hub/部署文档.md @@ -175,7 +175,7 @@ pm2 save curl -s http://127.0.0.1:15202/status | head -c 200 # 应 ok:true ``` -**预防**:`.env` 保存为 **LF**;Windows 用 `deploy/setup_env.ps1` 复制 `.env.example` 时已写 LF。子代理须经 **`scripts/run_agent.sh`** 启动(内置去 CRLF 的 `load_dotenv_file`),勿裸跑 `python agent.py`。 +**预防**:`.env` 保存为 **LF**(勿在 Windows 记事本直接保存 CRLF)。子代理须经 **`scripts/run_agent.sh`** 启动(内置去 CRLF 的 `load_dotenv_file`),勿裸跑 `python agent.py`。 详见 [常见问题.md](./常见问题.md) **§3.1**、**§3.3**。 @@ -186,7 +186,7 @@ curl -s http://127.0.0.1:15202/status | head -c 200 # 应 ok:true 需**分别**起 agent 与 hub(与 PM2 合并启动不同): ```bash -# 子代理:scripts/start_agents_3screen.sh 或每目录手动 agent.py +# 子代理:由 ecosystem.config.cjs 经 run_agent.sh 启动(勿用手动多终端) # 中控: cd /opt/crypto_monitor/manual_trading_hub bash scripts/run_hub.sh @@ -303,12 +303,10 @@ pm2 restart ecosystem.config.cjs --- -## 十二、其它常驻方式 +## 十二、进程托管说明 -- **screen**:`scripts/start_hub_screen.sh` / `stop_hub_screen.sh` -- **systemd**:`scripts/example-systemd/manual-hub.service.example`(复制并改路径) - -与 PM2 **二选一** 即可,避免同一端口启动两份 hub。 +中控与子代理 **仅使用 PM2**(`ecosystem.config.cjs`)。勿再用 screen / systemd / nohup 启动 `hub.py` 或 `agent.py`,以免端口冲突。 +环境要求见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。 --- @@ -331,7 +329,8 @@ pm2 restart ecosystem.config.cjs | [常见问题.md](./常见问题.md) | 故障实录 | | [README.md](./README.md) | 速览 | | [.env.example](./.env.example) | 环境变量模板 | -| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | screen / systemd | +| [scripts/后台运行-Ubuntu.md](./scripts/后台运行-Ubuntu.md) | PM2 常驻(唯一推荐) | +| [docs/ubuntu-server.md](../docs/ubuntu-server.md) | Ubuntu / Python / Node / PM2 | | `scripts/fix_hub_deps.sh` | 安装依赖 | | `scripts/verify_hub_deploy.sh` | 部署验收 | | `scripts/fix_env_crlf.sh` | 修复 .env 换行 | diff --git a/策略交易说明.md b/策略交易说明.md index aead4a7..6665620 100644 --- a/策略交易说明.md +++ b/策略交易说明.md @@ -129,11 +129,11 @@ strategy_records_register.py # /strategy/records 路由与列表数据 ```bash cd /opt/crypto_monitor git pull -# 四所 PM2 若用到滚仓/趋势 lib,建议重启 -pm2 restart crypto_binance crypto_gate crypto_gate_bot crypto_okx manual-trading-hub +pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate crypto-monitor-gate-bot manual-trading-hub +pm2 save ``` -仅改 Python 库、未改模板时,重启对应 Flask 进程即可。 +部署约定:**Ubuntu + root + /opt/crypto_monitor + PM2** → [docs/ubuntu-server.md](./docs/ubuntu-server.md)。 --- @@ -144,6 +144,7 @@ pm2 restart crypto_binance crypto_gate crypto_gate_bot crypto_okx manual-trading | [crypto_monitor_gate_bot/趋势回调策略说明.md](./crypto_monitor_gate_bot/趋势回调策略说明.md) | 趋势回调细则(与四所共用逻辑一致) | | [AI复盘与模型配置说明.md](./AI复盘与模型配置说明.md) | 复盘页 AI(与策略无关) | | [manual_trading_hub/使用说明.md](./manual_trading_hub/使用说明.md) | 中控监控、全屏趋势卡两列布局 | +| [docs/ubuntu-server.md](./docs/ubuntu-server.md) | Ubuntu / root /opt / PM2 部署 | | [fib_key_monitor_lib.py](./fib_key_monitor_lib.py) | 斐波公式共用 | ---