# ============================================================================= # 中控 hub.py / 子代理 agent.py 环境变量模板(可提交 Git) # 使用:cp .env.example .env 后填入真实值;启动前由 shell export 或 dotenv 加载 # 云服务器完整说明:见 云服务器部署说明.md # ============================================================================= # hub.py 监听 HUB_HOST=0.0.0.0 HUB_PORT=5100 # 仅本机访问可改为 127.0.0.1,并设 HUB_TRUST_LAN=false # 与四实例 .env 中 HUB_BRIDGE_TOKEN 相同的长随机串 # 中控 → 各 Flask:请求头 X-Hub-Token # 中控 → 各子代理:请求头 X-Control-Token(可与子代理 CONTROL_TOKEN 同值,hub 会用 HUB_BRIDGE_TOKEN 转发) # 中控「打开实例」SSO 链接也复用此令牌签名(默认 2 小时内有效、单次使用) # HUB_BRIDGE_TOKEN=your-long-random-token # HUB_SSO_TTL_SEC=7200 # 逗号分隔的账户 id,强制关闭(不参与监控/全局全平;设置页对应行勾选框灰掉) # 留空 = 不强制关闭;仅不想用 OKX 时可设 HUB_DISABLED_IDS=1 HUB_DISABLED_IDS= # true=允许 RFC1918 私网访问中控页面;false=仅 127.0.0.1(反代须指向 127.0.0.1:5100) HUB_TRUST_LAN=true # 云服务器用域名/HTTPS 反代访问中控时设为 true(否则公网可能看到 {"detail":"forbidden"}) # HUB_ALLOW_PUBLIC=true # 中控 Web 登录(密码非空即启用;反代到公网时务必设置用户名+密码) # HUB_USERNAME=admin # HUB_PASSWORD=your-strong-password-here # 会话签名密钥(建议单独随机串;未设则用用户名+密码拼接) # HUB_SESSION_SECRET=another-long-random-string # HTTPS 反代时建议 true:仅 HTTPS 访问会带 Secure Cookie;http://内网IP:5100 仍可登录 # HUB_COOKIE_SECURE=true # 登录保持天数(默认 7) # HUB_SESSION_DAYS=7 # 本地导航 / 门户 iframe 嵌入中控(默认 true) # HUB_ALLOW_EMBED=true # 限制可嵌入的父页来源(逗号分隔);默认 * 不限制 # HUB_EMBED_ORIGINS=http://192.168.8.6:5070,https://hub.example.com # 四实例允许被中控 iframe 内嵌(各 crypto_monitor_*/.env,与 hub 同步部署) # APP_ALLOW_HUB_EMBED=true # HUB_EMBED_PARENT_ORIGINS=https://hub.example.com # HTTPS 跨子域 iframe 时四实例还须 APP_COOKIE_SECURE=true(见 crypto_monitor_*/.env.example) # 浏览器打开的实例/复盘链接(hub_settings 里 flask_url 为 127.0.0.1 时替换为对外地址) # 局域网:填内网 IP,见《局域网与反代部署说明.md》 # HUB_PUBLIC_ORIGIN=http://192.168.1.100 # 反代:各实例 flask_url 建议直接写 https 域名,可不设此项 # HUB_PUBLIC_HOST=192.168.1.100 # HUB_PUBLIC_SCHEME=http # 四实例网页登录(直链反代/IP:端口 访问时输入;中控点「打开实例」免输) # 各 crypto_monitor_*/.env 统一:APP_USERNAME=... APP_PASSWORD=... # 监控区:hub 后台每 N 秒聚合一次,浏览器经 SSE 收版本号再拉快照(默认 5 秒) # HUB_BOARD_POLL_INTERVAL=5 # 单次聚合超时(秒,默认 agent 8 / flask 10 / board 45) # HUB_AGENT_TIMEOUT=8 # HUB_FLASK_TIMEOUT=10 # HUB_BOARD_TIMEOUT=45 # 为 false 时不拉各实例 /api/price_snapshot(关键位门控简化为「-」,首屏明显更快) # HUB_BOARD_KEY_PRICES=true # ---------- 行情区 K 线库(data/hub_kline.db,默认保留 15 天)---------- # HUB_KLINE_RETENTION_DAYS=15 # HUB_KLINE_DB_PATH=/opt/crypto_monitor/manual_trading_hub/data/hub_kline.db # 行情区后台轮询 + SSE(对齐监控区 board) # HUB_CHART_POLL_INTERVAL=5 # HUB_CHART_POSITION_TIMEFRAME=5m # HUB_CHART_WATCH_TTL_SEC=45 # HUB_CHART_MAX_SERIES_PER_TICK=24 # --- 子代理 agent.py(在 crypto_monitor_* 目录启动时另设 EXCHANGE / PORT)--- # 与 HUB_BRIDGE_TOKEN 一致时可只设其一;agent 校验请求头 X-Control-Token # CONTROL_TOKEN=your-long-random-token # EXCHANGE=binance # PORT=15200 # HOST=127.0.0.1 # ---------- 中控 AI 教练(/ai,模块 hub_ai/,存 hub_ai_*.json)---------- # 与四实例相同变量名;默认 OpenAI 兼容网关(改 AI_PROVIDER=ollama 可走本机 Ollama) # 详见 manual_trading_hub/AI教练说明.md 与仓库根 AI复盘与模型配置说明.md AI_TIMEOUT_SECONDS=120 # AI 提供方:openai(默认,OpenAI 兼容网关)| ollama(本机 Ollama) AI_PROVIDER=openai OPENAI_API_BASE=https://op.bz121.com/v1 OPENAI_API_KEY=你的密钥 OPENAI_MODEL=gemma4:e4b # 本机 Ollama(AI_PROVIDER=ollama 时使用) OLLAMA_API=http://127.0.0.1:11434/api/generate AI_MODEL=huihui_ai/deepseek-r1-abliterated:latest # 交易日切分(与四实例 TRADING_DAY_RESET_HOUR 一致,定义「今日总结」的日期) TRADING_DAY_RESET_HOUR=8