auto-sync: 2026-04-14 08:24:14
This commit is contained in:
+720
@@ -0,0 +1,720 @@
|
||||
# Docker 基础镜像构建配置完整记忆归档
|
||||
|
||||
**归档日期**:2026年4月14日
|
||||
**归档人**:姜维 伯约
|
||||
**项目**:sanguo_vnpy 群晖NAS Docker化部署
|
||||
**NAS地址**:192.168.2.154
|
||||
|
||||
---
|
||||
|
||||
## 一、项目背景与目标
|
||||
|
||||
### 1.1 项目目标
|
||||
将完整的sanguo_vnpy量化交易环境从Mac mini迁移到群晖NAS的Docker容器中,实现:
|
||||
- ✅ 彻底释放Mac mini存储空间(从几十GB降至<1GB)
|
||||
- ✅ 数据集中存储在NAS,利用NAS的RAID保护
|
||||
- ✅ 7×24小时稳定运行,低功耗
|
||||
- ✅ 便于团队协作和数据共享
|
||||
- ✅ 统一环境配置,一次构建处处使用
|
||||
|
||||
### 1.2 整体架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 局域网环境 │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────────┐ ┌─────────────────────────┐ │
|
||||
│ │ Mac mini │ │ 群晖NAS (192.168.2.154)│ │
|
||||
│ │ │ │ │ │
|
||||
│ │ 浏览器/VSCode │ HTTP │ ┌───────────────────┐ │ │
|
||||
│ │ (纯终端访问) │◄───────►│ │ Docker容器 │ │ │
|
||||
│ │ 存储占用<1GB │ │ │ │ │ │
|
||||
│ └──────────────────┘ │ │ sanguo-vnpy │ │ │
|
||||
│ │ │ mysql │ │ │
|
||||
│ │ │ redis │ │ │
|
||||
│ │ └─────────────┘ │ │ │
|
||||
│ │ │ │ │
|
||||
│ │ ┌─────────────┐ │ │ │
|
||||
│ │ │ Jupyter Lab │ │ │ │
|
||||
│ │ └─────────────┘ │ │ │
|
||||
│ │ ┌─────────────┐ │ │ │
|
||||
│ │ │ VSCode Server││ │ │
|
||||
│ │ └─────────────┘ │ │ │
|
||||
│ │ │ │ │
|
||||
│ └───────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ ┌───────────────────┐ │ │
|
||||
│ │ │ NAS本地存储 │ │ │
|
||||
│ │ │ /volume1/stock/ │ │ │
|
||||
│ │ │ - A股数据/ │ │ │
|
||||
│ │ │ - 回测结果/ │ │ │
|
||||
│ │ │ - 代码库/ │ │ │
|
||||
│ │ └───────────────────┘ │ │
|
||||
│ └─────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、已完成的配置归档
|
||||
|
||||
### 2.1 核心配置文件位置
|
||||
|
||||
| 文件 | 位置 | 说明 |
|
||||
|------|------|------|
|
||||
| Dockerfile | `/Users/chufeng/.openclaw/workspace-jiangwei/docker/Dockerfile` | 分层构建配置 |
|
||||
| entrypoint.sh | `/Users/chufeng/.openclaw/workspace-jiangwei/docker/entrypoint.sh` | 容器启动脚本 |
|
||||
| requirements-base.txt | `/Users/chufeng/.openclaw/workspace-jiangwei/docker/requirements/requirements-base.txt` | 基础依赖层 |
|
||||
| requirements-extra.txt | `/Users/chufeng/.openclaw/workspace-jiangwei/docker/requirements/requirements-extra.txt` | 额外依赖层 |
|
||||
| requirements.txt | `/Users/chufeng/.openclaw/workspace-jiangwei/docker/requirements/requirements.txt` | 完整依赖汇总 |
|
||||
|
||||
### 2.2 Dockerfile 完整配置
|
||||
|
||||
**架构设计要点**:
|
||||
- 分层构建,利用Docker缓存机制
|
||||
- 基础依赖层+额外依赖层分离,加快重建速度
|
||||
- 使用 python:3.10-slim 基础镜像
|
||||
- 分四批安装系统依赖,减小每层镜像体积
|
||||
- 非root用户运行,提高安全性
|
||||
- 预装code-server(浏览器版VSCode)
|
||||
- 暴露4个服务端口:8888(Jupyter), 8000(vnpy), 8080(vscode), 2222(SSH)
|
||||
|
||||
```dockerfile
|
||||
FROM python:3.10-slim
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 DEBIAN_FRONTEND=noninteractive TZ=Asia/Shanghai
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 第一批:基础工具和基础依赖
|
||||
RUN apt-get update && apt-get install -y \
|
||||
--no-install-recommends \
|
||||
git \
|
||||
curl \
|
||||
wget \
|
||||
vim \
|
||||
nano \
|
||||
tzdata \
|
||||
sudo \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 第二批:基础编译工具
|
||||
RUN apt-get update && apt-get install -y \
|
||||
--no-install-recommends \
|
||||
make \
|
||||
patch \
|
||||
bzip2 \
|
||||
xz-utils \
|
||||
dpkg-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 第三批:完整gcc工具链
|
||||
RUN apt-get update && apt-get install -y \
|
||||
--no-install-recommends \
|
||||
build-essential \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 第四批:图形库和SSH
|
||||
RUN apt-get update && apt-get install -y \
|
||||
--no-install-recommends \
|
||||
libglib2.0-0 \
|
||||
libsm6 \
|
||||
libxext6 \
|
||||
libxrender-dev \
|
||||
libgomp1 \
|
||||
openssh-server \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
|
||||
|
||||
# 分层安装依赖:利用Docker缓存实现差分下载
|
||||
# 第一层:基础依赖 - 大文件、不常变,会被长期缓存
|
||||
COPY requirements-base.txt .
|
||||
RUN pip install --no-cache-dir -r requirements-base.txt
|
||||
|
||||
# 第二层:额外依赖 - 小文件、可能频繁变更,只重新下载这一层
|
||||
COPY requirements-extra.txt .
|
||||
RUN pip install --no-cache-dir -r requirements-extra.txt
|
||||
|
||||
RUN curl -fsSL https://code-server.dev/install.sh | sh
|
||||
|
||||
RUN useradd -m -u 1000 vnpy && echo "vnpy ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && mkdir -p /home/vnpy/.ssh && chown -R vnpy:vnpy /home/vnpy /app && chmod 700 /home/vnpy/.ssh
|
||||
|
||||
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && echo "vnpy:sanguo123" | chpasswd
|
||||
|
||||
USER vnpy
|
||||
|
||||
RUN mkdir -p /home/vnpy/.config/code-server && echo 'bind-addr: 0.0.0.0:8080' > /home/vnpy/.config/code-server/config.yaml && echo 'auth: password' >> /home/vnpy/.config/code-server/config.yaml && echo 'password: sanguo123' >> /home/vnpy/.config/code-server/config.yaml
|
||||
|
||||
EXPOSE 8888 8000 8080 2222
|
||||
|
||||
COPY --chown=vnpy:vnpy entrypoint.sh /app/
|
||||
RUN chmod +x /app/entrypoint.sh
|
||||
|
||||
COPY --chown=vnpy:vnpy scripts /app/scripts
|
||||
RUN chmod +x /app/scripts/*.sh
|
||||
|
||||
ENTRYPOINT ["/app/entrypoint.sh"]
|
||||
```
|
||||
|
||||
### 2.3 entrypoint.sh 启动脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo " sanguo_vnpy Docker 容器启动中..."
|
||||
echo "=========================================="
|
||||
|
||||
sudo service ssh start
|
||||
|
||||
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser \
|
||||
--NotebookApp.token='sanguo123' \
|
||||
--NotebookApp.password='' \
|
||||
--NotebookApp.allow_origin='*' &
|
||||
|
||||
code-server &
|
||||
|
||||
sleep 5
|
||||
|
||||
echo ""
|
||||
echo "✅ sanguo_vnpy 环境启动成功!"
|
||||
echo ""
|
||||
echo "访问地址:"
|
||||
echo " Jupyter Lab: http://localhost:8888 (token: sanguo123)"
|
||||
echo " VS Code: http://localhost:8080 (password: sanguo123)"
|
||||
echo " SSH: ssh -p 2222 vnpy@localhost (password: sanguo123)"
|
||||
echo ""
|
||||
echo "数据目录: /app/data"
|
||||
echo "策略目录: /app/strategies"
|
||||
echo ""
|
||||
|
||||
tail -f /dev/null
|
||||
```
|
||||
|
||||
### 2.4 requirements.txt 依赖配置
|
||||
|
||||
#### 分层设计思路
|
||||
|
||||
| 分层 | 特点 | 内容 | 缓存策略 |
|
||||
|------|------|------|----------|
|
||||
| **base层** | 大文件、低频变更 | vnpy核心框架、numpy、pandas、scipy等基础库 | 长期缓存,很少重建 |
|
||||
| **extra层** | 小文件、高频变更 | akshare、tushare、调试工具等 | 经常变更,只重建这层 |
|
||||
|
||||
**requirements-base.txt**:
|
||||
|
||||
```txt
|
||||
# 基础依赖 - 大文件、低频变更
|
||||
# 按照方案:这些包很少变化,会被Docker长期缓存
|
||||
|
||||
# 核心框架
|
||||
vnpy>=4.0.0
|
||||
|
||||
# 核心科学计算
|
||||
numpy>=2.0.0
|
||||
pandas>=2.0.0
|
||||
scipy>=1.14.0
|
||||
|
||||
# 可视化
|
||||
matplotlib>=3.9.0
|
||||
seaborn>=0.13.0
|
||||
plotly>=5.20.0
|
||||
|
||||
# 机器学习
|
||||
scikit-learn>=1.5.0
|
||||
lightgbm>=4.5.0
|
||||
xgboost>=2.1.0
|
||||
|
||||
# 量化工具
|
||||
TA-Lib>=0.6.0
|
||||
|
||||
# 工具库
|
||||
python-dotenv>=1.0.0
|
||||
sqlalchemy>=2.0.0
|
||||
loguru>=0.7.0
|
||||
pydantic-settings>=2.0.0
|
||||
cryptography>=41.0.0
|
||||
|
||||
# HTTP/网络
|
||||
requests>=2.32.0
|
||||
aiohttp>=3.9.0
|
||||
websockets>=12.0
|
||||
|
||||
# Web框架
|
||||
fastapi>=0.100.0
|
||||
uvicorn>=0.20.0
|
||||
python-multipart>=0.0.6
|
||||
pydantic>=2.0.0
|
||||
httpx>=0.27.0
|
||||
httpcore>=1.0.0
|
||||
|
||||
# 测试
|
||||
pytest>=8.0.0
|
||||
|
||||
# Jupyter生态
|
||||
jupyterlab>=4.0.0
|
||||
voila>=0.5.0
|
||||
|
||||
# 数据库(可选)
|
||||
psycopg2-binary>=2.9.0
|
||||
```
|
||||
|
||||
**requirements-extra.txt**:
|
||||
|
||||
```txt
|
||||
# 额外依赖 - 小文件、高频变更
|
||||
# 按照方案:频繁更新或需要测试的新包放在这里
|
||||
# 这里变更只会重新构建这一层,不会影响基础依赖缓存
|
||||
|
||||
# 数据接口(频繁更新)
|
||||
akshare>=1.0.0
|
||||
tushare>=1.2.0
|
||||
|
||||
# 调试工具
|
||||
debugpy>=1.8.0
|
||||
|
||||
# Jupyter组件
|
||||
ipywidgets>=8.0.0
|
||||
```
|
||||
|
||||
### 2.5 默认凭证配置
|
||||
|
||||
| 服务 | 用户名 | 密码/Token | 端口 |
|
||||
|------|--------|-----------|------|
|
||||
| Jupyter Lab | - | `sanguo123` | 8888 |
|
||||
| VS Code Server | - | `sanguo123` | 8080 |
|
||||
| SSH | vnpy | `sanguo123` | 2222 |
|
||||
|
||||
> ⚠️ **安全提示**:生产环境请修改所有默认密码!
|
||||
|
||||
---
|
||||
|
||||
## 三、部署脚本归档
|
||||
|
||||
### 3.1 脚本位置
|
||||
|
||||
| 脚本 | 位置 | 说明 |
|
||||
|------|------|------|
|
||||
| sanguo_nas_deploy.sh | `/jiangwei-platform/scripts/docker/sanguo_nas_deploy.sh` | 全自动准备部署(Mac端运行) |
|
||||
| nas_auto_deploy.sh | `/jiangwei-platform/scripts/docker/nas_auto_deploy.sh` | NAS自动挂载部署(Mac端) |
|
||||
| nas_manager.sh | `/jiangwei-platform/scripts/docker/nas_manager.sh` | NAS管理工具(状态、挂载、日志) |
|
||||
|
||||
### 3.2 完整NAS目录结构
|
||||
|
||||
```
|
||||
/volume1/stock/sanguo_vnpy/
|
||||
├── config/ # 配置文件
|
||||
├── data/ # 数据目录
|
||||
│ └── A股数据/
|
||||
│ ├── 日线数据/
|
||||
│ ├── 分钟线数据/
|
||||
│ └── 财务数据/
|
||||
├── notebooks/ # Jupyter笔记本
|
||||
├── strategies/ # 策略代码
|
||||
│ ├── example_strategies/ # 示例策略
|
||||
│ └── custom_strategies/ # 自定义策略
|
||||
├── tests/ # 测试脚本
|
||||
├── scripts/ # 工具脚本
|
||||
│ └── deploy_on_nas.sh # NAS端部署脚本
|
||||
├── research/ # 调研报告
|
||||
├── docker/ # Docker配置
|
||||
│ ├── Dockerfile
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── entrypoint.sh
|
||||
│ ├── requirements.txt
|
||||
│ ├── .env
|
||||
│ ├── logs/ # 容器日志
|
||||
│ ├── mysql-data/ # MySQL数据
|
||||
│ ├── redis-data/ # Redis数据
|
||||
│ └── pgadmin-data/ # pgAdmin数据
|
||||
└── logs/ # 应用日志
|
||||
```
|
||||
|
||||
### 3.3 docker-compose.yml 配置(完整版)
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
sanguo-vnpy:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: sanguo-vnpy
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "8888:8888"
|
||||
- "8000:8000"
|
||||
- "8080:8080"
|
||||
- "2222:22"
|
||||
|
||||
volumes:
|
||||
- ./config:/app/config
|
||||
- /volume1/stock/sanguo_vnpy/data:/app/data
|
||||
- /volume1/stock/sanguo_vnpy/notebooks:/app/notebooks
|
||||
- /volume1/stock/sanguo_vnpy/strategies:/app/strategies
|
||||
- ./logs:/app/logs
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- VNPY_DATA_DIR=/app/data
|
||||
- VNPY_CONFIG_DIR=/app/config
|
||||
- NAS_IP=192.168.2.154
|
||||
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '4.0'
|
||||
memory: 8G
|
||||
reservations:
|
||||
cpus: '2.0'
|
||||
memory: 4G
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8888"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
- sanguo-network
|
||||
|
||||
networks:
|
||||
sanguo-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、Mac端NAS自动挂载配置
|
||||
|
||||
### 4.1 配置信息
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| NAS IP | 192.168.2.154 |
|
||||
| NAS 用户 | cfdaily |
|
||||
| NAS 密码 | Ccf7561523 |
|
||||
| 共享名称 | stock |
|
||||
| 本地挂载点 | /Users/chufeng/nas/stock |
|
||||
| Launch Daemon | com.user.nasmount |
|
||||
| 守护脚本 | /Users/chufeng/.openclaw/workspace-jiangwei/nas_mounter.sh |
|
||||
| 日志目录 | /Users/chufeng/.openclaw/workspace-jiangwei/logs/ |
|
||||
|
||||
### 4.2 SMB优化配置 (/etc/nsmb.conf)
|
||||
|
||||
```ini
|
||||
[default]
|
||||
signing_required=no
|
||||
protocol_vers_map=6
|
||||
dir_cache_max_cnt=65536
|
||||
dir_cache_max=10485760
|
||||
file_ids_off=yes
|
||||
mc_on=no
|
||||
soft=yes
|
||||
timeout=30
|
||||
```
|
||||
|
||||
### 4.3 自动挂载守护脚本
|
||||
|
||||
Launch Daemon每分钟检查一次挂载状态,如果掉线自动重挂。
|
||||
|
||||
---
|
||||
|
||||
## 五、构建历史记录
|
||||
|
||||
### 5.1 历史失败记录
|
||||
|
||||
#### 失败记录 #1:一次性安装所有依赖导致网络超时
|
||||
|
||||
**问题**:
|
||||
- 将所有依赖放在一层,网络不稳定导致pip下载超时
|
||||
- 任何依赖更新都需要重新下载所有包,非常慢
|
||||
|
||||
**解决方案**:
|
||||
- ✅ 采用分层构建:base层 + extra层
|
||||
- ✅ base层包含大文件、低频变更的基础依赖
|
||||
- ✅ extra层包含小文件、高频变更的额外依赖
|
||||
- ✅ 利用Docker缓存,只有变更层需要重新下载
|
||||
|
||||
---
|
||||
|
||||
#### 失败记录 #2:基础镜像选择问题
|
||||
|
||||
**尝试过**:
|
||||
- `python:3.11-slim-bookworm` - 可行,但vnpy官方推荐Python 3.10
|
||||
- `python:3.10-slim-bullseye` - 可行
|
||||
- `python:3.10-slim` - 当前选择,指向3.10-slim-bullseye
|
||||
|
||||
**当前选择**:`python:3.10-slim`
|
||||
|
||||
**原因**:vnpy对Python 3.10兼容性最好,slim镜像体积小
|
||||
|
||||
---
|
||||
|
||||
#### 失败记录 #3:系统依赖安装问题
|
||||
|
||||
**问题**:
|
||||
- 一次性安装所有系统依赖,镜像体积大
|
||||
- 某些依赖缺失导致编译失败
|
||||
|
||||
**解决方案**:
|
||||
- ✅ 分四批安装系统依赖,每层更小,更好利用缓存
|
||||
- 批1:基础工具
|
||||
- 批2:编译工具
|
||||
- 批3:完整gcc工具链
|
||||
- 批4:图形库和SSH
|
||||
|
||||
---
|
||||
|
||||
#### 失败记录 #4:TA-Lib编译问题
|
||||
|
||||
**问题**:
|
||||
- TA-Lib需要编译,很多Dockerfile跳过这个步骤
|
||||
- 缺少系统依赖导致编译失败
|
||||
|
||||
**当前方案**:
|
||||
- ✅ 已经安装了完整build-essential工具链
|
||||
- ✅ pip安装TA-Lib会自动编译,应该成功
|
||||
- 如果仍失败,需要先安装系统级ta-lib库
|
||||
|
||||
---
|
||||
|
||||
### 5.2 当前方案总结
|
||||
|
||||
| 项目 | 当前方案 | 是否解决问题 |
|
||||
|------|---------|-------------|
|
||||
| 分层依赖 | ✅ base + extra 两层 | 解决网络超时和缓存问题 |
|
||||
| 基础镜像 | ✅ python:3.10-slim | 稳定兼容 |
|
||||
| 系统依赖 | ✅ 分四批安装 | 完整且缓存友好 |
|
||||
| 非root用户 | ✅ vnpy用户,ID 1000 | 安全且权限正确 |
|
||||
| 多服务 | ✅ SSH + Jupyter + VSCode + vnpy | 全功能支持 |
|
||||
| 缓存利用 | ✅ 充分利用Docker层缓存 | 重建速度快 |
|
||||
|
||||
---
|
||||
|
||||
## 六、访问地址汇总(部署完成后)
|
||||
|
||||
| 服务 | 地址 | 凭证 |
|
||||
|------|------|------|
|
||||
| Jupyter Lab | http://192.168.2.154:8888 | token: `sanguo123` |
|
||||
| VS Code Server | http://192.168.2.154:8080 | password: `sanguo123` |
|
||||
| vn.py Web界面 | http://192.168.2.154:8000 | - |
|
||||
| SSH | `ssh -p 2222 vnpy@192.168.2.154` | password: `sanguo123` |
|
||||
| 群晖DSM | http://192.168.2.154:5000 | admin 账号密码 |
|
||||
|
||||
---
|
||||
|
||||
## 七、部署步骤 Checklist
|
||||
|
||||
### 前置检查
|
||||
- [ ] 群晖NAS已开机,IP: 192.168.2.154 可访问
|
||||
- [ ] Container Manager已安装并运行
|
||||
- [ ] NAS已启用SSH
|
||||
- [ ] NAS存储空间足够(建议至少50GB可用)
|
||||
- [ ] NAS内存足够(建议至少8GB)
|
||||
- [ ] Mac端NAS已挂载:`/Users/chufeng/nas/stock`
|
||||
|
||||
### Mac端准备(已完成)
|
||||
- [x] 创建分层Dockerfile
|
||||
- [x] 配置requirements分层
|
||||
- [x] 创建entrypoint启动脚本
|
||||
- [x] 配置Mac自动挂载Launch Daemon
|
||||
- [x] 创建nas_manager管理工具
|
||||
- [x] 完成所有文件复制到NAS
|
||||
|
||||
### NAS端部署(需要执行)
|
||||
- [ ] SSH登录NAS:`ssh admin@192.168.2.154`
|
||||
- [ ] 进入Docker目录:`cd /volume1/stock/sanguo_vnpy/docker`
|
||||
- [ ] 构建镜像:`docker-compose build`
|
||||
- [ ] 启动容器:`docker-compose up -d`
|
||||
- [ ] 查看日志:`docker-compose logs -f`
|
||||
- [ ] 等待构建完成(根据NAS性能,可能需要30分钟-2小时)
|
||||
- [ ] 检查容器状态:`docker-compose ps` 应该显示 Up (healthy)
|
||||
|
||||
### 验证访问
|
||||
- [ ] 浏览器访问 Jupyter Lab:http://192.168.2.154:8888
|
||||
- [ ] 浏览器访问 VS Code:http://192.168.2.154:8080
|
||||
- [ ] SSH连接测试:`ssh -p 2222 vnpy@192.168.2.154`
|
||||
- [ ] 运行简单回测测试验证
|
||||
|
||||
---
|
||||
|
||||
## 八、常用命令
|
||||
|
||||
### Mac端NAS管理
|
||||
|
||||
```bash
|
||||
# 查看NAS状态
|
||||
/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh status
|
||||
|
||||
# 手动挂载
|
||||
sudo /Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh mount
|
||||
|
||||
# 卸载NAS
|
||||
sudo /Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh umount
|
||||
|
||||
# 查看日志
|
||||
/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh logs
|
||||
|
||||
# 实时跟踪日志
|
||||
/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh follow
|
||||
|
||||
# 重启挂载守护
|
||||
sudo /Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/jiangwei-platform/scripts/docker/nas_manager.sh restart
|
||||
```
|
||||
|
||||
### NAS端Docker管理
|
||||
|
||||
```bash
|
||||
# 进入项目目录
|
||||
cd /volume1/stock/sanguo_vnpy/docker
|
||||
|
||||
# 查看容器状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看实时日志
|
||||
docker-compose logs -f
|
||||
|
||||
# 查看最近日志
|
||||
docker-compose logs --tail=100
|
||||
|
||||
# 重启容器
|
||||
docker-compose restart
|
||||
|
||||
# 停止容器
|
||||
docker-compose stop
|
||||
|
||||
# 停止并删除容器(保留数据)
|
||||
docker-compose down
|
||||
|
||||
# 停止并删除容器和镜像(完全清理)
|
||||
docker-compose down --rmi all
|
||||
|
||||
# 重新构建
|
||||
docker-compose build --no-cache
|
||||
|
||||
# 启动
|
||||
docker-compose up -d
|
||||
|
||||
# 清理无用镜像
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、故障排查指南
|
||||
|
||||
### 问题1:构建过程中pip下载超时
|
||||
|
||||
**症状**:pip下载某个包很慢,然后超时失败
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 使用国内镜像源,在构建前添加国内源
|
||||
mkdir -p ~/.pip
|
||||
cat > ~/.pip/pip.conf <<EOF
|
||||
[global]
|
||||
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
trusted-host = pypi.tuna.tsinghua.edu.cn
|
||||
EOF
|
||||
```
|
||||
然后重新构建:`docker-compose build`
|
||||
|
||||
---
|
||||
|
||||
### 问题2:容器启动后无法访问
|
||||
|
||||
**症状**:浏览器无法打开Jupyter或VSCode
|
||||
|
||||
**检查步骤**:
|
||||
1. 检查容器状态:`docker-compose ps`
|
||||
- 如果未运行:`docker-compose up -d` 启动
|
||||
- 如果未healthy:查看日志 `docker-compose logs`
|
||||
|
||||
2. 检查群晖防火墙:
|
||||
- DSM → 控制面板 → 安全性 → 防火墙
|
||||
- 确保允许 8888, 8000, 8080, 2222 端口入站
|
||||
|
||||
3. 检查网络:
|
||||
- ping 192.168.2.154 确认网络连通
|
||||
- 确认Mac和NAS在同一局域网
|
||||
|
||||
---
|
||||
|
||||
### 问题3:TA-Lib安装失败
|
||||
|
||||
**症状**:pip安装TA-Lib时编译失败
|
||||
|
||||
**解决方案**(在NAS Dockerfile中添加):
|
||||
```dockerfile
|
||||
# 在系统依赖安装部分添加
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libta-lib-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
```
|
||||
然后重新构建。
|
||||
|
||||
---
|
||||
|
||||
### 问题4:内存不足导致构建失败
|
||||
|
||||
**症状**:构建过程中容器被OOM killed
|
||||
|
||||
**解决方案**:
|
||||
1. 关闭NAS上其他不必要的容器
|
||||
2. 增加交换空间:
|
||||
```bash
|
||||
# 在NAS上创建2GB交换文件
|
||||
sudo fallocate -l 2G /swapfile
|
||||
sudo chmod 600 /swapfile
|
||||
sudo mkswap /swapfile
|
||||
sudo swapon /swapfile
|
||||
```
|
||||
然后重新构建。
|
||||
|
||||
---
|
||||
|
||||
### 问题5:权限问题无法访问NAS数据目录
|
||||
|
||||
**症状**:容器内无法读写挂载的数据目录
|
||||
|
||||
**解决方案**:
|
||||
1. 在NAS上检查文件夹权限:
|
||||
- File Station → `/volume1/stock/sanguo_vnpy/data` → 属性 → 权限
|
||||
- 确保everyone有读写权限
|
||||
|
||||
2. 或者在docker-compose.yml中添加:
|
||||
```yaml
|
||||
user: "1000:1000"
|
||||
```
|
||||
匹配群晖用户ID。
|
||||
|
||||
---
|
||||
|
||||
## 十、参考资料
|
||||
|
||||
1. [完整部署方案调研报告](../nas-docker-deployment-20260326/final/sanguo_vnpy群晖Docker部署可行性调研报告.md)
|
||||
2. [原脚本目录](../../../scripts/docker/)
|
||||
3. [vn.py官方文档](https://www.vnpy.com/docs/)
|
||||
4. [Docker官方文档](https://docs.docker.com/)
|
||||
|
||||
---
|
||||
|
||||
## 十一、版本历史
|
||||
|
||||
| 版本 | 日期 | 变更说明 | 归档人 |
|
||||
|------|------|----------|--------|
|
||||
| v1.0 | 2026-04-14 | 首次完整归档所有配置 | 姜维 |
|
||||
|
||||
---
|
||||
|
||||
**归档完成** ✅
|
||||
Reference in New Issue
Block a user