add docker
This commit is contained in:
parent
adcc8844b1
commit
ad6963fc3f
83
.dockerignore
Normal file
83
.dockerignore
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
# Git
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
.Python
|
||||||
|
env
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
.tox
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
.mypy_cache
|
||||||
|
.pytest_cache
|
||||||
|
.hypothesis
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
.venv/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
*.md
|
||||||
|
docs/
|
||||||
|
|
||||||
|
# Test files
|
||||||
|
tests/
|
||||||
|
test_*.py
|
||||||
|
*_test.py
|
||||||
|
|
||||||
|
# Development tools
|
||||||
|
.pre-commit-config.yaml
|
||||||
|
.flake8
|
||||||
|
.black
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
.tmp
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
Dockerfile
|
||||||
|
docker-compose*.yml
|
||||||
|
.dockerignore
|
||||||
|
|
||||||
|
# Jupyter notebooks
|
||||||
|
*.ipynb
|
||||||
|
.ipynb_checkpoints/
|
||||||
|
|
||||||
|
# Local data (will be mounted as volume)
|
||||||
|
data/local_*
|
||||||
|
data/temp_*
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
*.egg-info/
|
||||||
367
DOCKER_DEPLOY.md
Normal file
367
DOCKER_DEPLOY.md
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
# 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 文件。
|
||||||
42
Dockerfile
Normal file
42
Dockerfile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# 使用Python 3.11官方镜像
|
||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 设置环境变量
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV FLASK_APP=web/app.py
|
||||||
|
ENV FLASK_ENV=production
|
||||||
|
|
||||||
|
# 安装系统依赖
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
gcc \
|
||||||
|
g++ \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 复制requirements文件
|
||||||
|
COPY requirements.txt .
|
||||||
|
|
||||||
|
# 安装Python依赖
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# 复制项目文件
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# 创建数据目录
|
||||||
|
RUN mkdir -p /app/data
|
||||||
|
|
||||||
|
# 设置权限
|
||||||
|
RUN chmod +x start_web.py
|
||||||
|
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# 健康检查
|
||||||
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||||||
|
CMD curl -f http://localhost:8080/api/stats || exit 1
|
||||||
|
|
||||||
|
# 启动命令
|
||||||
|
CMD ["python", "start_web.py"]
|
||||||
95
docker-compose.yml
Normal file
95
docker-compose.yml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# 交易系统Web应用
|
||||||
|
trading-web:
|
||||||
|
build: .
|
||||||
|
container_name: trading-ai-web
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
# 数据持久化
|
||||||
|
- ./data:/app/data
|
||||||
|
# 配置文件
|
||||||
|
- ./config:/app/config
|
||||||
|
# 日志文件
|
||||||
|
- ./logs:/app/logs
|
||||||
|
environment:
|
||||||
|
- FLASK_ENV=production
|
||||||
|
- PYTHONPATH=/app
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8080/api/stats"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 40s
|
||||||
|
networks:
|
||||||
|
- trading-network
|
||||||
|
|
||||||
|
# 数据采集服务(可选)
|
||||||
|
trading-collector:
|
||||||
|
build: .
|
||||||
|
container_name: trading-ai-collector
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
- ./config:/app/config
|
||||||
|
- ./logs:/app/logs
|
||||||
|
environment:
|
||||||
|
- PYTHONPATH=/app
|
||||||
|
# 运行数据采集脚本
|
||||||
|
command: python -c "
|
||||||
|
import time
|
||||||
|
import schedule
|
||||||
|
from src.strategy.kline_pattern_strategy import KlinePatternStrategy
|
||||||
|
from src.utils.config_loader import ConfigLoader
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
def run_strategy():
|
||||||
|
try:
|
||||||
|
config = ConfigLoader()
|
||||||
|
strategy = KlinePatternStrategy(config)
|
||||||
|
logger.info('开始运行策略扫描...')
|
||||||
|
# 这里可以添加具体的策略运行逻辑
|
||||||
|
logger.info('策略扫描完成')
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f'策略运行失败: {e}')
|
||||||
|
|
||||||
|
# 每天9点和15点运行策略
|
||||||
|
schedule.every().day.at('09:00').do(run_strategy)
|
||||||
|
schedule.every().day.at('15:00').do(run_strategy)
|
||||||
|
|
||||||
|
logger.info('数据采集服务已启动')
|
||||||
|
while True:
|
||||||
|
schedule.run_pending()
|
||||||
|
time.sleep(60)
|
||||||
|
"
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- trading-web
|
||||||
|
networks:
|
||||||
|
- trading-network
|
||||||
|
|
||||||
|
# Nginx反向代理(可选)
|
||||||
|
nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: trading-ai-nginx
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
|
- ./nginx/ssl:/etc/nginx/ssl:ro
|
||||||
|
depends_on:
|
||||||
|
- trading-web
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- trading-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
trading-network:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
trading-data:
|
||||||
|
driver: local
|
||||||
217
docker-start.sh
Executable file
217
docker-start.sh
Executable file
@ -0,0 +1,217 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# A股量化交易系统 Docker 启动脚本
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 颜色定义
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 输出带颜色的信息
|
||||||
|
info() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查Docker是否安装
|
||||||
|
check_docker() {
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
error "Docker 未安装,请先安装 Docker"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v docker-compose &> /dev/null; then
|
||||||
|
error "Docker Compose 未安装,请先安装 Docker Compose"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
success "Docker 环境检查通过"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 创建必要的目录
|
||||||
|
create_directories() {
|
||||||
|
info "创建必要的目录..."
|
||||||
|
|
||||||
|
mkdir -p data logs config nginx/ssl
|
||||||
|
|
||||||
|
# 如果配置文件不存在,创建默认配置
|
||||||
|
if [ ! -f "config/config.yaml" ]; then
|
||||||
|
warning "配置文件不存在,创建默认配置..."
|
||||||
|
cat > config/config.yaml << EOF
|
||||||
|
# A股量化交易系统配置
|
||||||
|
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"
|
||||||
|
EOF
|
||||||
|
success "已创建默认配置文件"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 创建Nginx配置
|
||||||
|
create_nginx_config() {
|
||||||
|
if [ ! -f "nginx/nginx.conf" ]; then
|
||||||
|
info "创建 Nginx 配置文件..."
|
||||||
|
mkdir -p nginx
|
||||||
|
cat > nginx/nginx.conf << EOF
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
upstream trading_app {
|
||||||
|
server trading-web:8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://trading_app;
|
||||||
|
proxy_set_header Host \$host;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
success "已创建 Nginx 配置文件"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
start_services() {
|
||||||
|
info "启动 A股量化交易系统..."
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
info "构建 Docker 镜像..."
|
||||||
|
docker-compose build
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
info "启动服务容器..."
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 等待服务启动
|
||||||
|
info "等待服务启动..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# 检查服务状态
|
||||||
|
if docker-compose ps | grep -q "Up"; then
|
||||||
|
success "服务启动成功!"
|
||||||
|
info "Web界面访问地址: http://localhost:8080"
|
||||||
|
info "如果配置了Nginx: http://localhost"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
info "查看日志: docker-compose logs -f"
|
||||||
|
info "停止服务: docker-compose down"
|
||||||
|
info "重启服务: docker-compose restart"
|
||||||
|
else
|
||||||
|
error "服务启动失败,请检查日志"
|
||||||
|
docker-compose logs
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
stop_services() {
|
||||||
|
info "停止服务..."
|
||||||
|
docker-compose down
|
||||||
|
success "服务已停止"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
show_logs() {
|
||||||
|
docker-compose logs -f
|
||||||
|
}
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
restart_services() {
|
||||||
|
info "重启服务..."
|
||||||
|
docker-compose restart
|
||||||
|
success "服务已重启"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 清理
|
||||||
|
cleanup() {
|
||||||
|
warning "这将删除所有容器、镜像和数据卷,是否继续?(y/N)"
|
||||||
|
read -r response
|
||||||
|
if [[ "$response" =~ ^[Yy]$ ]]; then
|
||||||
|
docker-compose down -v --rmi all
|
||||||
|
success "清理完成"
|
||||||
|
else
|
||||||
|
info "取消清理"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主函数
|
||||||
|
main() {
|
||||||
|
case "$1" in
|
||||||
|
"start")
|
||||||
|
check_docker
|
||||||
|
create_directories
|
||||||
|
create_nginx_config
|
||||||
|
start_services
|
||||||
|
;;
|
||||||
|
"stop")
|
||||||
|
stop_services
|
||||||
|
;;
|
||||||
|
"restart")
|
||||||
|
restart_services
|
||||||
|
;;
|
||||||
|
"logs")
|
||||||
|
show_logs
|
||||||
|
;;
|
||||||
|
"cleanup")
|
||||||
|
cleanup
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "A股量化交易系统 Docker 管理脚本"
|
||||||
|
echo ""
|
||||||
|
echo "使用方法: $0 {start|stop|restart|logs|cleanup}"
|
||||||
|
echo ""
|
||||||
|
echo "命令说明:"
|
||||||
|
echo " start - 启动服务"
|
||||||
|
echo " stop - 停止服务"
|
||||||
|
echo " restart - 重启服务"
|
||||||
|
echo " logs - 查看日志"
|
||||||
|
echo " cleanup - 清理所有数据(危险操作)"
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Loading…
Reference in New Issue
Block a user