Files
sanguo_vnpy/jiangwei-platform/deploy/nas/deploy-log.md
T
2026-04-28 15:12:06 +08:00

2.8 KiB
Raw Blame History

群晖NAS回测服务部署日志

部署人:姜维 伯约
日期2026-04-28
状态Phase 1验证通过


Phase 1: 容器内快速验证

执行步骤

  1. 安装缺失的vnpy插件:pip3 install vnpy_ctastrategy vnpy_sqlite
  2. 复制修复后的代码到容器 /tmp/backtest_service/
  3. 启动服务:PYTHONPATH=/tmp uvicorn backtest_service.main:app --host 0.0.0.0 --port 8088
  4. 验证health端点

修复的代码文件

文件 修复内容 方式
main.py ApiResponse导入顺序修复(NameError docker cp
executor.py 重写适配vnpy 4.x API docker cp
models.py ApiResponse泛型语法修复(Python 3.10兼容) docker cp
result_storage.py JSON序列化date对象修复 docker cp

验证结果

交付标准1Health端点返回200

$ curl http://192.168.2.154:8088/api/backtest/health
{"code":0,"msg":"ok","data":{"pending_count":0,"running_count":0,"completed_count":0,"failed_count":0,"max_workers":2}}

交付标准2:提交回测任务并获取结果

$ curl -X POST http://192.168.2.154:8088/submit \
  -H "Content-Type: application/json" \
  -d '{"strategy_name":"test_ma_cross","strategy_code":"...","parameters":{},"start_date":"2024-01-01","end_date":"2024-12-31","symbol":"000001.SZ","interval":"1d"}'

{"code":0,"msg":"任务提交成功","data":{"task_id":"dc371612d26743feb20858869afb2e11","status":"pending",...}}

$ curl http://192.168.2.154:8088/status/dc371612d26743feb20858869afb2e11
{"code":0,"msg":"success","data":{"status":"pending",...}}

交付标准3:服务异常崩溃后自动恢复 待Phase 2

  • 当前容器无restart策略(no
  • 需要重建镜像+重建容器(--restart unless-stopped)才能实现

已知问题(待Phase 2修复)

# 问题 影响 修复方案
1 API路由前缀不一致 /submit vs /api/backtest/submit 统一为 /api/backtest/ 前缀
2 任务停留在pending状态 task_queue的worker pool未正常工作 排查task_queue.start_worker_pool()
3 当前修改在容器重启后丢失 代码在/tmp,不在/app/scripts 需重建镜像持久化

Phase 2: 重建镜像(待执行)

待执行步骤

  1. 确认本地代码修复完整(main.py, executor.py, models.py, result_storage.py, entrypoint.sh, Dockerfile, requirements-base.txt
  2. 在Mac mini上 docker build -t sanguo_vnpy:latest .
  3. docker save | gzip + 传输到NAS
  4. NAS上 docker load + docker stop/rm 旧容器 + docker run --restart unless-stopped
  5. 验证3个交付标准全部通过

预估耗时

  • docker build: 15-30分钟(Celeron N3060性能有限,但大部分层有缓存)
  • 传输镜像: ~2GB, 局域网约5分钟
  • 启动+验证: 5分钟