#!/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: "tushare" 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 "$@"