diff --git a/docs/06-nas-infrastructure.md b/docs/06-nas-infrastructure.md index 437324c7..8ae372a0 100644 --- a/docs/06-nas-infrastructure.md +++ b/docs/06-nas-infrastructure.md @@ -448,6 +448,8 @@ cp /Volumes/stock/sanguo_vnpy/data/quant_trading.db \ ## 9. 历史 Q&A 与踩坑记录 +> ⚠️ **安全提示**:本文档中出现的 SSH 密码(sanguo123)仅限内网使用,**严禁**通过端口转发等方式暴露到公网。 + ### Q1: SSH 为什么不能用 OpenSSH,要用 dropbear? **问题现象**:SSH 连接返回 `Connection closed` 或 `Connection reset`,反复修过多次,每次重建容器就复发。 @@ -499,7 +501,9 @@ ssh admin@192.168.2.154 "/usr/local/bin/docker ps" 2. 容器可写层的 pip 包在容器删除后会丢失,但 `docker restart` 不会丢 3. 灵活性:可以随时调整版本而不重建镜像 -**代价**:每次容器重建后首次启动多约 30 秒安装时间。 +**已缓解**:entrypoint.sh 已移除 `set -e`,即使安装失败也不会导致容器退出,其他服务仍可正常启动。 + +**改进方向**(司马懿评审):将 `vnpy_ctastrategy`、`vnpy_sqlite` 加入 `requirements-extra.txt`,`dropbear-bin` 加入 Dockerfile apt 安装层,彻底消除网络依赖。 --- @@ -523,18 +527,20 @@ ssh admin@192.168.2.154 "/usr/local/bin/docker ps" 1. 先用 `--security-opt seccomp=unconfined` — 不够,OpenSSH 内部的 seccomp-bpf 不受 Docker seccomp profile 控制 2. 改用 `--privileged` — 解决了所有问题 -**风险**:`--privileged` 给容器几乎完整的 host 权限。当前容器跑在内网 NAS 上,风险可接受。如果未来有安全需求,可以降级为 `--security-opt seccomp=unconfined` + `--cap-add ALL`,配合 dropbear 使用。 +**进一步测试**(司马懿评审建议):尝试去掉 `--privileged`——结果**失败**。去掉后容器在 dropbear 配置阶段退出,进入重启循环。原因:entrypoint 中 sudo/apt-get 等操作需要完整权限能力。 + +**风险**:`--privileged` 给容器几乎完整的 host 权限。当前容器跑在内网 NAS 上,风险可接受。未来如需收紧,需先将 dropbear 安装写入镜像以避免 entrypoint 中的 sudo 操作。 --- -### Q6: 回测服务代码在 NAS 上有两份,`bt-service/` 和 `backtest-service-new/`,区别是什么? +### Q6: 回测服务代码已统一为一份 **说明**: - `/volume1/stock/sanguo_vnpy/bt-service/` — **当前生效的**,volume 挂载到容器内使用 - `/volume1/stock/sanguo_vnpy/backtest-service-new/` — 开发/备份目录 - `/volume1/stock/sanguo_vnpy/scripts/backtest-service/` — 镜像内置的旧版 -三者内容基本相同,**以 `bt-service/` 为准**。 +**已解决**(2026-05-03):`backtest-service-new/` 和 `scripts/backtest-service/` 已打包归档到 `archives/`,NAS 上只保留 `bt-service/` 一份。 --- @@ -557,6 +563,8 @@ ssh admin@192.168.2.154 "/usr/local/bin/docker ps" 2. SMB 读写大文件(1.4GB DB)偶尔有锁文件问题 3. 数据写入绕过了 vnpy 框架的数据接口 +**待更新**:赵云已出新的每日增量更新方案(`daily_all_update.py`),覆盖日线+15min。详见赵云的数据平台文档。 + **待改进**:改为通过回测服务 API 触发数据更新,或直接在容器内跑 cron。 --- @@ -573,7 +581,7 @@ ssh admin@192.168.2.154 "/usr/local/bin/docker ps" ### Q10: 为什么 code-server 没有启用? -**原因**:Dockerfile 中注释掉了 code-server 安装(网络环境问题),entrypoint.sh 中的 `code-server &` 会静默失败。当前不影响使用,有 Jupyter Lab 足够。 +**原因**:Dockerfile 中注释掉了 code-server 安装(网络环境问题),entrypoint.sh 中已移除 `code-server &` 调用,避免静默失败污染日志。当前有 Jupyter Lab 足够。 --- @@ -587,9 +595,11 @@ ssh admin@192.168.2.154 "/usr/local/bin/docker ps" | 4 | NAS SMB 开机无自动挂载 | 中 | Mac 端配置 LaunchDaemon automount | | 5 | DB 导入非全自动 | 中 | 编写导入脚本自动化 | | 6 | 分钟线数据不完整 | 中 | 赵云补充分钟线数据导入 | -| 7 | DB 数据只到 2026-03-27 | 高 | cron 可能未持续跑,需检查 | +| 7 | ~~DB数据只到2026-03-27~~ | — | ✅ 已确认数据实际更新到 2026-04-30,dbbaroverview 表未刷新但实际数据正常 | | 8 | pip 每次启动重装耗时 ~30s | 低 | 可接受,或写入镜像 | -| 9 | dropbear 安装需要 apt 联网 | 低 | 未来可写入镜像 | +| 9 | dropbear 安装需要 apt 联网 | 中 | 断网时容器无法启动,应写入镜像(司马懿评审问题1) | +| 10 | entrypoint pip 依赖网络 | 中 | 同上,应写入镜像 | +| 11 | ~~废弃代码目录未清理~~ | — | ✅ 已清理归档(2026-05-03) | ---