Files
sanguo_vnpy_v2/docs/deployment/nas-deploy-plan.md
T
claude_dev 1803610f23 docs: 新增 NAS Docker 迭代部署方案
新增 docs/deployment/nas-deploy-plan.md,固化应用层/镜像层分离的部署流程(rsync + docker restart)。CLAUDE.md 参考文档段加入索引。
2026-07-04 20:13:03 +08:00

4.3 KiB
Raw Blame History

Sanguo VeighNa — NAS Docker 迭代部署方案

维护人:诸葛亮 · 最后更新:2026-07-04 基于实机查证(Synology NAS cfeasynas 216+II 首次安装见 synology-nas.md,本文只讲日常迭代与运维


一、核心思路:应用层与镜像层分离

代码不打进镜像运行时,而是 bind-mount 挂进容器。绝大多数迭代不需要重新 build 镜像。

层次 内容 变更频率 变更方式
镜像层 sanguo_vnpy_v2:latest (6.9GB) Python 3.10 + pip 依赖 + TA-Lib + entrypoint.sh docker build
应用层 bind-mount → /app 项目源码(sanguo_web、vnpy_v4.4.0…) rsync + docker restart
数据层 /app/data SQLite、日志(持久化) 不要覆盖

容器启动时 /app 被宿主机目录整体覆盖,镜像内 COPY 的代码运行时不生效。改代码 = 改宿主机目录 + 重启容器。


二、当前部署实况(已查证)

项目
NAS cfeasynas 192.168.2.154
SSH admin@192.168.2.154
Docker 路径 /var/packages/Docker/target/usr/bin/docker不在 PATH
权限 admin 在 docker 组,无需 sudo
容器/镜像 sanguo_vnpy_v2 / sanguo_vnpy_v2:latest
端口 8000→80008080→8080
代码挂载 /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2/app
启动 /app/entrypoint.shuvicorn ... --workers 2
重启策略 unless-stopped
启动方式 docker run(非 compose

三、常规迭代(只改代码)— 90% 场景

# 在 Mac Mini 执行
export SSHPASS='Ccf7561523'
DOCKER="/var/packages/Docker/target/usr/bin/docker"
SRC=~/.openclaw/sanguo_projects/sanguo_vnpy_v2/
DEST=admin@192.168.2.154:~/.sanguo_projects/sanguo_vnpy_v2/

# 1) 同步代码(已排除数据/缓存)
sshpass -e rsync -avz --delete \
  --exclude='.git' '__pycache__' '*.pyc' '.pytest_cache' \
  --exclude='data/' 'logs/' 'temp/' '*.log' '.DS_Store' '.venv/' 'node_modules/' \
  -e "ssh -o StrictHostKeyChecking=no" \
  "$SRC" "$DEST"

# 2) 重启容器
sshpass -e ssh admin@192.168.2.154 "$DOCKER restart sanguo_vnpy_v2"

# 3) 看日志 + 冒烟
sleep 8
sshpass -e ssh admin@192.168.2.154 "$DOCKER logs --tail 20 sanguo_vnpy_v2"
curl -s http://192.168.2.154:8000/health
curl -s http://192.168.2.154:8000/api/v1/settings/global
验证项 期望
docker ps Up
/health {"status":...}
/api/v1/trades [] 或数据
POST /api/v1/auth/login 返回 access_token

四、依赖变更(改 requirements-docker.txt)— 偶尔

# 1) 先同步代码(含新 requirements)到 NAS,同第三节步骤 1
# 2) 在 NAS 重新 build
sshpass -e ssh admin@192.168.2.154 \
  "cd ~/.sanguo_projects/sanguo_vnpy_v2 && \
   /var/packages/Docker/target/usr/bin/docker build -f docker/Dockerfile -t sanguo_vnpy_v2:latest ."

# 3) 用相同参数重启容器
sshpass -e ssh admin@192.168.2.154 << 'EOF'
D=/var/packages/Docker/target/usr/bin/docker
$D stop sanguo_vnpy_v2 && $D rm sanguo_vnpy_v2
$D run -d --name sanguo_vnpy_v2 --restart unless-stopped \
  -p 8000:8000 -p 8080:8080 \
  -v /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2:/app \
  sanguo_vnpy_v2:latest
EOF

⚠️ NAS CPU 弱,build 编 TA-Lib + 大包约 3060 分钟。


五、外网链路(部署时不要动)

外网 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


六、已知问题

问题 影响 处理
threads can only be started once VeighNa 引擎在 2 workers 下重复初始化 Web/登录/查询正常;真实交易需改 1 worker
/health 返回 degraded 引擎未初始化的降级 非致命
Docker 不在 PATH 一律用全路径
admin 密码硬编码 安全 后续改 SSH key

七、回滚

代码层(镜像未动):git checkout <旧commit> 后重跑第三节步骤 1-2。 镜像层:docker images sanguo_vnpy_v2 找旧 tag,重 docker run