auto-sync: 2026-03-26 21:05:40

This commit is contained in:
cfdaily
2026-03-26 21:05:41 +08:00
parent 31731dc5a2
commit f043f123a1
@@ -17,12 +17,48 @@
- 提供web_trader模块,支持B/S架构访问
- 支持多种数据库(SQLite、MySQL、PostgreSQL等)
3. **存算分离架构优势**
3. **完全存算一体架构优势**
- 数据存储在NAS本地,访问速度快
- 计算资源与存储资源可独立扩展
- 便于备份和迁移
- 计算资源与存储资源一体化,减少网络开销
- Mac mini仅作为远程终端,大幅节省本地存储空间
- 便于备份和迁移,所有数据和环境统一管理
### 1.2 适用场景
### 1.2 新架构设计:完全迁移到NAS
#### 架构对比
| 项目 | 旧架构(Mac mini | 新架构(NAS Docker |
|-----|-------------------|---------------------|
| 数据存储位置 | Mac mini本地 | NAS本地存储 |
| 代码运行位置 | Mac mini本地 | NAS Docker容器 |
| 回测环境 | Mac mini本地 | NAS Docker容器 |
| Mac mini作用 | 主力开发机 | 纯远程访问终端 |
| Mac mini存储占用 | 大(几十GB+) | 极小(仅浏览器/VSCode |
| 数据备份 | 需单独配置 | NAS统一备份 |
#### 新架构优势
1. **彻底释放Mac mini空间**
- 数据、代码、环境全部在NAS上
- Mac mini只需保留浏览器和VSCode
- 本地存储占用从几十GB降至几百MB
2. **统一管理,易于维护**
- 所有数据集中在NAS,便于备份
- 环境配置一次,处处可用
- 升级、迁移更简单
3. **7×24小时稳定运行**
- NAS低功耗设计,适合长期运行
- 支持UPS断电保护
- 群晖系统稳定可靠
4. **灵活的远程访问**
- 局域网内访问速度快,延迟低
- 支持VPN远程访问(如需要)
- 多种访问方式:Jupyter、VSCode、Web界面
### 1.3 适用场景
| 场景 | 推荐度 | 说明 |
|-----|--------|------|
@@ -30,12 +66,228 @@
| 实盘交易 | ⭐⭐⭐ | 可行,但需考虑网络稳定性和安全性 |
| 数据管理 | ⭐⭐⭐⭐⭐ | 极佳,NAS本身就是数据存储专家 |
| 团队协作 | ⭐⭐⭐⭐ | 支持多用户访问,便于协作 |
| **Mac mini空间节省** | ⭐⭐⭐⭐⭐ | **核心目标,完全实现** |
---
## 二、群晖Docker部署vn.py的具体步骤
## 二、完整部署方案详解
### 2.1 准备工作
### 2.1 整体架构设计
```
┌─────────────────────────────────────────────────────────────┐
│ 局域网环境 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌─────────────────────────┐ │
│ │ Mac mini │ │ 群晖NAS (192.168.2.154)│ │
│ │ │ │ │ │
│ │ ┌────────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ 浏览器 │ │ HTTP │ │ │ │ │
│ │ │ VSCode │ │◄───────►│ │ Docker容器 │ │ │
│ │ │ (远程) │ │ │ │ │ │ │
│ │ └────────────┘ │ │ │ ┌─────────────┐ │ │ │
│ │ │ │ │ │ vn.py环境 │ │ │ │
│ │ 本地存储占用: │ │ │ └─────────────┘ │ │ │
│ │ < 1GB │ │ │ │ │ │
│ └──────────────────┘ │ │ ┌─────────────┐ │ │ │
│ │ │ │ Jupyter Lab │ │ │ │
│ │ │ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ │ │ │
│ │ │ │ VSCode Server││ │ │
│ │ │ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ └───────────────────┘ │ │
│ │ │ │
│ │ ┌───────────────────┐ │ │
│ │ │ NAS本地存储 │ │ │
│ │ │ │ │ │
│ │ │ /volume1/stock/ │ │ │
│ │ │ ├── A股数据/ │ │ │
│ │ │ ├── 回测结果/ │ │ │
│ │ │ ├── 代码库/ │ │ │
│ │ │ └── 临时文件/ │ │ │
│ │ └───────────────────┘ │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 2.2 NAS端部署步骤
#### 步骤1:准备NAS存储目录
在群晖NAS上创建以下目录结构:
```
/volume1/
├── stock/ # 数据主目录
│ ├── A股数据/
│ │ ├── 日线数据/
│ │ ├── 分钟线数据/
│ │ └── 财务数据/
│ ├── 回测结果/
│ │ ├── 策略回测/
│ │ └── 性能报告/
│ ├── 代码库/
│ │ ├── 策略代码/
│ │ └── 工具脚本/
│ └── 临时文件/
│ ├── 下载缓存/
│ └── 临时数据/
└── docker/
└── vnpy/ # Docker相关目录
├── config/ # 配置文件
├── notebooks/ # Jupyter笔记本
├── strategies/ # 策略代码(Docker内)
├── logs/ # 日志文件
├── mysql-data/ # MySQL数据
├── redis-data/ # Redis数据
└── pgadmin-data/ # pgAdmin数据
```
**创建目录命令(在群晖SSH中执行)**
```bash
# 数据目录
mkdir -p /volume1/stock/{A股数据/{日线数据,分钟线数据,财务数据},回测结果/{策略回测,性能报告},代码库/{策略代码,工具脚本},临时文件/{下载缓存,临时数据}}
# Docker目录
mkdir -p /volume1/docker/vnpy/{config,notebooks,strategies,logs,mysql-data,redis-data,pgadmin-data}
# 设置权限(确保Docker容器可以访问)
chmod -R 755 /volume1/stock
chmod -R 755 /volume1/docker/vnpy
```
#### 步骤2:准备Docker配置文件
`/volume1/docker/vnpy/` 目录下创建以下文件:
**1. Dockerfile**(使用章节六中的完整版)
**2. docker-compose.yml**(使用章节七中完整版,注意修改卷挂载路径)
**3. entrypoint.sh**(使用章节六中的启动脚本)
**4. requirements.txt**(使用章节六中的依赖文件)
**5. .env**(使用章节七中环境变量文件)
#### 步骤3:部署Docker容器
```bash
# 进入项目目录
cd /volume1/docker/vnpy
# 构建并启动容器
docker-compose up -d
# 查看日志
docker-compose logs -f
# 确认服务正常运行
docker-compose ps
```
### 2.3 数据迁移方案
#### 数据迁移步骤
1. **挂载NAS到Mac mini(临时使用)**
- 按照《NAS挂载操作指南》挂载 `/Volumes/stock`
2. **迁移现有数据到NAS**
```bash
# 假设Mac mini上的数据在 ~/stock/ 目录下
rsync -av --progress ~/stock/ /Volumes/stock/
```
3. **验证数据完整性**
```bash
# 检查文件数量
find ~/stock/ -type f | wc -l
find /Volumes/stock/ -type f | wc -l
```
4. **迁移代码到NAS Docker**
- 将策略代码复制到 `/Volumes/stock/代码库/`
- 同时也复制到 `/Volumes/stock/docker/vnpy/strategies/`Docker内使用)
5. **清理Mac mini本地数据**(确认迁移成功后)
```bash
# 备份后删除
mv ~/stock ~/stock.backup
# 确认一切正常后再删除备份
# rm -rf ~/stock.backup
```
### 2.4 Mac mini端配置
#### 访问方式配置
Mac mini上只需配置以下访问方式,无需本地环境:
**1. Jupyter Lab访问**
- 浏览器打开:`http://192.168.2.154:8888`
- 输入token或密码(在.env文件中配置)
**2. VS Code Server访问**
- 浏览器打开:`http://192.168.2.154:8080`
- 或使用本地VS Code + Remote SSH扩展连接
**3. vn.py Web界面**
- 浏览器打开:`http://192.168.2.154:8000`
**4. SSH访问(可选)**
- `ssh -p 2222 vnpy@192.168.2.154`
#### 浏览器书签配置
建议在Mac mini浏览器中创建以下书签:
```
量化工作台
├── Jupyter Lab - http://192.168.2.154:8888
├── VS Code Server - http://192.168.2.154:8080
├── vn.py Web - http://192.168.2.154:8000
└── 群晖DSM - http://192.168.2.154:5000
```
### 2.5 网络安全配置
#### 基础安全措施
1. **仅局域网访问**
- 不设置端口转发到公网
- 所有服务仅在局域网内可访问
2. **修改默认密码**
- 修改.env文件中的所有默认密码
- 使用强密码策略
3. **配置群晖防火墙**
- 仅允许信任的IP访问Docker相关端口
- 在群晖DSM → 控制面板 → 安全性 → 防火墙中配置
4. **定期更新**
- 定期更新Docker镜像
- 保持群晖DSM系统更新
#### VPN远程访问(如需外网访问)
如果需要从外网访问,建议使用群晖VPN Server:
1. 在群晖套件中心安装VPN Server
2. 配置OpenVPN或L2TP/IPSec
3. 外网先连接VPN,再访问内网服务
---
## 三、群晖Docker部署vn.py的具体步骤
### 3.1 准备工作
#### 1. 确认群晖NAS型号和架构
```bash
@@ -62,7 +314,7 @@ uname -m
└── logs/ # 日志文件
```
### 2.2 部署步骤详解
### 3.2 部署步骤详解
#### 步骤1SSH登录群晖NAS
```bash
@@ -87,9 +339,9 @@ docker network create vnpy-network
---
## 、性能评估
## 、性能评估
### 3.1 回测速度评估
### 4.1 回测速度评估
基于NAS硬件配置的不同,回测速度会有较大差异:
@@ -105,7 +357,7 @@ docker network create vnpy-network
3. **存储速度**:数据读取速度影响初始加载
4. **网络延迟**:远程访问时的交互延迟
### 3.2 局域网访问延迟评估
### 4.2 局域网访问延迟评估
| 访问方式 | 延迟(ms) | 顺畅度 |
|---------|-----------|--------|
@@ -118,9 +370,9 @@ docker network create vnpy-network
---
## 、数据存储方案
## 、数据存储方案
### 4.1 存储架构设计
### 5.1 存储架构设计
推荐采用**分层存储策略**
@@ -140,7 +392,7 @@ docker network create vnpy-network
└── 长期归档
```
### 4.2 数据库选择
### 5.2 数据库选择
| 数据库 | 适用场景 | NAS友好度 | 推荐度 |
|-------|---------|----------|--------|
@@ -149,7 +401,7 @@ docker network create vnpy-network
| **PostgreSQL** | 大型部署、高级功能 | ⭐⭐⭐ | ⭐⭐⭐ 可选 |
| **TDengine** | 时序数据、高性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ 推荐(分钟线) |
### 4.3 数据访问性能
### 5.3 数据访问性能
基于已有的NAS挂载测试结果:
@@ -167,9 +419,9 @@ docker network create vnpy-network
---
## 、网络访问方案
## 、网络访问方案
### 5.1 访问方式对比
### 6.1 访问方式对比
| 访问方式 | 用途 | 端口 | 顺畅度 | 安全性 |
|---------|------|------|--------|--------|
@@ -179,7 +431,7 @@ docker network create vnpy-network
| **SSH** | 系统管理、调试 | 2222 | ⭐⭐⭐⭐ | 密钥认证 |
| **VNC** | 图形界面(如需) | 5900 | ⭐⭐⭐ | 加密传输 |
### 5.2 Mac mini访问体验
### 6.2 Mac mini访问体验
基于局域网环境的实测:
@@ -198,7 +450,7 @@ docker network create vnpy-network
- 委托下单:响应快速
- 资金曲线:流畅渲染
### 5.3 网络安全建议
### 6.3 网络安全建议
1. **仅局域网访问**:不映射公网端口
2. **使用HTTPS**:配置SSL证书加密传输
@@ -208,9 +460,9 @@ docker network create vnpy-network
---
## 、Dockerfile配置示例
## 、Dockerfile配置示例
### 6.1 基础版Dockerfile
### 7.1 基础版Dockerfile
```dockerfile
# 使用Python 3.11基础镜像
@@ -289,7 +541,7 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]
```
### 6.2 完整版Dockerfile(包含VS Code Server
### 7.2 完整版Dockerfile(包含VS Code Server
```dockerfile
# 多阶段构建
@@ -368,7 +620,7 @@ EXPOSE 8888 8000 8080 2222
ENTRYPOINT ["/app/entrypoint.sh"]
```
### 6.3 entrypoint.sh启动脚本
### 7.3 entrypoint.sh启动脚本
```bash
#!/bin/bash
@@ -400,7 +652,7 @@ echo "=========================================="
tail -f /dev/null
```
### 6.4 requirements.txt依赖文件
### 7.4 requirements.txt依赖文件
```txt
# vn.py核心
@@ -447,9 +699,9 @@ websockets>=11.0.0
---
## 、docker-compose配置示例
## 、docker-compose配置示例
### 7.1 基础版docker-compose.yml
### 8.1 基础版docker-compose.yml
```yaml
version: '3.8'
@@ -517,7 +769,7 @@ networks:
driver: bridge
```
### 7.2 完整版docker-compose.yml(包含数据库)
### 8.2 完整版docker-compose.yml(包含数据库)
```yaml
version: '3.8'
@@ -671,7 +923,7 @@ networks:
driver: bridge
```
### 7.3 .env环境变量文件
### 8.3 .env环境变量文件
```env
# 基本配置
@@ -707,7 +959,7 @@ VNPY_CPU_RESERVATION=4.0
VNPY_MEMORY_RESERVATION=8G
```
### 7.4 快速启动命令
### 8.4 快速启动命令
```bash
# 1. 创建目录结构
@@ -736,9 +988,9 @@ docker-compose down -v
---
## 、可能遇到的问题和解决方案
## 、可能遇到的问题和解决方案
### 8.1 群晖Docker相关问题
### 9.1 群晖Docker相关问题
#### 问题1:群晖Docker套件启动失败
**症状**Container Manager无法启动或异常退出
@@ -768,7 +1020,7 @@ docker system prune -a
- 群晖DSM → Container Manager → 设置 → 注册表 → 存储位置
3. 清理NAS其他无用文件
### 8.2 网络访问相关问题
### 9.2 网络访问相关问题
#### 问题4:局域网无法访问容器服务
**症状**Mac mini无法访问 `http://NAS_IP:8888`
@@ -796,7 +1048,7 @@ deploy:
4. 启用群晖SSD缓存
5. 优化Jupyter配置,减少不必要的扩展
### 8.3 数据存储相关问题
### 9.3 数据存储相关问题
#### 问题6:容器内无法访问NAS挂载目录
**症状**:权限错误,无法读写数据目录
@@ -821,7 +1073,7 @@ user: "1000:1000" # 匹配群晖用户ID
4. 考虑使用时序数据库(如TDengine)存储行情数据
5. 定期清理和优化数据库表
### 8.4 vn.py运行相关问题
### 9.4 vn.py运行相关问题
#### 问题8:vn.py缺少某些交易接口
**症状**CTP等接口无法加载
@@ -845,7 +1097,7 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
4. 考虑使用Dask等分布式计算框架
5. 减少回测时间范围或标的数量
### 8.5 安全相关问题
### 9.5 安全相关问题
#### 问题10:担心安全问题,不想暴露服务
**症状**:需要更安全的访问方式
@@ -860,7 +1112,7 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
---
## 、推荐部署 checklist
## 、推荐部署 checklist
### 部署前检查
- [ ] 确认群晖NAS型号和架构(x86/ARM)
@@ -896,9 +1148,9 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
---
## 十、成本与收益分析
## 十、成本与收益分析
### 10.1 硬件成本(参考)
### 11.1 硬件成本(参考)
| 项目 | 入门级 | 中级 | 高级 |
|-----|--------|------|------|
@@ -908,7 +1160,7 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
| SSD缓存(512G×2 | - | ¥1000 | ¥2000 |
| **合计** | **¥6400** | **¥12200** | **¥21800** |
### 10.2 收益分析
### 11.2 收益分析
**直接收益**
1. **节省硬件成本**:不需要专门的量化交易PC
@@ -924,62 +1176,170 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
---
## 十一、结论与建议
## 十二、分阶段迁移实施计划
### 11.1 可行性总结
### 12.1 第一阶段:准备与验证(1-2天)
**目标**:确保NAS环境就绪,完成基础配置验证
**任务清单**
- [ ] 确认群晖NAS状态正常(192.168.2.154
- [ ] 确认NAS存储空间充足(建议>100GB可用)
- [ ] 确认Container Manager已安装并运行
- [ ] 检查NAS内存配置(建议≥8GB
- [ ] 在NAS上创建所需目录结构
- [ ] 配置目录权限
- [ ] 测试从Mac mini访问NAS共享文件夹
**验证标准**
- NAS目录创建成功,权限正确
- Mac mini可正常挂载NAS共享文件夹
- Container Manager运行正常
---
### 12.2 第二阶段:Docker环境部署(2-3天)
**目标**:在NAS上部署完整的vn.py Docker环境
**任务清单**
- [ ] 准备Dockerfile文件
- [ ] 准备docker-compose.yml文件
- [ ] 准备entrypoint.sh启动脚本
- [ ] 准备requirements.txt依赖文件
- [ ] 准备.env环境变量文件(修改默认密码)
- [ ] 执行docker-compose构建镜像
- [ ] 启动Docker容器
- [ ] 检查容器日志,确认服务正常启动
- [ ] 验证各服务端口可访问
**验证标准**
- Docker镜像构建成功
- 所有容器正常运行(docker-compose ps显示healthy
- 可从Mac mini浏览器访问:
- Jupyter Lab (http://192.168.2.154:8888)
- VS Code Server (http://192.168.2.154:8080)
- vn.py Web (http://192.168.2.154:8000)
---
### 12.3 第三阶段:数据迁移(1-2天)
**目标**:将Mac mini上的数据和代码迁移到NAS
**任务清单**
- [ ] 在Mac mini上挂载NAS共享文件夹
- [ ] 备份Mac mini本地重要数据
- [ ] 迁移历史数据(日线、财务数据)到NAS
- [ ] 迁移策略代码到NAS
- [ ] 迁移Jupyter笔记本到NAS
- [ ] 验证数据完整性(检查文件数量和大小)
- [ ] 在NAS Docker环境中测试数据访问
**验证标准**
- 所有数据文件成功复制到NAS
- 文件数量和大小与源一致
- 在Docker容器中可正常读取数据
- 简单策略回测可正常运行
---
### 12.4 第四阶段:功能验证与优化(2-3天)
**目标**:验证完整功能并进行性能优化
**任务清单**
- [ ] 测试Jupyter Lab完整功能
- [ ] 测试VS Code Server代码编辑和调试
- [ ] 测试vn.py策略回测功能
- [ ] 运行完整的历史回测验证性能
- [ ] 配置NAS自动备份任务
- [ ] 配置容器自动重启策略
- [ ] 优化数据库配置(如需要)
- [ ] 配置监控和告警(可选)
**验证标准**
- 所有核心功能正常可用
- 回测速度满足预期
- 数据自动备份正常工作
- 系统稳定运行无异常
---
### 12.5 第五阶段:切换与清理(1天)
**目标**:完全切换到新架构,清理Mac mini本地环境
**任务清单**
- [ ] 确认新环境稳定运行至少3天
- [ ] 将Mac mini本地数据重命名为备份(不立即删除)
- [ ] 更新所有访问方式为NAS地址
- [ ] 配置浏览器书签
- [ ] 验证日常工作流程在新环境下顺畅
- [ ] 观察运行1-2周确认无误后
- [ ] 清理Mac mini本地备份数据(谨慎操作)
**验证标准**
- 日常量化工作完全在NAS Docker环境中进行
- Mac mini本地无量化相关数据残留
- 工作效率不受影响或有所提升
---
## 十三、结论与建议
### 13.1 可行性总结
**整体可行性:完全可行**
将sanguo_vnpy部署在群晖NAS Docker容器中是一个**优秀的方案**,具有以下优势:
将sanguo_vnpy完全迁移到群晖NAS Docker容器中是一个**极其优秀的方案**,具有以下核心优势:
1. **技术成熟**:群晖Docker支持完善,vn.py兼容性好
2. **性能够用**:中高级NAS配置可满足大多数量化场景
3. **数据安全**NAS RAID保护,数据更可靠
4. **易于管理**图形化界面,操作简单
5. **成本合**相比专用PC,性价比更高
2. **彻底释放Mac mini**:数据、代码、环境全部迁移,Mac mini仅作终端
3. **性能够用**中高级NAS配置可满足大多数量化场景
4. **数据安全**NAS RAID保护,数据更可靠
5. **统一管**所有数据和环境集中管理,便于备份和维护
6. **成本合理**:利用现有NAS,无需额外硬件投入
### 11.2 分阶段实施建议
### 13.2 核心收益
#### 第一阶段:试点验证(1-2周)
1. 使用现有NAS(如果有)进行小规模测试
2. 部署基础版docker-compose
3. 运行简单的策略回测
4. 评估性能和用户体验
**Mac mini存储空间释放**
- 从占用几十GB(数据+代码+环境)降至<1GB(仅浏览器/VSCode
- 彻底解决Mac mini存储空间不足问题
#### 第二阶段:正式部署(2-4周)
1. 根据试点情况选择合适的NAS配置
2. 部署完整版(包含数据库)
3. 迁移现有策略和数据
4. 配置备份和监控
**数据管理提升**
- 所有数据集中在NAS,利用NAS的RAID和备份功能
- 数据安全性大幅提升
#### 第三阶段:优化完善(持续)
1. 根据使用情况优化配置
2. 考虑升级硬件(如需要)
3. 完善自动化脚本
4. 建立完善的运维流程
**维护便利性**
- 环境配置一次,处处可用
- 升级、迁移更简单
- 7×24小时稳定运行
### 11.3 最终推荐
### 13.3 最终推荐
**对于你的场景(Mac mini + 群晖NAS + A股量化)**
⭐⭐⭐⭐⭐ **强烈推荐**采用群晖NAS Docker部署方案!
⭐⭐⭐⭐⭐ **强烈推荐立即实施!**
**理由**
1. 你已有群晖NAS192.168.2.154),无需额外硬件投入
2. NAS挂载已验证可行,数据存储方案成熟
3. 局域网访问体验好,Mac mini访问顺畅
4. 便于数据集中管理和备份
5. 为未来团队协作和扩展预留空间
4. 彻底解决Mac mini存储空间问题
5. 便于数据集中管理和备份
6. 为未来团队协作和扩展预留空间
**建议配置**
- 如果NAS内存<8GB,优先升级内存
- 配置SSD缓存提升性能
- 配置SSD缓存提升性能(如有需要)
- 使用MySQL数据库存储数据
- 配置定期自动备份
- 遵循第十二章的分阶段迁移计划实施
---
## 十、参考资料
## 十、参考资料
1. [vn.py官方文档](https://www.vnpy.com/docs/cn/index.html)
2. [vn.py GitHub仓库](https://github.com/vnpy/vnpy)
@@ -992,4 +1352,5 @@ RUN apt-get install -y libgl1-mesa-glx libglib2.0-0
**报告完成日期**2026年3月26日
**调研人员**:姜维 伯约
**版本**v1.0
**版本**v2.0
**更新内容**:补充完整部署方案,将数据和计算全部迁移到NAS Docker,Mac mini仅作远程终端