Files
crypto_monitor/manual_trading_hub/局域网与反代部署说明.md
T
2026-05-25 11:57:34 +08:00

8.2 KiB
Raw Blame History

中控 · 局域网与反代部署说明

本文说明在 局域网(IP + 端口)宝塔/Nginx 反代(域名) 两种场景下,如何配置中控与各实例,并实现:

  • 从中控 点「实例 / 策略交易 / 复盘」→ 免输入 实例网页密码(SSO 临时链接,默认 2 小时 内有效、单次使用
  • 浏览器直链 实例地址(反代域名或 http://IP:端口)→ 进入 /login,输入统一 APP_USERNAME / APP_PASSWORD

SSO 签名复用 HUB_BRIDGE_TOKEN(与中控调实例 API 相同,四所 .envmanual_trading_hub/.env 保持一致)。

云服务器(VPS 的硬件、安全组、宝塔、环境变量与验收清单见 云服务器部署说明.md


一、两种访问方式对照

项目 局域网 反代(域名)
中控地址 http://内网IP:5100 https://hub.你的域名.com
实例地址(浏览器) http://内网IP:5004 https://okx.你的域名.com
hub_settingsflask_url 建议写 http://内网IP:端口 建议写 https://该实例域名(与浏览器一致)
中控本机调实例 API 可与浏览器相同;同机也可用 http://127.0.0.1:端口 + HUB_PUBLIC_ORIGIN 同机可用 127.0.0.1:端口 或域名(需 Nginx 转发 X-Hub-Token
HUB_PUBLIC_ORIGIN flask_url127.0.0.1必填 http://内网IP flask_url 已是完整域名,可不设
宝塔 可不装反代,直连端口 每实例一个站点 + SSL;中控单独站点
直链登录 实例 /login 实例 /login
从中控打开 /hub-sso?token=... 自动登录 同上

二、共用环境变量(必配)

2.1 中控 manual_trading_hub/.env

HUB_BRIDGE_TOKEN=请填一长串随机字符
HUB_USERNAME=admin          # 中控登录(建议设置)
HUB_PASSWORD=你的中控密码
HUB_SSO_TTL_SEC=7200        # 可选,默认 7200 = 2 小时

2.2 四个实例 crypto_monitor_*/.env

每个目录相同(直链时用这套登录实例网页):

HUB_BRIDGE_TOKEN=与中控完全相同
APP_USERNAME=统一用户名
APP_PASSWORD=统一密码
# 云上切勿 APP_AUTH_DISABLED=true

2.3 子代理

CONTROL_TOKEN 可与 HUB_BRIDGE_TOKEN 相同;子代理只监听 127.0.0.1不要对公网暴露 1520015203


三、局域网部署(IP + 端口)

适用:家里/办公室内网,例如服务器 192.168.8.6

3.1 端口约定(示例,以你实际为准)

服务 端口
中控 hub 5100
OKX Flask 5004
币安 Flask 5001
Gate 训练 5000
Gate 趋势 5002
agent 1520015203(仅本机)

3.2 系统设置 hub_settings.json(网页「系统设置」保存)

浏览器里你会打开的地址,应使用 内网 IP,不要用 127.0.0.1(否则别的电脑上的浏览器会连到你本机):

{
  "flask_url": "http://192.168.8.6:5004",
  "agent_url": "http://127.0.0.1:15201"
}

说明:

  • flask_url:给浏览器用的实例页地址 → 写 http://192.168.8.6:端口
  • agent_url:仅中控服务器访问 → 写 http://127.0.0.1:1520x

各账户按上表改端口即可。

3.3 可选:flask_url 仍写 127.0.0.1 时

若坚持 flask_urlhttp://127.0.0.1:5004(仅 hub 与本机 Flask 同机),在中控 .env 增加:

HUB_PUBLIC_ORIGIN=http://192.168.8.6

中控会把返回给前端的链接从 127.0.0.1 替换为 192.168.8.6(端口保留)。

3.4 访问方式

  1. 中控:http://192.168.8.6:5100 → 登录中控 → 点「实例」→ 新标签进入 OKX,无需再输实例密码。
  2. 直链:http://192.168.8.6:5004 → 出现登录页 → 输入 APP_USERNAME / APP_PASSWORD

3.5 防火墙

内网自用:放行 5100、各 APP_PORT不要对公网开放 agent 端口。


四、反代部署(域名 + 宝塔)

适用:云服务器,对外用 HTTPS 域名。

4.1 域名规划(示例)

站点 反代到
hub.example.com 127.0.0.1:5100
okx.example.com 127.0.0.1:5004
binance.example.com 127.0.0.1:5001
gate.example.com 127.0.0.1:5000
gate-bot.example.com 127.0.0.1:5002

Flask / hub 进程仍只监听 127.0.0.10.0.0.0 本机端口,由 Nginx 对外提供 HTTPS。

4.2 宝塔操作要点

  1. 每个域名 → 反向代理 → 目标 http://127.0.0.1:对应端口
  2. 申请 SSLLets Encrypt)。
  3. 不要再给实例站加一层宝塔「访问密码」(避免与 Flask /login 重复);直链鉴权用 APP_USERNAME / APP_PASSWORD 即可。
  4. 自定义 Nginx 配置中保留 WebSocket/大 body 如需;确保代理头:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

中控请求实例 API 时会带 X-Hub-Token,Nginx 默认会转发请求头,一般无需额外配置。

4.3 hub_settings 示例(反代)

{
  "flask_url": "https://okx.example.com",
  "agent_url": "http://127.0.0.1:15201"
}
  • 浏览器与 SSO 链接使用 https://okx.example.com
  • 中控服务器拉 /api/hub/* 仍走本机 agent_urlflask_url 用域名时,hub 会请求 https://okx.example.com/api/...(同机可通即可)。

同机部署时也可:

  • flask_url: http://127.0.0.1:5004
  • HUB_PUBLIC_ORIGIN: https://okx.example.com

仅当所有实例共用一个对外 IP、靠端口区分时才适合用 HUB_PUBLIC_ORIGIN每实例独立域名时,请直接在 flask_url 写该实例域名。

4.4 中控 .env(反代建议)

HUB_BRIDGE_TOKEN=...
HUB_USERNAME=...
HUB_PASSWORD=...
HUB_COOKIE_SECURE=true          # 中控为 HTTPS 时建议开启

4.5 访问方式

  1. https://hub.example.com 登录中控 → 点「打开实例」→ https://okx.example.com/hub-sso?... → 进入系统。
  2. 地址栏直接输入 https://okx.example.com/login → 实例账号密码。

五、SSO 行为说明(2 小时)

说明
有效期 默认 7200 秒(2 小时)HUB_SSO_TTL_SEC 可改
单次使用 同一链接成功登录后 不能再用;需在中控重新点「打开实例」
密钥 复用 HUB_BRIDGE_TOKEN
直链 无 token → 正常 /login

六、部署与重启顺序

cd /opt/crypto_monitor
# 各实例
pm2 restart crypto_okx crypto_binance crypto_gate crypto_gate_bot   # 名称以你为准

cd manual_trading_hub
pm2 restart manual-trading-hub manual-agent-binance manual-agent-okx manual-agent-gate manual-agent-gate-bot

hub_settings.env 后重启 hub + 对应实例 Flaskhub_bridge/hub-sso 在实例进程内)。


七、验收清单

  • 四实例 .env 与中控 HUB_BRIDGE_TOKEN 一致
  • 四实例 APP_USERNAME / APP_PASSWORD 一致
  • 局域网:flask_urlhttp://IP:端口;反代:flask_urlhttps://域名
  • 已登录中控 → 点「实例」→ 实例登录页
  • 隐身窗口直链实例域名/IP → /login
  • 复制「打开实例」完整 URL,用过一次后再开 → 失效并回到登录页

八、常见问题

Q:从中控打开仍要登录?

  • 检查实例是否已 git pull 并重启(需有 /hub-sso)。
  • HUB_BRIDGE_TOKEN 是否四所一致。
  • hub_settings 里该账户 key 是否与 install_on_app(exchange=...) 一致(如 okxbinancegategate_bot)。

Q:直链也要登录中控?

  • 不应。直链只走实例 /login。若跳到中控,检查是否点错链接或 Nginx 配错站点。

Q:链接多久失效?

  • 签发后 2 小时内且 未使用过;过期或已用需在中控重新点打开。

更多故障见 常见问题.md部署文档.md