# sanguo_vnpy NAS 部署指南

## 架构概述

严格遵循vnpy官方基础架构，不修改核心代码，只做部署层适配：

- **每个用户一对独立进程**：交易进程(RPC服务端) + Web进程(FastAPI)
- **彻底隔离**：每个用户独立数据目录、独立端口，互不干扰
- **统一入口**：Nginx反向代理按路径分发
- **稳定运维**：systemd管理进程，开机自启，崩溃自动恢复

## 目录结构

```
sanguo_vnpy/                  # 项目根目录（在NAS上对应 /mnt/nas-volume/sanguo_vnpy）
├── README-NAS-DEPLOY.md      # 本文件
├── jiangwei-platform/         # 平台基础设施（姜维维护）
│   └── deploy/
│       └── nas/
│           ├── create-user.sh           # 创建新用户脚本
│           ├── create-all-users.sh      # 创建所有预设用户
│           ├── generate-all-configs.sh  # 生成所有配置
│           ├── port-allocation.md      # 端口分配表
│           └── templates/              # 配置模板
├── config/                   # 全局配置
│   ├── systemd/              # systemd服务文件
│   └── nginx/                # Nginx location配置片段
├── data/                     # 全局共享数据
│   └── history/              # 共享历史行情数据（只读）
└── users/                    # 用户目录
    ├── zhugeliang/          # 诸葛亮
    │   ├── data/            # 个人数据
    │   ├── logs/            # 日志
    │   ├── strategies/      # 个人策略
    │   ├── start_trade.py  # 交易进程启动脚本
    │   └── start_web.py    # Web进程启动脚本
    ├── pangtong/
    └── ...
```

## 端口分配

| 用户 | 编号 | RPC请求 | RPC订阅 | Web端口 | Nginx路径 | 状态 |
|------|------|---------|---------|---------|-----------|------|
| 诸葛亮 | 1 | 2010 | 2011 | 8001 | `/zhugeliang/` | 已创建 |
| 庞统 | 2 | 2020 | 2021 | 8002 | `/pangtong/` | 已创建 |
| 司马懿 | 3 | 2030 | 2031 | 8003 | `/simayi/` | 已创建 |
| 张飞 | 4 | 2040 | 2041 | 8004 | `/zhangfei/` | 已创建 |
| 关羽 | 5 | 2050 | 2051 | 8005 | `/guanyu/` | 已创建 |
| 赵云 | 6 | 2060 | 2061 | 8006 | `/zhaoyun/` | 已创建 |
| 姜维 | 7 | 2070 | 2071 | 8007 | `/jiangwei/` | 已创建 |

## 部署到NAS步骤

### 1. 克隆项目到NAS

```bash
git clone <repo-url> /mnt/nas-volume/sanguo_vnpy
cd /mnt/nas-volume/sanguo_vnpy
```

### 2. 安装依赖

```bash
pip install vnpy vnpy_webtrader
# 安装需要的gateway和app
# pip install vnpy_ctp vnpy_ctastrategy ...
```

### 3. 启用systemd服务

```bash
# 复制服务文件
cp config/systemd/*.service /etc/systemd/system/

# 重载systemd
systemctl daemon-reload

# 启用并启动所有服务
for user in zhugeliang pangtong simayi zhangfei guanyu zhaoyun jiangwei; do
  systemctl enable --now sanguo-trade-$user
  systemctl enable --now sanguo-web-$user
done
```

### 4. 配置Nginx

在Nginx主配置中包含所有用户配置：

```nginx
server {
    listen 443 ssl;
    server_name your-nas-domain.com;

    # SSL证书配置...

    # 包含所有用户配置
    include /mnt/nas-volume/sanguo_vnpy/config/nginx/*.conf;
}
```

然后重载Nginx：

```bash
nginx -t && systemctl reload nginx
```

### 5. 访问

- https://your-nas-domain.com/zhugeliang/ → 诸葛亮
- https://your-nas-domain.com/zhangfei/ → 张飞
- 依此类推...

## 添加新用户

```bash
cd /mnt/nas-volume/sanguo_vnpy/jiangwei-platform/deploy/nas
./create-user.sh <username> <user-id>
```

然后按照脚本输出的后续步骤操作。

## 维护命令

### 查看状态

```bash
# 查看某个用户进程状态
systemctl status sanguo-trade-zhugeliang
systemctl status sanguo-web-zhugeliang

# 查看日志
journalctl -u sanguo-trade-zhugeliang -f
```

### 重启进程

```bash
systemctl restart sanguo-trade-zhugeliang
systemctl restart sanguo-web-zhugeliang
```

### 停止进程（不影响他人）

```bash
systemctl stop sanguo-trade-zhugeliang
systemctl stop sanguo-web-zhugeliang
```

## 设计原则

1. ✅ **不修改vnpy核心代码**：完全使用官方原生架构
2. ✅ **彻底隔离**：一人一个进程，一人一个数据目录，互不干扰
3. ✅ **易于维护**：可以独立启停单个用户进程，不影响全局
4. ✅ **自动配置**：脚本自动生成所有配置，减少手工出错
5. ✅ **保留已有功能**：项目原有的任务分配、agent协作完全不受影响

## 故障排查

1. **Web打不开** → 检查systemd状态 `systemctl status sanguo-web-<user>`
2. **无法连接交易进程** → 检查交易进程是否启动 `systemctl status sanguo-trade-<user>`
3. **端口冲突** → 检查 `port-allocation.md` 确认端口分配
4. **WebSocket连不上** → 检查Nginx配置是否包含了Upgrade连接头

---

*维护：姜维 伯约*
*更新：2026-03-31*
