Files
sanguo_vnpy_v2/docs/archive/deployment/vps-native-brain.md
T
claude_dev f6ca85e937 docs(audit): 文档审计吸收批——P0×2+P1×4 修复 [nas]
- P0-2 触及面矩阵修正(three-env §12): sanguo_api+frontend→🔴——VPS 常驻
  sanguo-api 生产控制台(runbook §7.1/§7.6 09-25 勘误「本就常驻跑纯 API」,
  vps-deploy.yml 每次部署重启 sanguo-api 实证)+公网前端 dist; sanguo_web=legacy
  平行后端非「前端」; orchestrator→🟡 随 api 常驻加载(app.py:15 import 实证)。
  同病 .claude/CLAUDE.md 判定行+reload 节一并修正(两处)
- P0-1 README 入口: 生产命令勘误(勿起 sanguo_web legacy 后端,架构审计 P0-3
  定性危险)+admin123 凭据指引删除+api/user_guide 断链节改指文档中心
- P1 reload 旧任务名 sanguo-bs-eod→sanguo-bs-daily(three-env §4+session-guide
  §6, 2026-08-20 重组遗留)
- P1 session-guide: smoke_e2e.py 死引用(da32cca 审计卫生批已删)→CI nas-verify
  手动等效探针(免凭据版);dispatch 样例补 confirm 必填字段
- P1 nas-deploy-plan §四: docker run 补 --init+数据挂载/删 8080(现役容器
  docker inspect 实证 Init=true 仅 8000 双挂载);§五外网链路标废(首尔入口 502)
- env-version-matrix VPS 角色+ops-README BRIDGE_URL: miniQMT/FastAPI-bridge
  退役标注(09-08)
- three-env §1 NAS 路径 stock→homes/admin(promote.sh:19 实证)+§3.1 模块
  计数 13→15

审计源: audit/20261001_docs_audit/(P0-1/P0-2/P1-1~4) +
audit/20261001_architecture_code_audit/(P0-1)

Co-Authored-By: Claude Code <notify@anthropic.com>
2026-10-01 09:08:18 +08:00

5.0 KiB
Raw Blame History

VPS 原生大脑部署(Option B:vnpy native,无 docker)

2026-07-15 落地。生产大脑从 NAS 迁到 VPS Windows 宿主原生运行(非容器), vnpy 4.4.0 源码引用 + vnpy_qmt 进程内直连 miniQMT(同机同会话)。三机角色切分: VPS=实盘生产 / Mac=开发 / NAS=研究·回测·测试备份(NAS live.enabled=false)。

头号风险已实证解除

vnpy_qmt 0.3.3 只测过 vnpy 3.5;本项目 vnpy 4.4.0。逐符号核对全部 vnpy import (BaseGateway / OrderData / Status 枚举成员 / ZoneInfo 等)对 4.4.0 源码零漂移; VPS 真机 from vnpy_qmt import QmtGateway import+实例化通过,连真实 miniQMT 读到真实 账户(66639661 余额 9999998.51)+ 持仓(600000.SSE 200股 / 000001.SZSE 100股,与 bridge 完全一致)+ 7551 合约。无需改 gateway 代码。

VPS 安装清单(C:\sanguo_vnpy_v2\)

组件 来源 位置
vnpy 4.4.0 源码 项目内 vnpy_v4.4.0/(纯 Python,零 C 扩展,scp) C:\sanguo_vnpy_v2\vnpy_v4.4.0\
sanguo_* 大脑包 项目 tar(scp) C:\sanguo_vnpy_v2\sanguo_*\
vnpy-qmt 0.3.3 pip(阿里镜像) site-packages
TA-Lib 0.6.8 pip(self-contained wheel) site-packages
vnpy_ctastrategy 1.4.1 / vnpy_sqlite 1.1.3 pip site-packages
pyarrow 24.0.0 / pandas / numpy / fastapi / uvicorn / sqlalchemy / apscheduler / auth(web) pip site-packages
数据(策略标的 raw/qfq 日线 parquet) NAS 同步→VPS C:\sanguo_vnpy_v2\data\{raw,qfq}\{year}\

pip 镜像必配:VPS 默认直连 pypi.org(从国内极慢/超时)。已配 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/(写入 C:\Users\Administrator\AppData\Roaming\pip\pip.ini)。

配置本地化(env 覆盖,保 git 真相)

不改部署态 yaml,全部走环境变量(代码见 sanguo_data/config.py::load_config + sanguo_api/main.py::build_app):

env 作用 VPS 值
SANGUO_DATA_ROOT 重映射 daily/raw/qfq/15min*/vnpy_db 到该根下 C:\sanguo_vnpy_v2\data
SANGUO_DB_PATH API 的 db_path(paper_* 表+回测结果) C:\sanguo_vnpy_v2\data\backtest_results.db
SANGUO_LIVE_ENABLED live 总开关 true
SANGUO_BRIDGE_URL 影子下单 bridge 地址(本机,不再走 Mac tunnel) http://127.0.0.1:8765
BRIDGE_TOKEN bridge 鉴权(live_orchestrator 已有 env fallback) <BRIDGE_TOKEN>

不设这些 env(NAS/Mac)则用 yaml 原值 → 三机共用同一份 git config,零漂移。

服务(schtasks,脱离 ssh 持久,开机自启)

任务 命令 端口
sanguo-api powershell -File C:\sanguo_vnpy_v2\run_api.ps1(设 env + run_web.py) 8000(/docs、/api/v1/*)
sanguo-bridge C:\run_bridge.ps1(xtquant→miniQMT 执行通道) 8765
sanguo-caddy C:\run_caddy.ps1(反代 bridge.mysanguo.top) 80/443

管理(同 bridge):

ssh -i ~/.ssh/id_ed25519 Administrator@49.232.102.198 \
  "schtasks /end /tn sanguo-api; schtasks /run /tn sanguo-api"

验证记录(2026-07-15,全部通过)

  1. import sanguo_api.main + create_app() — 大脑原生可导入。
  2. schtasks sanguo-api 常驻,:8000/docs → 200。
  3. DB 自动建库(init_db 幂等),6 张 paper_* 表齐。
  4. live_step(2026-07-13)全链路:warmup 重放 2024-01-01→07-12 → 读 raw/qfq bar (pyarrow)→ PaperEngine.step → 存 daily_balance(cash=1M/equity=1M)。当日 DoubleMa 无交叉信号→无交易(正常)。
  5. 影子 transport:brain 的 BridgeClient(localhost:8765).get_account/get_positions 读到真实 miniQMT 账户/持仓 → brain→本机 bridge→miniQMT transport 通(POST /order 同 transport,策略出信号即镜像)。

数据 staging(NAS→VPS)

NAS 是数据权威(baostock 5.5 年干净数据)。策略标的的 raw+qfq 日线 parquet 从 NAS rsync 到 Mac 再 scp 到 VPS({raw,qfq}/{year}/sh{sym}_daily.parquet,每股全历史 ~200KB)。 当前已 staging:600000(2021-2026)。新增标的照此同步。

光猫拦 NAS→VPS,故走 NAS→Mac→VPS 两跳。Mac tunnel(旧 NAS→VPS bridge 通道)已废弃 (brain 在 VPS 本机,不再需要)。

Phase 2(vnpy_qmt 进程内换 bridge)—— 暂缓

用户初衷"vnpy_qmt 直接对接 miniQMT、bridge 废弃"针对的是 bridge 跨机依赖(Mac tunnel)。 现在 brain+bridge 同机 VPS(localhost),跨机问题已消除,bridge 退化为本机执行适配器 (仍 vnpy 原生、wrap xtquant)。进程内换 vnpy_qmt 的收益仅是少一个本地进程 + 一个 localhost HTTP 跳(延迟可忽略),代价是要写 async→sync 适配器 + 把 xtquant 生命周期塞进 brain 进程 (xtquant 崩溃会拖垮 brain,反而损失进程隔离)。故暂缓,bridge 保留为本机执行通道。 待 bridge 本机化成为实测瓶颈再重启 Phase 2。