中控增加下单,关键位,系统设置
This commit is contained in:
@@ -200,4 +200,4 @@ python hub.py
|
||||
**5. 局域网里别的电脑打不开中控**
|
||||
默认应已可访问:中控监听 `0.0.0.0` 且 `HUB_TRUST_LAN` 默认开启。请检查:防火墙是否放行 `HUB_PORT`;浏览器是否使用 **中控机器的局域网 IP**(不要用另一台电脑上的 `127.0.0.1`)。若你曾设置 `HUB_TRUST_LAN=0` 或 `HUB_HOST=127.0.0.1`,改回默认或删掉环境变量后重启 hub。
|
||||
|
||||
**Linux 常驻(PM2)**:`python3 -m venv .venv` → `source .venv/bin/activate` → `pip install -r requirements.txt` → `pm2 start ecosystem.config.cjs`(进程名 `manual-trading-hub`)。PM2 经 `run_hub.sh` 使用 `.venv/bin/python`,启动前不必保持 shell 处于 activate 状态。详见 **《部署文档.md》**。
|
||||
**Linux 常驻(PM2)**:`pm2 start ecosystem.config.cjs` 会**同时**启动 4 路子代理 + 中控 `manual-trading-hub`。详见 **《部署文档.md》**。
|
||||
|
||||
@@ -1,45 +1,11 @@
|
||||
/**
|
||||
* PM2:四路子代理 agent.py(可选,与中控分开管理)
|
||||
* 仅子代理(一般不单独用;默认请 pm2 start ecosystem.config.cjs 一次起 hub+agent)
|
||||
*
|
||||
* 每个 app 在对应 crypto_monitor_* 目录启动,以加载该目录 .env 中的 API 密钥。
|
||||
* Python 解释器使用 manual_trading_hub/.venv(须已 pip install -r requirements.txt)。
|
||||
*
|
||||
* 启动:
|
||||
* pm2 start ecosystem.agents.config.cjs
|
||||
*
|
||||
* 仅启动部分账户可编辑下方 apps 数组,或:
|
||||
* pm2 start ecosystem.agents.config.cjs --only manual-agent-binance
|
||||
* 若只想重启子代理、不动中控:
|
||||
* pm2 restart manual-agent-binance manual-agent-gate ...
|
||||
*/
|
||||
const path = require("path");
|
||||
|
||||
const HUB_DIR = __dirname;
|
||||
const REPO_ROOT = path.join(HUB_DIR, "..");
|
||||
const PY = path.join(HUB_DIR, ".venv", "bin", "python");
|
||||
const AGENT = path.join(HUB_DIR, "agent.py");
|
||||
|
||||
function agentApp(name, exchangeDir, exchange, port) {
|
||||
return {
|
||||
name,
|
||||
cwd: path.join(REPO_ROOT, exchangeDir),
|
||||
script: AGENT,
|
||||
interpreter: PY,
|
||||
instances: 1,
|
||||
autorestart: true,
|
||||
watch: false,
|
||||
max_memory_restart: "400M",
|
||||
env: {
|
||||
EXCHANGE: exchange,
|
||||
PORT: String(port),
|
||||
HOST: "127.0.0.1",
|
||||
},
|
||||
};
|
||||
}
|
||||
const main = require("./ecosystem.config.cjs");
|
||||
|
||||
module.exports = {
|
||||
apps: [
|
||||
agentApp("manual-agent-binance", "crypto_monitor_binance", "binance", 15200),
|
||||
agentApp("manual-agent-okx", "crypto_monitor_okx", "okx", 15201),
|
||||
agentApp("manual-agent-gate", "crypto_monitor_gate", "gate", 15202),
|
||||
agentApp("manual-agent-gate-bot", "crypto_monitor_gate_bot", "gate", 15203),
|
||||
],
|
||||
apps: main.apps.filter((a) => String(a.name).startsWith("manual-agent-")),
|
||||
};
|
||||
|
||||
@@ -1,28 +1,52 @@
|
||||
/**
|
||||
* PM2:多账户交易中控 hub.py(Ubuntu / Linux)
|
||||
* PM2:中控 hub + 四路子代理 agent(一次启动全部)
|
||||
*
|
||||
* 前置:
|
||||
* cd manual_trading_hub
|
||||
* cp .env.example .env # 按需修改 HUB_PORT、HUB_BRIDGE_TOKEN 等
|
||||
* python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
|
||||
* source .venv/bin/activate && pip install -r requirements.txt
|
||||
* cp .env.example .env
|
||||
*
|
||||
* 启动:
|
||||
* 启动(hub + 全部 agent):
|
||||
* pm2 start ecosystem.config.cjs
|
||||
* pm2 save && pm2 startup
|
||||
*
|
||||
* 常用:
|
||||
* pm2 logs manual-trading-hub
|
||||
* pm2 restart manual-trading-hub
|
||||
* 仅中控:pm2 start ecosystem.config.cjs --only manual-trading-hub
|
||||
* 仅某 agent:pm2 start ecosystem.config.cjs --only manual-agent-binance
|
||||
*
|
||||
* 子代理(agent)见 ecosystem.agents.config.cjs 或 scripts/后台运行-Ubuntu.md
|
||||
* 快捷:bash scripts/pm2_hub.sh start
|
||||
*/
|
||||
const path = require("path");
|
||||
|
||||
const HUB_DIR = __dirname;
|
||||
const REPO_ROOT = path.join(HUB_DIR, "..");
|
||||
const PY = path.join(HUB_DIR, ".venv", "bin", "python");
|
||||
const AGENT = path.join(HUB_DIR, "agent.py");
|
||||
const RUN_SH = path.join(HUB_DIR, "scripts", "run_hub.sh");
|
||||
|
||||
function agentApp(name, exchangeDir, exchange, port) {
|
||||
return {
|
||||
name,
|
||||
cwd: path.join(REPO_ROOT, exchangeDir),
|
||||
script: AGENT,
|
||||
interpreter: PY,
|
||||
instances: 1,
|
||||
autorestart: true,
|
||||
watch: false,
|
||||
max_memory_restart: "400M",
|
||||
env: {
|
||||
EXCHANGE: exchange,
|
||||
PORT: String(port),
|
||||
HOST: "127.0.0.1",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
apps: [
|
||||
agentApp("manual-agent-binance", "crypto_monitor_binance", "binance", 15200),
|
||||
agentApp("manual-agent-okx", "crypto_monitor_okx", "okx", 15201),
|
||||
agentApp("manual-agent-gate", "crypto_monitor_gate", "gate", 15202),
|
||||
agentApp("manual-agent-gate-bot", "crypto_monitor_gate_bot", "gate", 15203),
|
||||
{
|
||||
name: "manual-trading-hub",
|
||||
cwd: HUB_DIR,
|
||||
@@ -32,9 +56,6 @@ module.exports = {
|
||||
autorestart: true,
|
||||
watch: false,
|
||||
max_memory_restart: "512M",
|
||||
// 环境变量优先写在 manual_trading_hub/.env(由 run_hub.sh 加载)
|
||||
// 也可在此覆盖,例如:
|
||||
// env: { HUB_PORT: "5100", HUB_DISABLED_IDS: "1" },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# 子代理 PM2 快捷脚本
|
||||
# 仅子代理 PM2(中控请用 scripts/pm2_hub.sh 或 ecosystem.config.cjs 一次起全部)
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -10,12 +10,9 @@ usage() {
|
||||
cat <<'EOF'
|
||||
用法: bash scripts/pm2_agents.sh <start|stop|restart|status|logs|delete>
|
||||
|
||||
start 启动 ecosystem.agents.config.cjs 中全部子代理
|
||||
stop 停止全部 manual-agent-*
|
||||
restart 重启全部
|
||||
status pm2 status
|
||||
logs 全部子代理日志
|
||||
delete 从 PM2 移除
|
||||
一般请用: bash scripts/pm2_hub.sh start (hub + agent 一起)
|
||||
|
||||
本脚本仅操作 4 路子代理(不含中控)
|
||||
|
||||
仅启动币安: pm2 start ecosystem.agents.config.cjs --only manual-agent-binance
|
||||
EOF
|
||||
|
||||
@@ -1,24 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# 中控 PM2 快捷脚本(在 manual_trading_hub 目录或任意路径执行均可)
|
||||
# 中控 + 子代理 统一 PM2 快捷脚本
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
HUB_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
ECO="${HUB_DIR}/ecosystem.config.cjs"
|
||||
|
||||
# 与 ecosystem.config.cjs 中 name 一致
|
||||
PM2_NAMES=(
|
||||
manual-agent-binance
|
||||
manual-agent-okx
|
||||
manual-agent-gate
|
||||
manual-agent-gate-bot
|
||||
manual-trading-hub
|
||||
)
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
用法: bash scripts/pm2_hub.sh <start|stop|restart|status|logs|delete>
|
||||
|
||||
start 启动 manual-trading-hub(已存在则 pm2 restart)
|
||||
stop 停止
|
||||
restart 重启
|
||||
start 启动 ecosystem.config.cjs(4 路子代理 + 中控,已存在则 restart 全部)
|
||||
stop 停止全部
|
||||
restart 重启全部
|
||||
status pm2 status
|
||||
logs 跟踪日志(Ctrl+C 退出)
|
||||
delete 从 PM2 列表移除
|
||||
logs 全部相关进程日志
|
||||
delete 从 PM2 列表移除全部
|
||||
|
||||
前置: npm i -g pm2;manual_trading_hub 下已建 .venv 并 pip install
|
||||
可选: cp .env.example .env
|
||||
仅中控: pm2 start ecosystem.config.cjs --only manual-trading-hub
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -36,31 +44,45 @@ fi
|
||||
|
||||
cd "${HUB_DIR}"
|
||||
|
||||
_any_running() {
|
||||
local n
|
||||
for n in "${PM2_NAMES[@]}"; do
|
||||
if pm2 describe "${n}" >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
case "${cmd}" in
|
||||
start)
|
||||
if pm2 describe manual-trading-hub >/dev/null 2>&1; then
|
||||
pm2 restart manual-trading-hub
|
||||
echo "已重启 manual-trading-hub"
|
||||
if _any_running; then
|
||||
pm2 restart "${ECO}"
|
||||
echo "已重启:hub + 全部 agent"
|
||||
else
|
||||
pm2 start "${ECO}"
|
||||
echo "已启动 manual-trading-hub"
|
||||
echo "已启动:hub + 全部 agent(共 ${#PM2_NAMES[@]} 个进程)"
|
||||
fi
|
||||
pm2 save 2>/dev/null || true
|
||||
;;
|
||||
stop)
|
||||
pm2 stop manual-trading-hub 2>/dev/null || echo "进程未在运行"
|
||||
pm2 stop "${PM2_NAMES[@]}" 2>/dev/null || echo "部分或全部进程未在运行"
|
||||
;;
|
||||
restart)
|
||||
pm2 restart manual-trading-hub 2>/dev/null || pm2 start "${ECO}"
|
||||
if _any_running; then
|
||||
pm2 restart "${ECO}"
|
||||
else
|
||||
pm2 start "${ECO}"
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
pm2 status
|
||||
;;
|
||||
logs)
|
||||
pm2 logs manual-trading-hub --lines 200
|
||||
pm2 logs "${PM2_NAMES[@]}" --lines 100
|
||||
;;
|
||||
delete)
|
||||
pm2 delete manual-trading-hub 2>/dev/null || echo "进程不存在"
|
||||
pm2 delete "${PM2_NAMES[@]}" 2>/dev/null || echo "部分或全部进程不存在"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
|
||||
@@ -330,11 +330,11 @@ python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
cp .env.example .env
|
||||
pm2 start ecosystem.config.cjs # 进程名 manual-trading-hub;PM2 用 .venv/bin/python,无需保持 activate
|
||||
pm2 start ecosystem.config.cjs # 一次启动 4 个 agent + manual-trading-hub
|
||||
pm2 save && pm2 startup
|
||||
```
|
||||
|
||||
子代理可选:`pm2 start ecosystem.agents.config.cjs`。快捷命令:`bash scripts/pm2_hub.sh start|restart|logs`。
|
||||
快捷:`bash scripts/pm2_hub.sh start|restart|logs`(同样 hub+agent 一起)。
|
||||
|
||||
更细的安装顺序、反代、验收见 **《部署文档.md》**;screen / systemd 见 **scripts/**。
|
||||
|
||||
|
||||
+51
-62
@@ -52,51 +52,75 @@ deactivate # 可选;交给 PM2 时不必保持激活
|
||||
## 四、推荐启动顺序
|
||||
|
||||
```
|
||||
1. 子代理 agent(15200~15203) ← PM2 或 screen
|
||||
2. 各实例 Flask(APP_PORT) ← 各目录 ecosystem.config.cjs
|
||||
3. 中控 hub(5100) ← 本目录 ecosystem.config.cjs
|
||||
1. 各实例 Flask(APP_PORT) ← 各 crypto_monitor_* 目录 ecosystem.config.cjs
|
||||
2. 中控 + 子代理(5100 + 15200~15203) ← 本目录一条 PM2 命令同时启动
|
||||
```
|
||||
|
||||
**`ecosystem.config.cjs` 会一次拉起 4 个 agent + 1 个 hub**,无需再单独 `pm2 start` 子代理。
|
||||
|
||||
仅反代中控到公网时:Flask / agent 仍只监听 **127.0.0.1**;系统设置里 URL 填 `http://127.0.0.1:端口`。
|
||||
|
||||
---
|
||||
|
||||
## 五、PM2 托管中控(推荐)
|
||||
## 五、PM2 托管(hub + agent 一起启动,推荐)
|
||||
|
||||
### 5.1 进程名与文件
|
||||
### 5.1 一条命令启动全部
|
||||
|
||||
| 文件 | PM2 进程名 | 说明 |
|
||||
|------|------------|------|
|
||||
| `ecosystem.config.cjs` | `manual-trading-hub` | 仅中控 |
|
||||
| `ecosystem.agents.config.cjs` | `manual-agent-binance` 等 4 个 | 可选,子代理 |
|
||||
| 文件 | 包含进程 |
|
||||
|------|----------|
|
||||
| `ecosystem.config.cjs` | `manual-agent-binance` / `okx` / `gate` / `gate-bot` + **`manual-trading-hub`** |
|
||||
|
||||
`run_hub.sh` 会加载 **`manual_trading_hub/.env`** 再执行 `hub.py`。
|
||||
|
||||
### 5.2 启动中控
|
||||
`run_hub.sh` 加载 **`manual_trading_hub/.env`** 后执行 `hub.py`;各 agent 在对应策略目录启动以读取该目录 **`.env`** 中的 API 密钥。
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor/manual_trading_hub
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
cp .env.example .env
|
||||
|
||||
# 方式 A:直接 PM2
|
||||
pm2 start ecosystem.config.cjs
|
||||
pm2 start ecosystem.config.cjs # 5 个进程一起起
|
||||
pm2 save
|
||||
|
||||
# 方式 B:快捷脚本
|
||||
# 或
|
||||
bash scripts/pm2_hub.sh start
|
||||
```
|
||||
|
||||
### 5.2 PM2 进程一览
|
||||
|
||||
| 进程名 | 工作目录 | 端口/说明 |
|
||||
|--------|----------|-----------|
|
||||
| manual-agent-binance | crypto_monitor_binance | agent `15200` |
|
||||
| manual-agent-okx | crypto_monitor_okx | agent `15201` |
|
||||
| manual-agent-gate | crypto_monitor_gate | agent `15202` |
|
||||
| manual-agent-gate-bot | crypto_monitor_gate_bot | agent `15203` |
|
||||
| manual-trading-hub | manual_trading_hub | hub `5100` |
|
||||
|
||||
OKX 子代理会启动,但中控默认 `HUB_DISABLED_IDS=1` 不参与监控;不用 OKX 可 `pm2 stop manual-agent-okx`。
|
||||
|
||||
### 5.3 常用运维命令
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs manual-trading-hub --lines 200
|
||||
pm2 restart manual-trading-hub
|
||||
pm2 stop manual-trading-hub
|
||||
pm2 restart ecosystem.config.cjs # 重启 hub + 全部 agent
|
||||
|
||||
# 或
|
||||
bash scripts/pm2_hub.sh status
|
||||
bash scripts/pm2_hub.sh restart # 同上
|
||||
bash scripts/pm2_hub.sh stop
|
||||
bash scripts/pm2_hub.sh logs
|
||||
bash scripts/pm2_hub.sh restart
|
||||
```
|
||||
|
||||
仅重启中控、不动 agent:
|
||||
|
||||
```bash
|
||||
pm2 restart manual-trading-hub
|
||||
```
|
||||
|
||||
仅重启子代理:
|
||||
|
||||
```bash
|
||||
pm2 restart manual-agent-binance manual-agent-gate manual-agent-gate-bot
|
||||
# 或
|
||||
bash scripts/pm2_agents.sh restart
|
||||
```
|
||||
|
||||
### 5.4 开机自启
|
||||
@@ -107,59 +131,26 @@ pm2 startup
|
||||
# 按终端提示执行一行 sudo 命令后,再 pm2 save
|
||||
```
|
||||
|
||||
### 5.5 可选:PM2 托管四路子代理
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor/manual_trading_hub
|
||||
pm2 start ecosystem.agents.config.cjs
|
||||
# 仅币安:
|
||||
# pm2 start ecosystem.agents.config.cjs --only manual-agent-binance
|
||||
|
||||
bash scripts/pm2_agents.sh start # 等价启动全部
|
||||
pm2 save
|
||||
```
|
||||
|
||||
| 进程名 | 工作目录 | PORT |
|
||||
|--------|----------|------|
|
||||
| manual-agent-binance | crypto_monitor_binance | 15200 |
|
||||
| manual-agent-okx | crypto_monitor_okx | 15201 |
|
||||
| manual-agent-gate | crypto_monitor_gate | 15202 |
|
||||
| manual-agent-gate-bot | crypto_monitor_gate_bot | 15203 |
|
||||
|
||||
OKX 默认被 `HUB_DISABLED_IDS=1` 关闭监控,但子代理仍可启动备用。
|
||||
|
||||
### 5.6 与各实例 Flask 一起查看
|
||||
### 5.5 与各实例 Flask 一起查看
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
# 示例同时存在:
|
||||
# manual-trading-hub
|
||||
# manual-agent-binance
|
||||
# crypto_binance (各目录自有 ecosystem.config.cjs)
|
||||
# manual-trading-hub、manual-agent-*
|
||||
# crypto_binance / crypto_gate …(各策略目录自有 ecosystem.config.cjs)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、手动启动(不用 PM2 时)
|
||||
|
||||
### 6.1 子代理(每账户一个终端或 screen)
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor/crypto_monitor_binance
|
||||
export EXCHANGE=binance PORT=15200 HOST=127.0.0.1
|
||||
/opt/crypto_monitor/manual_trading_hub/.venv/bin/python \
|
||||
/opt/crypto_monitor/manual_trading_hub/agent.py
|
||||
```
|
||||
|
||||
其余端口见上表;也可用 `scripts/start_agents_3screen.sh`(不含 OKX)。
|
||||
|
||||
### 6.2 中控
|
||||
需**分别**起 agent 与 hub(与 PM2 合并启动不同):
|
||||
|
||||
```bash
|
||||
# 子代理:scripts/start_agents_3screen.sh 或每目录手动 agent.py
|
||||
# 中控:
|
||||
cd /opt/crypto_monitor/manual_trading_hub
|
||||
bash scripts/run_hub.sh
|
||||
# 或
|
||||
bash scripts/start_hub_screen.sh # screen 会话 mt-hub
|
||||
```
|
||||
|
||||
---
|
||||
@@ -211,9 +202,7 @@ cd /opt/crypto_monitor
|
||||
git pull
|
||||
cd manual_trading_hub
|
||||
.venv/bin/pip install -r requirements.txt
|
||||
pm2 restart manual-trading-hub
|
||||
# 若改了 agent 依赖:
|
||||
pm2 restart manual-agent-binance manual-agent-okx manual-agent-gate manual-agent-gate-bot
|
||||
pm2 restart ecosystem.config.cjs
|
||||
```
|
||||
|
||||
- **`hub_settings.json`**、**`.env`** 不在 Git 中,`git pull` 不会覆盖。
|
||||
|
||||
Reference in New Issue
Block a user