367 lines
6.2 KiB
Markdown
367 lines
6.2 KiB
Markdown
# A股量化交易系统 Docker 部署指南
|
||
|
||
## 📋 概述
|
||
|
||
本指南将帮助您使用 Docker 快速部署 A股量化交易系统。系统包含 Web 界面、数据采集服务和可选的 Nginx 反向代理。
|
||
|
||
## 🔧 环境要求
|
||
|
||
- Docker >= 20.10
|
||
- Docker Compose >= 2.0
|
||
- 系统内存 >= 2GB
|
||
- 磁盘空间 >= 5GB
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 克隆项目
|
||
|
||
```bash
|
||
git clone <your-repo-url>
|
||
cd TradingAI
|
||
```
|
||
|
||
### 2. 一键启动
|
||
|
||
```bash
|
||
# 使用启动脚本(推荐)
|
||
./docker-start.sh start
|
||
|
||
# 或者直接使用 docker-compose
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 3. 访问系统
|
||
|
||
- Web 界面:http://localhost:8080
|
||
- Nginx 代理:http://localhost(如果启用)
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
TradingAI/
|
||
├── Dockerfile # 主应用镜像
|
||
├── docker-compose.yml # 服务编排配置
|
||
├── docker-start.sh # 启动管理脚本
|
||
├── .dockerignore # Docker 忽略文件
|
||
├── config/ # 配置文件目录
|
||
├── data/ # 数据持久化目录
|
||
├── logs/ # 日志文件目录
|
||
└── nginx/ # Nginx 配置目录
|
||
```
|
||
|
||
## 🐳 服务说明
|
||
|
||
### trading-web
|
||
- **功能**:Web 界面服务
|
||
- **端口**:8080
|
||
- **健康检查**:/api/stats
|
||
- **数据卷**:
|
||
- `./data:/app/data` - 数据库文件
|
||
- `./config:/app/config` - 配置文件
|
||
- `./logs:/app/logs` - 日志文件
|
||
|
||
### trading-collector
|
||
- **功能**:数据采集和策略执行
|
||
- **调度**:每天 9:00 和 15:00 执行
|
||
- **依赖**:trading-web
|
||
|
||
### nginx(可选)
|
||
- **功能**:反向代理和负载均衡
|
||
- **端口**:80, 443
|
||
- **配置**:nginx/nginx.conf
|
||
|
||
## ⚙️ 配置文件
|
||
|
||
### config/config.yaml
|
||
|
||
```yaml
|
||
# 数据库配置
|
||
database:
|
||
path: "data/trading.db"
|
||
|
||
# 数据源配置
|
||
data_source:
|
||
provider: "adata"
|
||
|
||
# 策略配置
|
||
strategy:
|
||
kline_pattern:
|
||
min_entity_ratio: 0.55
|
||
final_yang_min_ratio: 0.40
|
||
max_turnover_ratio: 40.0
|
||
timeframes: ["daily", "weekly"]
|
||
|
||
# 通知配置
|
||
notification:
|
||
dingtalk:
|
||
enabled: false
|
||
webhook_url: ""
|
||
|
||
# 日志配置
|
||
logging:
|
||
level: "INFO"
|
||
file: "logs/trading.log"
|
||
```
|
||
|
||
## 🛠️ 管理命令
|
||
|
||
### 使用启动脚本
|
||
|
||
```bash
|
||
# 启动所有服务
|
||
./docker-start.sh start
|
||
|
||
# 停止所有服务
|
||
./docker-start.sh stop
|
||
|
||
# 重启服务
|
||
./docker-start.sh restart
|
||
|
||
# 查看实时日志
|
||
./docker-start.sh logs
|
||
|
||
# 清理所有数据(危险操作)
|
||
./docker-start.sh cleanup
|
||
```
|
||
|
||
### 使用 Docker Compose
|
||
|
||
```bash
|
||
# 启动服务
|
||
docker-compose up -d
|
||
|
||
# 停止服务
|
||
docker-compose down
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看日志
|
||
docker-compose logs -f [service_name]
|
||
|
||
# 重启特定服务
|
||
docker-compose restart trading-web
|
||
|
||
# 重新构建镜像
|
||
docker-compose build --no-cache
|
||
|
||
# 扩展服务实例
|
||
docker-compose up -d --scale trading-web=2
|
||
```
|
||
|
||
## 📊 监控和调试
|
||
|
||
### 健康检查
|
||
|
||
系统提供了健康检查端点:
|
||
|
||
```bash
|
||
# 检查 Web 服务状态
|
||
curl http://localhost:8080/api/stats
|
||
|
||
# 检查 Docker 容器健康状态
|
||
docker-compose ps
|
||
```
|
||
|
||
### 日志查看
|
||
|
||
```bash
|
||
# 查看所有服务日志
|
||
docker-compose logs -f
|
||
|
||
# 查看特定服务日志
|
||
docker-compose logs -f trading-web
|
||
|
||
# 查看容器内日志文件
|
||
docker exec -it trading-ai-web tail -f /app/logs/trading.log
|
||
```
|
||
|
||
### 进入容器调试
|
||
|
||
```bash
|
||
# 进入 Web 服务容器
|
||
docker exec -it trading-ai-web bash
|
||
|
||
# 进入采集服务容器
|
||
docker exec -it trading-ai-collector bash
|
||
|
||
# 查看容器资源使用情况
|
||
docker stats
|
||
```
|
||
|
||
## 🔧 自定义配置
|
||
|
||
### 修改端口
|
||
|
||
编辑 `docker-compose.yml`:
|
||
|
||
```yaml
|
||
services:
|
||
trading-web:
|
||
ports:
|
||
- "9090:8080" # 将外部端口改为 9090
|
||
```
|
||
|
||
### 添加环境变量
|
||
|
||
```yaml
|
||
services:
|
||
trading-web:
|
||
environment:
|
||
- FLASK_ENV=production
|
||
- DATABASE_URL=sqlite:///data/trading.db
|
||
- LOG_LEVEL=DEBUG
|
||
```
|
||
|
||
### 配置数据持久化
|
||
|
||
```yaml
|
||
services:
|
||
trading-web:
|
||
volumes:
|
||
- trading-data:/app/data
|
||
- ./config:/app/config:ro # 只读挂载
|
||
|
||
volumes:
|
||
trading-data:
|
||
driver: local
|
||
```
|
||
|
||
## 🛡️ 安全配置
|
||
|
||
### SSL/HTTPS 配置
|
||
|
||
1. 将 SSL 证书放置在 `nginx/ssl/` 目录
|
||
2. 修改 `nginx/nginx.conf` 添加 HTTPS 配置:
|
||
|
||
```nginx
|
||
server {
|
||
listen 443 ssl;
|
||
ssl_certificate /etc/nginx/ssl/cert.pem;
|
||
ssl_certificate_key /etc/nginx/ssl/key.pem;
|
||
|
||
# SSL 配置...
|
||
}
|
||
```
|
||
|
||
### 防火墙配置
|
||
|
||
```bash
|
||
# 只允许必要端口
|
||
sudo ufw allow 80
|
||
sudo ufw allow 443
|
||
sudo ufw allow 8080
|
||
```
|
||
|
||
## 🚨 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **端口被占用**
|
||
```bash
|
||
# 查找占用端口的进程
|
||
sudo lsof -i :8080
|
||
|
||
# 修改 docker-compose.yml 中的端口映射
|
||
```
|
||
|
||
2. **权限问题**
|
||
```bash
|
||
# 修复数据目录权限
|
||
sudo chown -R $USER:$USER data/ logs/
|
||
```
|
||
|
||
3. **内存不足**
|
||
```bash
|
||
# 清理不使用的镜像
|
||
docker system prune -a
|
||
|
||
# 限制容器内存使用
|
||
docker-compose up -d --memory="1g"
|
||
```
|
||
|
||
4. **数据库锁定**
|
||
```bash
|
||
# 重启服务解决数据库锁定
|
||
docker-compose restart trading-web
|
||
```
|
||
|
||
### 日志级别调整
|
||
|
||
修改 `config/config.yaml`:
|
||
|
||
```yaml
|
||
logging:
|
||
level: "DEBUG" # DEBUG, INFO, WARNING, ERROR
|
||
file: "logs/trading.log"
|
||
```
|
||
|
||
## 📈 性能优化
|
||
|
||
### 资源限制
|
||
|
||
```yaml
|
||
services:
|
||
trading-web:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '0.5'
|
||
memory: 512M
|
||
reservations:
|
||
cpus: '0.25'
|
||
memory: 256M
|
||
```
|
||
|
||
### 缓存优化
|
||
|
||
```bash
|
||
# 使用多阶段构建减小镜像大小
|
||
# 启用 Docker BuildKit
|
||
export DOCKER_BUILDKIT=1
|
||
docker-compose build
|
||
```
|
||
|
||
## 🔄 更新和备份
|
||
|
||
### 更新系统
|
||
|
||
```bash
|
||
# 拉取最新代码
|
||
git pull
|
||
|
||
# 重新构建和启动
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
### 备份数据
|
||
|
||
```bash
|
||
# 备份数据库和配置
|
||
tar -czf backup-$(date +%Y%m%d).tar.gz data/ config/
|
||
|
||
# 使用 Docker 卷备份
|
||
docker run --rm -v trading_data:/data -v $(pwd):/backup ubuntu tar czf /backup/data-backup.tar.gz /data
|
||
```
|
||
|
||
### 恢复数据
|
||
|
||
```bash
|
||
# 恢复备份
|
||
tar -xzf backup-20231201.tar.gz
|
||
|
||
# 重启服务
|
||
docker-compose restart
|
||
```
|
||
|
||
## 📞 支持
|
||
|
||
如果遇到问题,请:
|
||
|
||
1. 查看本文档的故障排除部分
|
||
2. 检查容器日志:`docker-compose logs -f`
|
||
3. 提交 GitHub Issue 并附上相关日志
|
||
|
||
## 📄 许可证
|
||
|
||
本项目采用 MIT 许可证,详见 LICENSE 文件。 |