8.2 KiB
中控 · 局域网与反代部署说明
本文说明在 局域网(IP + 端口) 与 宝塔/Nginx 反代(域名) 两种场景下,如何配置中控与各实例,并实现:
- 从中控 点「实例 / 策略交易 / 复盘」→ 免输入 实例网页密码(SSO 临时链接,默认 2 小时 内有效、单次使用)
- 浏览器直链 实例地址(反代域名或
http://IP:端口)→ 进入/login,输入统一APP_USERNAME/APP_PASSWORD
SSO 签名复用 HUB_BRIDGE_TOKEN(与中控调实例 API 相同,四所 .env 与 manual_trading_hub/.env 保持一致)。
云服务器(VPS) 的硬件、安全组、宝塔、环境变量与验收清单见 云服务器部署说明.md。
一、两种访问方式对照
| 项目 | 局域网 | 反代(域名) |
|---|---|---|
| 中控地址 | http://内网IP:5100 |
https://hub.你的域名.com |
| 实例地址(浏览器) | http://内网IP:5004 等 |
https://okx.你的域名.com 等 |
hub_settings 里 flask_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_url 填 127.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,不要对公网暴露 15200~15203。
三、局域网部署(IP + 端口)
适用:家里/办公室内网,例如服务器 192.168.8.6。
3.1 端口约定(示例,以你实际为准)
| 服务 | 端口 |
|---|---|
| 中控 hub | 5100 |
| OKX Flask | 5004 |
| 币安 Flask | 5001 |
| Gate 训练 | 5000 |
| Gate 趋势 | 5002 |
| agent | 15200~15203(仅本机) |
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_url 为 http://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 访问方式
- 中控:
http://192.168.8.6:5100→ 登录中控 → 点「实例」→ 新标签进入 OKX,无需再输实例密码。 - 直链:
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.1 或 0.0.0.0 本机端口,由 Nginx 对外提供 HTTPS。
4.2 宝塔操作要点
- 每个域名 → 反向代理 → 目标
http://127.0.0.1:对应端口。 - 申请 SSL(Let’s Encrypt)。
- 不要再给实例站加一层宝塔「访问密码」(避免与 Flask
/login重复);直链鉴权用APP_USERNAME/APP_PASSWORD即可。 - 自定义 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_url;flask_url用域名时,hub 会请求https://okx.example.com/api/...(同机可通即可)。
同机部署时也可:
flask_url:http://127.0.0.1:5004HUB_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 访问方式
https://hub.example.com登录中控 → 点「打开实例」→https://okx.example.com/hub-sso?...→ 进入系统。- 地址栏直接输入
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 + 对应实例 Flask(hub_bridge 与 /hub-sso 在实例进程内)。
七、验收清单
- 四实例
.env与中控HUB_BRIDGE_TOKEN一致 - 四实例
APP_USERNAME/APP_PASSWORD一致 - 局域网:
flask_url为http://IP:端口;反代:flask_url为https://域名 - 已登录中控 → 点「实例」→ 无实例登录页
- 隐身窗口直链实例域名/IP → 有
/login - 复制「打开实例」完整 URL,用过一次后再开 → 失效并回到登录页
八、常见问题
Q:从中控打开仍要登录?
- 检查实例是否已
git pull并重启(需有/hub-sso)。 HUB_BRIDGE_TOKEN是否四所一致。hub_settings里该账户key是否与install_on_app(exchange=...)一致(如okx、binance、gate、gate_bot)。
Q:直链也要登录中控?
- 不应。直链只走实例
/login。若跳到中控,检查是否点错链接或 Nginx 配错站点。
Q:链接多久失效?
- 签发后 2 小时内且 未使用过;过期或已用需在中控重新点打开。