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>
This commit is contained in:
+2
-2
@@ -149,7 +149,7 @@ NAS 上用于本项目部署的目录有两个(容器挂载源):
|
|||||||
> **职责边界(所有 session 必须遵守)**:开发/数据/策略 session 改完代码 `git push` 即完成(NAS 自动验证,到此为止);**VPS prod 部署绝不自动**,必须 nas-verify 绿后由人确认触发 `vps-deploy.yml`。**业务 session 不要自己推 VPS**(push 只到 NAS);推 VPS 是运维 agent + 人协作的决策。
|
> **职责边界(所有 session 必须遵守)**:开发/数据/策略 session 改完代码 `git push` 即完成(NAS 自动验证,到此为止);**VPS prod 部署绝不自动**,必须 nas-verify 绿后由人确认触发 `vps-deploy.yml`。**业务 session 不要自己推 VPS**(push 只到 NAS);推 VPS 是运维 agent + 人协作的决策。
|
||||||
|
|
||||||
> **commit 必须打环境标签(CI 强制,所有 session 必读)**:每条 commit message 末尾带 `[vps]`(VPS 也中招,含通用代码,待推 prod)或 `[nas]`(NAS/docker 专属,VPS 不中招)。`ci-cd.yml` 的 `enforce-label` 步骤:本次 push 的 commit 无标签 → **CI 直接 fail**(merge commit 豁免)。
|
> **commit 必须打环境标签(CI 强制,所有 session 必读)**:每条 commit message 末尾带 `[vps]`(VPS 也中招,含通用代码,待推 prod)或 `[nas]`(NAS/docker 专属,VPS 不中招)。`ci-cd.yml` 的 `enforce-label` 步骤:本次 push 的 commit 无标签 → **CI 直接 fail**(merge commit 豁免)。
|
||||||
> - **判定**:维度是「VPS 运行时是否触发」,不是「文件改了没」。触及面清单见 `docs/three-env-code-promote.md` §12(VPS 触及=data/backtest/portfolio.runner_backtest+runner_live/live/trader/provider/scripts.qmt_relogin;不触及=orchestrator/api.web/web前端/docker/.gitea)。
|
> - **判定**:维度是「VPS 运行时是否触发」,不是「文件改了没」。触及面清单见 `docs/three-env-code-promote.md` §12(VPS 触及=data/backtest/portfolio.runner_backtest+runner_live/live/trader/provider/scripts.qmt_relogin+**api+前端**——VPS 常驻 sanguo-api 生产控制台+挂公网前端 dist,2026-10-01 勘误;弱触及=orchestrator 随 api 常驻加载;不触及=web(legacy 已退役)/docker/.gitea)。
|
||||||
> - **`[vps]` 触发链**(Gitea 无 approval gate,用 issue+tag 替代 GitHub 的 action_required 黄色):nas-verify 绿后 CI 自动开/更新 `[待推VPS]` issue(**open=黄/待推**,持久可见);人工/agent 推 `vps-deploy.yml` 成功 → 打 `vps-deployed` tag + 自动关 issue(**close=绿/已推**)。CI run 保持绿(NAS 部署成功不污染)。
|
> - **`[vps]` 触发链**(Gitea 无 approval gate,用 issue+tag 替代 GitHub 的 action_required 黄色):nas-verify 绿后 CI 自动开/更新 `[待推VPS]` issue(**open=黄/待推**,持久可见);人工/agent 推 `vps-deploy.yml` 成功 → 打 `vps-deployed` tag + 自动关 issue(**close=绿/已推**)。CI run 保持绿(NAS 部署成功不污染)。
|
||||||
> - **查 VPS 还差哪些**:`git log vps-deployed..HEAD --grep='\[vps\]'`(VPS 版本真相 = 移动 tag `vps-deployed`,指向最后部署 VPS 的 sha)。
|
> - **查 VPS 还差哪些**:`git log vps-deployed..HEAD --grep='\[vps\]'`(VPS 版本真相 = 移动 tag `vps-deployed`,指向最后部署 VPS 的 sha)。
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ bash scripts/nas_sync/promote.sh --module sanguo_portfolio --target nas # 单
|
|||||||
```
|
```
|
||||||
手动晋升/rollback/数据铁律 runbook:`docs/three-env-code-promote.md`
|
手动晋升/rollback/数据铁律 runbook:`docs/three-env-code-promote.md`
|
||||||
|
|
||||||
**reload**:VPS 无常驻 web,代码下次 schtask/回测启动自动生效;立即让采集生效:
|
**reload**:采集/回测=一次性任务,下次 schtask/启动自动生效;**VPS 常驻进程须显式重启**(2026-10-01 勘误:sanguo-api 生产控制台常驻中,改 api/orchestrator/前端后须 `schtasks /end /tn sanguo-api && schtasks /run /tn sanguo-api`)。立即让采集生效:
|
||||||
`ssh 49.232.102.198 'schtasks /end sanguo-bs-daily && schtasks /run sanguo-bs-daily'`(2026-08-20 重组:bs-eod+bs-fund 已合并为 sanguo-bs-daily,18:05 串行 eod→fund)
|
`ssh 49.232.102.198 'schtasks /end sanguo-bs-daily && schtasks /run sanguo-bs-daily'`(2026-08-20 重组:bs-eod+bs-fund 已合并为 sanguo-bs-daily,18:05 串行 eod→fund)
|
||||||
|
|
||||||
### NAS SSH / Docker 访问
|
### NAS SSH / Docker 访问
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ python run_web.py
|
|||||||
uvicorn sanguo_web.api:app --host 0.0.0.0 --port 8000 --workers 2
|
uvicorn sanguo_web.api:app --host 0.0.0.0 --port 8000 --workers 2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> ⚠️ **2026-10-01 勘误(audit/20261001_docs_audit/ P0-1)**:上方「生产模式」命令启动的是 **`sanguo_web` legacy 平行后端**——已退役、生产不部署、自带硬编码密钥/默认口令/CORS 全开(架构审计 P0-3),**勿按此启动**。现行生产入口=`run_web.py`(`sanguo_api.main:create_app` 工厂,单进程 :8000,NAS 容器与 VPS sanguo-api 同款)。
|
||||||
|
|
||||||
## API 文档
|
## API 文档
|
||||||
|
|
||||||
启动服务后访问:
|
启动服务后访问:
|
||||||
@@ -113,12 +115,7 @@ uvicorn sanguo_web.api:app --host 0.0.0.0 --port 8000 --workers 2
|
|||||||
|
|
||||||
## 认证
|
## 认证
|
||||||
|
|
||||||
默认登录凭据:
|
> ⚠️ 2026-10-01 勘误:本节为 07 月历史内容。现行认证=`sanguo_api` JWT(凭据在 `config/backtest.yaml` auth 段 bcrypt hash,**不入库不写文档**);`sanguo_web` 的 admin/admin123 默认口令随该后端一并退役。
|
||||||
|
|
||||||
- **用户名**: `admin`
|
|
||||||
- **密码**: `admin123`
|
|
||||||
|
|
||||||
**⚠️ 重要**: 首次登录后请立即修改密码!
|
|
||||||
|
|
||||||
## WebSocket 连接
|
## WebSocket 连接
|
||||||
|
|
||||||
@@ -156,10 +153,8 @@ pytest tests/ -v
|
|||||||
|
|
||||||
详细开发指南请查看:
|
详细开发指南请查看:
|
||||||
|
|
||||||
|
- [文档中心索引](docs/README.md)
|
||||||
- [开发文档](docs/development.md)
|
- [开发文档](docs/development.md)
|
||||||
- [API 设计文档](docs/api/README.md)
|
|
||||||
- [部署文档](docs/deployment/README.md)
|
|
||||||
- [用户指南](docs/user_guide/README.md)
|
|
||||||
|
|
||||||
## 主要功能模块
|
## 主要功能模块
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
> 创建:2026-07-14。目的:记录三机 Python + 关键依赖版本现状,暴露不一致,给出 Lock 建议。
|
> 创建:2026-07-14。目的:记录三机 Python + 关键依赖版本现状,暴露不一致,给出 Lock 建议。
|
||||||
> 数据来源:Mac venv311 + NAS 容器均经实地 `pip list` 核实;VPS 基于部署文档 `vps-production-runbook.md`,未本轮直接 SSH 复核(SSH 不通)。
|
> 数据来源:Mac venv311 + NAS 容器均经实地 `pip list` 核实;VPS 基于部署文档 `vps-production-runbook.md`,未本轮直接 SSH 复核(SSH 不通)。
|
||||||
|
> ⚠️ **2026-10-01 注(audit/20261001_docs_audit/):本文 VPS 侧快照截至 07 月,架构已大变**——miniQMT 于 09-08 退役、现役=大QMT 桥栈(XtItClient+redis RPC);VPS 常驻 sanguo-api 生产控制台+live/shadow supervisor 跑 17 个 schtask 采集。**VPS 现势以 runbook §1/§7 为准**,本文 §12 快照仅作历史参照(NAS 数据副本等条目已被现实超越)。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@
|
|||||||
| **Mac Mini** | 开发 + 测试 | 3.11.15(venv311) | `./venv311/`(项目内) | 实地 `pip list` |
|
| **Mac Mini** | 开发 + 测试 | 3.11.15(venv311) | `./venv311/`(项目内) | 实地 `pip list` |
|
||||||
| Mac 系统 Python | 不参与项目 | 3.14.6(homebrew)/ 3.9.6(/usr/bin) | — | `python3 --version` |
|
| Mac 系统 Python | 不参与项目 | 3.14.6(homebrew)/ 3.9.6(/usr/bin) | — | `python3 --version` |
|
||||||
| **NAS 容器** `sanguo_vnpy_v2` | 测试 + 回测 + 采集(生产近邻) | 3.10.20 | `/app`(容器内)= NAS `/volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2` | 实地 `docker exec ... pip list` |
|
| **NAS 容器** `sanguo_vnpy_v2` | 测试 + 回测 + 采集(生产近邻) | 3.10.20 | `/app`(容器内)= NAS `/volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2` | 实地 `docker exec ... pip list` |
|
||||||
| **Windows VPS** `49.232.102.198` | 生产(miniQMT + bridge) | 3.10.11 | `C:\Python310\python.exe` | 部署文档(本轮未直连) |
|
| **Windows VPS** `49.232.102.198` | 生产(大QMT 桥栈+常驻 api/引擎,07 月时为 miniQMT+bridge) | 3.10.11 | `C:\Python310\python.exe` | 部署文档(本轮未直连) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -111,26 +111,22 @@ ssh sanguo-nas \
|
|||||||
ssh sanguo-nas << 'EOF'
|
ssh sanguo-nas << 'EOF'
|
||||||
D=/var/packages/Docker/target/usr/bin/docker
|
D=/var/packages/Docker/target/usr/bin/docker
|
||||||
$D stop sanguo_vnpy_v2 && $D rm sanguo_vnpy_v2
|
$D stop sanguo_vnpy_v2 && $D rm sanguo_vnpy_v2
|
||||||
$D run -d --name sanguo_vnpy_v2 --restart unless-stopped \
|
$D run -d --init --name sanguo_vnpy_v2 --restart unless-stopped \
|
||||||
-p 8000:8000 -p 8080:8080 \
|
-p 8000:8000 \
|
||||||
-v /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2:/app \
|
-v /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2:/app \
|
||||||
|
-v /volume1/stock:/volume1/stock \
|
||||||
sanguo_vnpy_v2:latest
|
sanguo_vnpy_v2:latest
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
> ⚠️ NAS CPU 弱,build 编 TA-Lib + 大包约 30–60 分钟。
|
> ⚠️ NAS CPU 弱,build 编 TA-Lib + 大包约 30–60 分钟。
|
||||||
|
> ⚠️ 2026-10-01 勘误(audit P1-3):旧命令漏 `--init`——无 init 的容器后台进程会被 docker 清杀(曾实杀 02 长任务,铁律见 three-env §9);同漏 `-v /volume1/stock` 数据挂载、多挂了不存在的 8080。**现役容器参数以 `docker inspect sanguo_vnpy_v2` 实查为准**。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 五、外网链路(部署时不要动)
|
## 五、外网链路(⚠️ 已废弃,勿按此排障)
|
||||||
|
|
||||||
```
|
> 2026-10-01 勘误(audit):本节描述的「vnpy.mysanguo.top → VPS Caddy :18000 → frps → Mac frpc → socat → NAS 容器」链路已废弃(.top 首尔入口 502 残留)。**现行外网入口=VPS 常驻 sanguo-api 直绑 vnpy.mysanguo.top**(runbook §7.1);NAS 容器仅内网 192.168.2.154:8000。此节仅存档排障历史。
|
||||||
外网 https://vnpy.mysanguo.top
|
|
||||||
→ VPS Caddy :18000 → frps → Mac Mini frpc :8001
|
|
||||||
→ socat → 192.168.2.154:8000 → NAS 容器
|
|
||||||
```
|
|
||||||
|
|
||||||
**部署应用只动 NAS 容器,绝不碰 frpc / socat / Caddy。** 详见 `~/.openclaw/workspace/docs/vps-deployment-guide.md`。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -61,13 +61,17 @@ bash scripts/nas_sync/promote.sh --target nas # 全
|
|||||||
|
|
||||||
### Step 3 — NAS 冒烟(数据层/读取层改动必跑)
|
### Step 3 — NAS 冒烟(数据层/读取层改动必跑)
|
||||||
|
|
||||||
|
> ⚠️ 2026-10-01 勘误:旧文本引用 `scripts/smoke_e2e.py`——该一次性脚本已在审计卫生批(da32cca)删除,勿再找。**现行 NAS 验证=CI 自动覆盖**(nas-verify:login+strategy/list+/health+dbbardata 秒级 gate);CI 没跑(Mac 睡眠)时手动等效探针:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh sanguo-nas 'cd /volume1/stock/sanguo_vnpy_v2 && \
|
# ① NAS web API 存活(免凭据探针)
|
||||||
/var/packages/Docker/target/usr/bin/docker run --rm \
|
curl -s -o /dev/null -w "%{http_code}\n" http://192.168.2.154:8000/health # 期望 200
|
||||||
-v /volume1/stock:/volume1/stock -v $(pwd):/app \
|
# ② NAS 副本数据可读(dbbardata 600519 行数>0,与 CI 同款)
|
||||||
sanguo_vnpy_v2:with-sqlite python /app/scripts/smoke_e2e.py'
|
ssh sanguo-nas "python3 -c 'import sqlite3
|
||||||
|
c=sqlite3.connect(\"/volume1/stock/sanguo_vnpy_v2/data_backup/quant_trading.db\")
|
||||||
|
print(c.execute(\"SELECT COUNT(*) FROM dbbardata WHERE symbol=?\",(\"600519\",)).fetchone()[0])'"
|
||||||
```
|
```
|
||||||
**预期**:`RESULT: 读取 N 条 BarData`(N>0)。验证 `read_db_daily` 能读 NAS `quant_trading.db`。
|
**预期**:①=200;②=正数。容器内全量 login+strategy 探针见 ci-cd.yml `nas-verify` job(凭据不进文档)。
|
||||||
|
|
||||||
### Step 4 — VPS 落盘验证(确认新代码到 prod)
|
### Step 4 — VPS 落盘验证(确认新代码到 prod)
|
||||||
|
|
||||||
@@ -108,14 +112,18 @@ ssh 49.232.102.198 'cd C:\sanguo_vnpy_v2 && C:\Python310\python.exe -X utf8 scri
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Reload 机制(VPS 无常驻 web)
|
## 6. Reload 机制(VPS 常驻+一次性两类)
|
||||||
|
|
||||||
VPS 是**一次性任务**模型(回测 runner + 采集 schtask),**没有常驻 web 服务**。
|
> ⚠️ 2026-10-01 勘误:旧文「VPS 无常驻 web」过时——VPS 常驻 sanguo-api 生产控制台(runbook §7.1/§7.6)。
|
||||||
|
|
||||||
- 代码部署后 **下次启动自动加载**,不用 hot reload、不用重启服务。
|
- 采集/回测等**一次性任务**:代码部署后 **下次启动自动加载**。
|
||||||
- **立即让采集生效**:
|
- **sanguo-api(常驻控制台)**:改 `sanguo_api`/`sanguo_orchestrator`/前端后须显式重启:
|
||||||
```bash
|
```bash
|
||||||
ssh 49.232.102.198 'schtasks /end sanguo-bs-eod && schtasks /run sanguo-bs-eod'
|
ssh 49.232.102.198 'schtasks /end /tn sanguo-api && schtasks /run /tn sanguo-api'
|
||||||
|
```
|
||||||
|
- **立即让采集生效**(bs-eod+bs-fund 已合并为 sanguo-bs-daily,2026-08-20):
|
||||||
|
```bash
|
||||||
|
ssh 49.232.102.198 'schtasks /end sanguo-bs-daily && schtasks /run sanguo-bs-daily'
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -142,7 +150,8 @@ push master → ci-cd.yml 自动: test(pytest) → nas-deploy(推NAS后端+前
|
|||||||
⏸️ VPS 不自动推,停下等触发
|
⏸️ VPS 不自动推,停下等触发
|
||||||
推 VPS(nas-verify 绿后,触发 vps-deploy.yml,两种 approve):
|
推 VPS(nas-verify 绿后,触发 vps-deploy.yml,两种 approve):
|
||||||
人工 = Gitea UI → Actions → vps-deploy.yml → Run workflow(填 sha)
|
人工 = Gitea UI → Actions → vps-deploy.yml → Run workflow(填 sha)
|
||||||
agent = curl -H "Authorization: token $PAT" POST .../dispatches body {"ref":"master","inputs":{"sha":"<full-sha>"}}
|
agent = curl -H "Authorization: token $PAT" POST .../dispatches body {"ref":"master","inputs":{"sha":"<full-sha>","confirm":"推vps"}}
|
||||||
|
(⚠️ confirm 必填——vps-deploy.yml 口令闸门第一步校验,缺了直接 fail;仅当用户对话原话说「推vps」才可 dispatch)
|
||||||
↓ checkout 你传的 SHA(= NAS 验证过的) → promote --target vps → verify_unified_e2e
|
↓ checkout 你传的 SHA(= NAS 验证过的) → promote --target vps → verify_unified_e2e
|
||||||
```
|
```
|
||||||
- **NAS 自动**:push 即触发 ci-cd.yml;nas-verify 是秒级 gate(API 健康 + 数据可读)。runner 是 Mac(睡眠时 CI 不跑,手动 `promote --target nas` 应急)。
|
- **NAS 自动**:push 即触发 ci-cd.yml;nas-verify 是秒级 gate(API 健康 + 数据可读)。runner 是 Mac(睡眠时 CI 不跑,手动 `promote --target nas` 应急)。
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
| 机器 | 角色 | 代码路径 | 工具 |
|
| 机器 | 角色 | 代码路径 | 工具 |
|
||||||
|------|------|----------|------|
|
|------|------|----------|------|
|
||||||
| **Mac** | dev 源头(改代码) | `~/.openclaw/sanguo_projects/sanguo_vnpy_v2` | rsync/scp |
|
| **Mac** | dev 源头(改代码) | `~/.openclaw/sanguo_projects/sanguo_vnpy_v2` | rsync/scp |
|
||||||
| **NAS** | test 镜像(只读副本) | `/volume1/stock/sanguo_vnpy_v2` | rsync(LAN 快) |
|
| **NAS** | test 镜像(只读副本) | `/volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2`(容器挂载源;⚠️`/volume1/stock/sanguo_vnpy_v2`=数据备份区非代码位) | rsync(LAN 快) |
|
||||||
| **VPS** | prod 生产(实跑) | `C:\sanguo_vnpy_v2` | scp(无 rsync) |
|
| **VPS** | prod 生产(实跑) | `C:\sanguo_vnpy_v2` | scp(无 rsync) |
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -42,7 +42,7 @@ bash scripts/nas_sync/promote.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
推送内容:
|
推送内容:
|
||||||
- 模块目录(13 个): `sanguo_api sanguo_backtest sanguo_common sanguo_data sanguo_factor sanguo_live sanguo_orchestrator sanguo_portfolio sanguo_qmt_bridge sanguo_research sanguo_trader sanguo_web scripts config tests`
|
- 模块目录(15 个): `sanguo_api sanguo_backtest sanguo_common sanguo_data sanguo_factor sanguo_live sanguo_orchestrator sanguo_portfolio sanguo_qmt_bridge sanguo_research sanguo_trader sanguo_web scripts config tests`
|
||||||
- 根文件(4 个): `pyproject.toml pytest.ini requirements-lock.txt run_web.py`
|
- 根文件(4 个): `pyproject.toml pytest.ini requirements-lock.txt run_web.py`
|
||||||
|
|
||||||
### 3.2 单模块快速补推
|
### 3.2 单模块快速补推
|
||||||
@@ -59,21 +59,21 @@ bash scripts/nas_sync/promote.sh --module sanguo_portfolio
|
|||||||
|
|
||||||
## 4. Reload 机制(重要)
|
## 4. Reload 机制(重要)
|
||||||
|
|
||||||
VPS 进程模式是 **一次性任务**(回测 runner_backtest + 采集 schtask bs_eod/akshare),**无常驻 web 服务**。
|
VPS 进程分两类:**常驻**(sanguo-api 生产控制台 / live-supervisor / shadow-desk,开机自启)+ **一次性任务**(回测 runner_backtest + 采集 schtask)。⚠️ 2026-10-01 勘误:旧文「无常驻 web 服务」过时(见 §12 勘误注);旧任务名 `sanguo-bs-eod` 已于 2026-08-20 并入 `sanguo-bs-daily`。
|
||||||
|
|
||||||
| 场景 | reload 动作 |
|
| 场景 | reload 动作 |
|
||||||
|------|-------------|
|
|------|-------------|
|
||||||
| 采集 schtask(定时) | **无需操作**。下次 schtask 触发时自动加载新代码 |
|
| 采集 schtask(定时) | **无需操作**。下次 schtask 触发时自动加载新代码 |
|
||||||
| 回测任务 | **无需操作**。下次启动回测时自动加载新代码 |
|
| 回测任务 | **无需操作**。下次启动回测时自动加载新代码 |
|
||||||
| 立即让采集生效 | `schtasks /end sanguo-bs-eod && schtasks /run sanguo-bs-eod` |
|
| sanguo-api(常驻控制台) | `schtasks /end sanguo-api && schtasks /run sanguo-api`(改 sanguo_api/orchestrator/前端后必须) |
|
||||||
|
| 立即让采集生效 | `schtasks /end sanguo-bs-daily && schtasks /run sanguo-bs-daily` |
|
||||||
|
|
||||||
> 一句话: 代码部署后,**下次启动自动生效**,不用 hot reload、不用重启服务。
|
> 一句话: 代码部署后,**下次启动自动生效**;常驻进程(api/supervisor)须显式重启。
|
||||||
|
|
||||||
立即生效命令(在 VPS 上执行,通过 ssh):
|
立即生效命令(在 VPS 上执行,通过 ssh):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh 49.232.102.198 'schtasks /end sanguo-bs-eod'
|
ssh 49.232.102.198 'schtasks /end sanguo-bs-daily && schtasks /run sanguo-bs-daily'
|
||||||
ssh 49.232.102.198 'schtasks /run sanguo-bs-eod'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 5. 落盘验证
|
## 5. 落盘验证
|
||||||
@@ -88,7 +88,7 @@ ssh 49.232.102.198 'powershell -NoProfile -Command "Get-ChildItem C:\sanguo_vnpy
|
|||||||
ssh 49.232.102.198 'powershell -NoProfile -Command "Select-String -Path C:\sanguo_vnpy_v2\sanguo_common\__init__.py -Pattern SOME_TOKEN"'
|
ssh 49.232.102.198 'powershell -NoProfile -Command "Select-String -Path C:\sanguo_vnpy_v2\sanguo_common\__init__.py -Pattern SOME_TOKEN"'
|
||||||
|
|
||||||
# NAS: 查某文件
|
# NAS: 查某文件
|
||||||
ssh sanguo-nas "ls -la /volume1/stock/sanguo_vnpy_v2/sanguo_portfolio/"
|
ssh sanguo-nas "ls -la /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2/sanguo_portfolio/"
|
||||||
```
|
```
|
||||||
|
|
||||||
> 教训(memory: commit≠部署VPS): 改完代码必须晋升,否则 VPS 跑旧代码。用 `Select-String`/`grep` 验证新代码落盘。
|
> 教训(memory: commit≠部署VPS): 改完代码必须晋升,否则 VPS 跑旧代码。用 `Select-String`/`grep` 验证新代码落盘。
|
||||||
@@ -266,11 +266,15 @@ CI `enforce-label` 强制:本次 push 的 commit 必须带 `[vps]`(VPS 运
|
|||||||
| 🔴 | `sanguo_common/` | 被上述引用 |
|
| 🔴 | `sanguo_common/` | 被上述引用 |
|
||||||
| 🔴 | `scripts/data_platform/*.py` | VPS schtask 跑的采集/merge/verify |
|
| 🔴 | `scripts/data_platform/*.py` | VPS schtask 跑的采集/merge/verify |
|
||||||
| 🔴 | `scripts/qmt_relogin/` | 三层防御本体;⚠️**promote 不部署它——须手动 scp 到 `C:\sanguo_bigqmt\`**(§11.3) |
|
| 🔴 | `scripts/qmt_relogin/` | 三层防御本体;⚠️**promote 不部署它——须手动 scp 到 `C:\sanguo_bigqmt\`**(§11.3) |
|
||||||
|
| 🔴 | `sanguo_api/`(routes/app/uvicorn) | **VPS 常驻 sanguo-api**(run_api.ps1→run_web.py→:8000=生产控制台 vnpy.mysanguo.top,runbook §7.1);改后须 `schtasks /end /tn sanguo-api && schtasks /run /tn sanguo-api` |
|
||||||
|
| 🔴 | `frontend/`(Vue 源码) | VPS 挂 `frontend/dist`(公网前端);vps-deploy.yml 每次自动构建+推送+重启 sanguo-api(§13) |
|
||||||
|
| 🟡 弱触及 | `sanguo_orchestrator/` | 随 sanguo_api 常驻加载(run_web.py 单进程内存态,app.py 直接 import);VPS 控制台动作可触发,改后同样须重启 sanguo-api |
|
||||||
| 🟡 弱触及 | `requirements-lock.txt` | VPS 手动 pip 装,lock 仅参考 |
|
| 🟡 弱触及 | `requirements-lock.txt` | VPS 手动 pip 装,lock 仅参考 |
|
||||||
| 🟢 **NAS 专属**(=[nas]) | `sanguo_orchestrator/`(仅 web 启动) | VPS 不跑 web→不跑 ProcessPool |
|
| 🟢 | `sanguo_web/`(**legacy 平行后端,不是前端**) | 已退役、任何环境不部署(2026-10-01 架构审计 P0-3 待终裁处置);前端=`frontend/` |
|
||||||
| 🟢 | `sanguo_api/`(routes/app/uvicorn) `sanguo_web/`(前端) | VPS 无常驻 web |
|
|
||||||
| 🟢 | `docker/` `Dockerfile` `entrypoint.sh` `.gitea/` | VPS 无 docker |
|
| 🟢 | `docker/` `Dockerfile` `entrypoint.sh` `.gitea/` | VPS 无 docker |
|
||||||
| 🟢 | `config/`(vnpy_db 等容器 config) | VPS 用 `SANGUO_DB_PATH` env 覆盖 |
|
| 🟢 | `config/`(vnpy_db 等容器 config) | VPS 用 `SANGUO_DB_PATH` env 覆盖(backtest.yaml 仍作种子直推) |
|
||||||
|
|
||||||
|
> **⚠️ 2026-10-01 勘误(audit/20261001_docs_audit/ P0-2)**:旧矩阵曾把 `sanguo_api/`+前端整行标 🟢「VPS 无常驻 web」——**错**。VPS 一直常驻 sanguo-api(runbook §7.6 09-25 勘误原文:「本就常驻跑纯 API」),vps-deploy.yml 每次部署都构建前端 dist 推 VPS 并重启 sanguo-api。api/前端改动按上表现判 **🔴 [vps]**。同病原文当时还复制在 `.claude/CLAUDE.md`、`session-environment-guide.md`、`vps-deploy-pending.md` 三处,本轮一并修正。
|
||||||
|
|
||||||
- **混合模块**(`sanguo_portfolio/` 若只改 orchestrator 调度、`sanguo_api/` 若只改 routes)看 diff 具体文件对照上表,不整模块一刀切。
|
- **混合模块**(`sanguo_portfolio/` 若只改 orchestrator 调度、`sanguo_api/` 若只改 routes)看 diff 具体文件对照上表,不整模块一刀切。
|
||||||
- **判定 3 步**:①看 commit 标签 → ②对照触及面表 → ③问「VPS 跑这段代码吗」。
|
- **判定 3 步**:①看 commit 标签 → ②对照触及面表 → ③问「VPS 跑这段代码吗」。
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ BRIDGE_URL=http://192.168.2.101:8765 BRIDGE_TOKEN=xxx \
|
|||||||
**环境变量**:
|
**环境变量**:
|
||||||
| 变量 | 默认 | 说明 |
|
| 变量 | 默认 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| `BRIDGE_URL` | `http://192.168.2.101:8765` | bridge 基址(Mac tunnel 端点) |
|
| `BRIDGE_URL` | `http://192.168.2.101:8765` | bridge 基址。⚠️ 2026-10-01 注:此默认值指向旧 FastAPI bridge(:8765,09-08 已随 miniQMT 整体退役);现役=大QMT 桥栈 redis RPC(探针见 runbook §3/§4),本探针仅作历史工具保留 |
|
||||||
| `BRIDGE_TOKEN` | — | 设了才探 `/account`;从环境读,绝不硬编码 |
|
| `BRIDGE_TOKEN` | — | 设了才探 `/account`;从环境读,绝不硬编码 |
|
||||||
| `BRIDGE_TIMEOUT` | `8` | 单请求超时秒数 |
|
| `BRIDGE_TIMEOUT` | `8` | 单请求超时秒数 |
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user