Files
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

14 KiB
Raw Permalink Blame History

Synology NAS 部署指南

本指南介绍如何在 Synology NAS 上部署 Sanguo VeighNa 量化交易平台。

目录


前置要求

硬件要求

  • Synology NASDSM 7.x 或更高版本
  • 内存:至少 2GB 可用内存(推荐 4GB+)
  • 存储:至少 10GB 可用存储空间(用于数据和日志)

软件要求

  • Container Manager(或 Docker 套件)
  • SSH 访问权限(用于高级操作)
  • 文本编辑器(如 Text Editor、vim

网络要求

  • 固定 IP 地址(推荐)
  • 或使用 DDNS 服务
  • 开放相应端口(默认 8000

快速开始

1. 开启 SSH 访问

在 DSM 控制面板中:

  1. 进入 控制面板 > 终端机和 SNMP
  2. 勾选 启用 SSH 服务
  3. 端口使用默认 22
  4. 点击 应用

2. SSH 登录 NAS

ssh admin@your-nas-ip
# 或
ssh your-username@your-nas-ip

3. 创建数据目录

# 创建主目录
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy

# 创建子目录
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/{data,logs,config,temp,redis,nginx}

4. 上传项目文件

在本地电脑上执行:

# 压缩项目文件
tar czf sanguo_vnpy_v2.tar.gz sanguo_vnpy_v2/

# 上传到 NAS
scp sanguo_vnpy_v2.tar.gz admin@your-nas-ip:/tmp/

# 或使用 rsync
rsync -avz sanguo_vnpy_v2/ admin@your-nas-ip:/volume1/docker/containers/sanguo_vnpy_v2/

在 NAS 上解压:

# SSH 登录后执行
cd /volume1/docker/containers/
sudo tar xzf /tmp/sanguo_vnpy_v2.tar.gz

5. 配置环境变量

cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo cp .env.example .env
sudo vi .env  # 或使用其他编辑器

关键配置项:

# 数据目录 - 确保 此目录存在
DATA_DIR=/volume1/docker/stock/sanguo_vnpy

# 端口配置 - 根据需要修改
HTTP_PORT=8000
WS_PORT=8080

# 时区
TZ=Asia/Shanghai

# JWT 密钥 - 请修改为随机字符串
JWT_SECRET_KEY=your-random-secret-key-here

6. 启动服务

cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo docker-compose up -d

7. 检查运行状态

# 查看容器状态
sudo docker-compose ps

# 查看日志
sudo docker-compose logs -f vnpy

详细步骤

步骤 1: 准备数据目录

创建完整的目录结构:

# 主目录
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy

# 数据子目录
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/data      # 数据库和数据文件
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/logs      # 运行日志
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/config    # 配置文件
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/temp      # 临时文件
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/redis     # Redis 持久化
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/nginx     # Nginx 相关
sudo mkdir -p /volume1/docker/stock/sanguo_vnpy/nginx/ssl # SSL 证书

# 设置权限
sudo chmod -R 755 /volume1/docker/stock/sanguo_vnpy

步骤 2: 配置 Docker Compose

编辑 .env 文件:

cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo cp .env.example .env
sudo vi .env

完整配置示例:

# ============================================
# 数据目录配置
# ============================================
DATA_DIR=/volume1/docker/stock/sanguo_vnpy

# ============================================
# 端口配置
# ============================================
HTTP_PORT=8000
WS_PORT=8080
NGINX_HTTP_PORT=80
NGINX_HTTPS_PORT=443

# ============================================
# 时区配置
# ============================================
TZ=Asia/Shanghai

# ============================================
# VeighNa 配置
# ============================================
VNPY_LOG_LEVEL=INFO
VNPY_LOG_FILE=/app/logs/vnpy.log

# ============================================
# 数据库配置
# ============================================
DB_TYPE=sqlite
DB_PATH=/app/data/vnpy.db

# ============================================
# Web 服务配置
# ============================================
WEB_HOST=0.0.0.0
WEB_PORT=8000
WEB_WORKERS=2

# ============================================
# 安全配置
# ============================================
JWT_SECRET_KEY=please-change-this-to-a-secure-random-key
SESSION_TIMEOUT=3600

# ============================================
# 资源限制
# ============================================
VNPY_CPU_LIMIT=2.0
VNPY_MEMORY_LIMIT=2G

步骤 3: 构建和启动

# 构建镜像(首次运行)
sudo docker-compose build

# 启动服务
sudo docker-compose up -d

# 查看启动日志
sudo docker-compose logs -f

步骤 4: 验证部署

# 检查容器状态
sudo docker-compose ps

# 应该看到类似输出:
# NAME             STATUS          PORTS
# sanguo-vnpy      Up              0.0.0.0:8000->8000/tcp
# sanguo-redis     Up              6379/tcp

# 检查日志
sudo docker-compose logs vnpy | tail -20

# 进入容器检查
sudo docker-compose exec vnpy bash
ls -la /app/data
exit

配置说明

端口配置

端口 用途 说明
8000 HTTP API Web 界面和 REST API
8080 WebSocket 实时数据推送
80 Nginx HTTP 反向代理(可选)
443 Nginx HTTPS SSL 反向代理(可选)

目录映射

容器路径 宿主机路径 说明
/app/data {DATA_DIR}/data 数据库和数据文件
/app/logs {DATA_DIR}/logs 运行日志
/app/config {DATA_DIR}/config 配置文件
/app/temp {DATA_DIR}/temp 临时文件
/data {DATA_DIR}/redis Redis 持久化数据

资源限制

默认资源限制(可在 .env 中调整):

服务 CPU 限制 内存限制
vnpy 2.0 2G
redis 0.5 256M
nginx 0.5 256M

访问界面

Web 界面

启动成功后,可以通过以下地址访问:

http://your-nas-ip:8000

默认登录凭据

  • 用户名: admin
  • 密码: 通过环境变量 ADMIN_PASSWORD 配置

配置方式:在 .env 文件中设置:

ADMIN_PASSWORD=your-secure-password

安全提示

  • 生产环境请使用强密码
  • 不要在代码中硬编码密码
  • 建议使用密钥管理服务存储敏感信息

WebSocket 连接

WebSocket 端点:

ws://your-nas-ip:8080

数据备份

重要数据位置

所有重要数据都存储在 /volume1/docker/stock/sanguo_vnpy/

/volume1/docker/stock/sanguo_vnpy/
├── data/           # 数据库和数据文件
├── logs/           # 运行日志
├── config/         # 配置文件
├── redis/          # Redis 持久化数据
└── nginx/          # Nginx 配置和证书

备份方法

方法 1: 使用 Hyper Backup 套件(推荐)

  1. 打开 Hyper Backup
  2. 创建新备份任务
  3. 选择 从文件夹备份
  4. 选择 /volume1/docker/stock/sanguo_vnpy/
  5. 配置备份目标和计划

方法 2: 手动备份

# 创建备份
sudo tar czf \
  /volume1/Backup/vnpy_backup_$(date +%Y%m%d_%H%M%S).tar.gz \
  /volume1/docker/stock/sanguo_vnpy/

# 列出备份文件
ls -lh /volume1/Backup/vnpy_backup_*

# 恢复备份
sudo tar xzf \
  /volume1/Backup/vnpy_backup_YYYYMMDD_HHMMSS.tar.gz \
  -C /

方法 3: 使用 rsync 同步到其他位置

# 同步到另一个共享文件夹
sudo rsync -avz \
  /volume1/docker/stock/sanguo_vnpy/ \
  /volume1/Backup/sanguo_vnpy_backup/

# 同步到远程服务器
rsync -avz -e ssh \
  /volume1/docker/stock/sanguo_vnpy/ \
  user@remote-server:/backup/path/

自动备份脚本

创建定时任务:

# 创建备份脚本
sudo vi /volume1/docker/stock/backup_vnpy.sh

脚本内容:

#!/bin/bash
# Sanguo VeighNa 自动备份脚本

BACKUP_DIR="/volume1/Backup"
DATA_DIR="/volume1/docker/stock/sanguo_vnpy"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/vnpy_backup_$TIMESTAMP.tar.gz"

# 保留最近 7 天的备份
find $BACKUP_DIR -name "vnpy_backup_*.tar.gz" -mtime +7 -delete

# 创建备份
tar czf $BACKUP_FILE $DATA_DIR

# 记录日志
echo "Backup created: $BACKUP_FILE" >> $BACKUP_DIR/backup.log

echo "Backup completed: $BACKUP_FILE"

设置定时任务:

# 给脚本执行权限
sudo chmod +x /volume1/docker/stock/backup_vnpy.sh

# 添加到 crontab(每天凌晨 2 点执行)
sudo crontab -e

# 添加以下行
0 2 * * * /volume1/docker/stock/backup_vnpy.sh

故障排除

常见问题

1. 容器无法启动

检查日志

sudo docker-compose logs vnpy

常见原因

  • 端口被占用:修改 .env 中的端口配置
  • 数据目录不存在:创建所需目录
  • 权限问题:检查目录权限

2. 数据目录权限问题

# 修复权限
sudo chown -R $(id -u):$(id -g) /volume1/docker/stock/sanguo_vnpy
sudo chmod -R 755 /volume1/docker/stock/sanguo_vnpy

3. 端口冲突

# 检查端口占用
sudo netstat -tulpn | grep :8000

# 或使用 lsof
sudo lsof -i :8000

4. Redis 连接失败

# 检查 Redis 容器
sudo docker-compose logs redis

# 重启 Redis
sudo docker-compose restart redis

# 跳过 Redis 检查(开发环境)
# 在 .env 中设置
SKIP_REDIS_CHECK=1

5. 日志文件过大

# 清理旧日志
sudo find /volume1/docker/stock/sanguo_vnpy/logs -name "*.log" -mtime +30 -delete

# 或配置日志轮转
sudo vi /etc/logrotate.d/vnpy

重置部署

如果需要完全重置:

# 停止并删除容器
sudo docker-compose down

# 备份数据
sudo cp -r /volume1/docker/stock/sanguo_vnpy /volume1/Backup/

# 清理数据(谨慎操作)
sudo rm -rf /volume1/docker/stock/sanguo_vnpy/data/*
sudo rm -rf /volume1/docker/stock/sanguo_vnpy/logs/*

# 重新启动
sudo docker-compose up -d

升级指南

升级步骤

  1. 备份当前版本
# 备份数据
sudo tar czf /volume1/Backup/vnpy_pre_upgrade_$(date +%Y%m%d).tar.gz \
  /volume1/docker/stock/sanguo_vnpy/
  1. 下载新版本
# 停止服务
cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo docker-compose down
  1. 替换项目文件
# 备份旧代码
sudo mv /volume1/docker/containers/sanguo_vnpy_v2 \
        /volume1/docker/containers/sanguo_vnpy_v2_old

# 解压新版本
sudo tar xzf /tmp/sanguo_vnpy_v2_new.tar.gz -C /volume1/docker/containers/
  1. 复制配置
# 复制 .env 配置
sudo cp /volume1/docker/containers/sanguo_vnpy_v2_old/docker/.env \
         /volume1/docker/containers/sanguo_vnpy_v2/docker/.env
  1. 启动新版本
cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo docker-compose up -d --build
  1. 验证升级
# 检查状态
sudo docker-compose ps
sudo docker-compose logs -f

回滚

如果升级失败:

# 停止新版本
cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo docker-compose down

# 恢复旧版本
sudo mv /volume1/docker/containers/sanguo_vnpy_v2 \
        /volume1/docker/containers/sanguo_vnpy_v2_new
sudo mv /volume1/docker/containers/sanguo_vnpy_v2_old \
        /volume1/docker/containers/sanguo_vnpy_v2

# 启动旧版本
cd /volume1/docker/containers/sanguo_vnpy_v2/docker
sudo docker-compose up -d

性能优化

资源调整

根据 NAS 配置调整资源限制:

# .env 文件中
VNPY_CPU_LIMIT=4.0      # 增加 CPU
VNPY_MEMORY_LIMIT=4G    # 增加内存
WEB_WORKERS=4           # 增加 Worker 数量

存储优化

  • 将数据目录放在 SSD 缓存盘上(如果有)
  • 定期清理旧日志
  • 使用数据库的 VACUUM 功能优化 SQLite

网络优化

  • 使用有线网络连接
  • 配置 QoS 优先级
  • 考虑使用本地网络而非远程访问

安全建议

  1. 修改默认密码:首次登录后立即修改
  2. 使用 HTTPS:配置 SSL 证书
  3. 限制访问:使用防火墙规则
  4. 定期备份:设置自动备份任务
  5. 更新系统:保持 DSM 和套件更新
  6. 监控日志:定期检查访问日志

附录

A. Docker Compose 常用命令

# 启动服务
sudo docker-compose up -d

# 停止服务
sudo docker-compose down

# 重启服务
sudo docker-compose restart

# 查看状态
sudo docker-compose ps

# 查看日志
sudo docker-compose logs -f

# 进入容器
sudo docker-compose exec vnpy bash

# 更新并重启
sudo docker-compose up -d --build

# 删除容器和数据(危险)
sudo docker-compose down -v

B. 目录结构参考

/volume1/docker/
├── stock/
│   └── sanguo_vnpy/
│       ├── data/           # 数据库
│       ├── logs/           # 日志
│       ├── config/         # 配置
│       ├── temp/           # 临时文件
│       ├── redis/          # Redis 数据
│       └── nginx/          # Nginx 相关
└── containers/
    └── sanguo_vnpy_v2/     # 项目文件
        └── docker/
            ├── .env
            ├── .env.example
            ├── docker-compose.yml
            ├── Dockerfile
            └── entrypoint.sh

C. 支持和反馈

如有问题,请通过以下方式获取支持:

  • GitHub Issues
  • 项目文档
  • 社区论坛

最后更新: 2026-07-01 文档版本: 1.0.0