Skip to content

文档与部署 #11

@realm520

Description

@realm520

## 概述

为Strategy-21创建完整的文档体系和自动化部署方案,包括用户使用指南、技术文档、Docker容器化部署、监控运维文档等,确保策略的易用性、可维护性和生产环境可靠部署。

## 目标

- 创建完整的用户文档和技术文档
- 配置Docker容器化部署环境
- 建立自动化部署流程
- 提供运维监控和故障处理指南

## 技术要求

### 核心功能

1. **用户文档**
   - 快速开始指南
   - 详细使用教程
   - 参数配置说明
   - 常见问题解答

2. **技术文档**
   - 系统架构文档
   - API接口文档
   - 开发者指南
   - 故障排查文档

3. **部署方案**
   - Docker容器化配置
   - 自动化部署脚本
   - 环境配置管理
   - 版本发布流程

4. **运维文档**
   - 监控指标说明
   - 告警处理流程
   - 备份恢复方案
   - 性能调优指南

### 实现细节

#### 项目根目录README (README.md)

```markdown
# Strategy21 - VATSM量化交易策略

[![Docker](https://img.shields.io/badge/Docker-Ready-blue)](https://hub.docker.com/)
[![Python](https://img.shields.io/badge/Python-3.8+-green)](https://python.org)
[![License](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)
[![Tests](https://img.shields.io/badge/Tests-Passing-brightgreen)](tests/)

基于VATSM(Volume, ATR, Trend, Strength, Momentum)技术指标系统的高级量化交易策略,专为加密货币市场设计。

## ✨ 特性

- 🎯 **多维信号系统**: 集成5个核心技术指标的综合分析
- 🛡️ **三层风险管理**: 固定止损、跟踪止损、ATR动态止损
- 📊 **智能仓位管理**: 基于信号强度的动态仓位配置
- 🔄 **自适应市场**: 支持牛市、熊市、震荡市不同参数配置
- 📈 **实时监控**: 完整的性能监控和告警系统
- 🐳 **一键部署**: 完整的Docker容器化解决方案

## 🚀 快速开始

### Docker部署(推荐)

```bash
# 1. 克隆项目
git clone https://github.com/your-org/freqbot
cd freqbot

# 2. 配置环境变量
cp .env.example .env
# 编辑.env文件,填入API密钥等配置

# 3. 启动服务
docker-compose up -d

# 4. 查看监控面板
open http://localhost:8080

本地开发

# 1. 安装依赖
uv sync

# 2. 配置策略参数
cp user_data/config_strategy21.json.example user_data/config_strategy21.json

# 3. 运行回测
uv run freqtrade backtesting --config user_data/config_strategy21.json --strategy Strategy21VATSM

# 4. 启动实盘交易(请先在模拟环境测试)
uv run freqtrade trade --config user_data/config_strategy21.json

📋 系统要求

  • Python: 3.8+
  • 内存: 最小4GB,推荐8GB+
  • 存储: 至少10GB可用空间
  • 网络: 稳定的互联网连接(用于数据获取)

📊 策略概览

VATSM指标系统

指标 作用 权重
Volume 成交量分析,识别资金流入 20%
ATR 波动率测量,风险评估 15%
Trend 趋势识别,方向判断 25%
Strength 动力强度,RSI/MACD分析 25%
Momentum 价格动量,加速度检测 15%

风险管理层级

  1. 固定止损: 2% 固定亏损保护
  2. 跟踪止损: 1.5% 动态利润保护
  3. ATR动态止损: 基于波动率的智能止损

仓位管理策略

  • 小仓位: 1-2% (信号强度 0-0.4)
  • 中仓位: 3-5% (信号强度 0.4-0.7)
  • 大仓位: 6-8% (信号强度 0.7-1.0)

📚 文档导航

🎯 性能表现

基于2023年历史数据回测结果:

指标 数值
年化收益率 45.2%
最大回撤 -12.8%
夏普比率 1.87
胜率 62.3%
盈亏比 1.43

⚠️ 历史表现不代表未来收益,请谨慎评估风险

🛠️ 配置示例

基础配置

{
  "strategy": "Strategy21VATSM",
  "timeframe": "5m",
  "stake_amount": 100,
  "max_open_trades": 5,
  "dry_run": false
}

策略参数

{
  "vatsm_indicators": {
    "volume_sma_period": 20,
    "atr_period": 14,
    "trend_sma_period": 50,
    "strength_rsi_period": 14,
    "momentum_period": 14
  }
}

🆘 支持与反馈

📄 许可证

本项目采用 MIT 许可证

⚠️ 免责声明

本软件仅供教育和研究目的。数字货币交易存在高风险,可能导致资金损失。使用本软件进行实际交易的所有风险由用户承担。开发者不对任何交易损失承担责任。

🙏 致谢

感谢 Freqtrade 项目提供的优秀交易框架。

📞 联系我们: 如有任何问题,请通过 Issues 联系我们。


#### 用户指南 (docs/user-guide/README.md)

```markdown
# Strategy21 用户指南

## 目录

1. [安装与设置](#安装与设置)
2. [配置说明](#配置说明)  
3. [运行策略](#运行策略)
4. [监控与管理](#监控与管理)
5. [优化调参](#优化调参)
6. [故障排除](#故障排除)

## 安装与设置

### 系统要求

- **操作系统**: Linux/macOS/Windows (推荐Linux)
- **Python版本**: 3.8 或更高版本
- **内存**: 最小 4GB RAM,推荐 8GB+
- **存储**: 至少 10GB 可用磁盘空间
- **网络**: 稳定的互联网连接

### Docker安装(推荐)

Docker安装是最简单和推荐的方式:

```bash
# 1. 确保已安装Docker和Docker Compose
docker --version
docker-compose --version

# 2. 克隆项目
git clone https://github.com/your-org/freqbot.git
cd freqbot

# 3. 复制环境配置
cp .env.example .env

# 4. 编辑环境配置
nano .env

环境配置示例:

# 交易所API配置
EXCHANGE_API_KEY=your_api_key_here
EXCHANGE_SECRET=your_secret_here
EXCHANGE_NAME=binance

# 数据库配置
DB_URL=sqlite:///tradesv3.sqlite

# 监控配置
ENABLE_MONITORING=true
MONITORING_PORT=8080

# 安全配置
JWT_SECRET=your_jwt_secret_here
API_USERNAME=your_username
API_PASSWORD=your_password

# 风险控制
MAX_DRAWDOWN=0.15
MAX_DAILY_LOSS=0.08

本地安装

如果你偏好本地安装:

# 1. 克隆项目
git clone https://github.com/your-org/freqbot.git
cd freqbot

# 2. 安装依赖管理器 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 3. 创建虚拟环境并安装依赖
uv sync

# 4. 激活虚拟环境
uv shell

# 5. 验证安装
freqtrade --version

配置说明

主配置文件

主配置文件位于 user_data/config_strategy21.json

{
  "trading_mode": "live",
  "dry_run": true,
  "stake_currency": "USDT",
  "stake_amount": "unlimited",
  "tradable_balance_ratio": 0.99,
  
  "timeframe": "5m",
  "startup_candle_count": 500,
  
  "strategy": "Strategy21VATSM",
  "strategy_path": "user_data/strategies/",
  
  "exchange": {
    "name": "binance",
    "key": "${EXCHANGE_API_KEY}",
    "secret": "${EXCHANGE_SECRET}",
    "pair_whitelist": [
      "BTC/USDT", "ETH/USDT", "BNB/USDT"
    ]
  }
}

策略参数配置

策略参数配置文件 user_data/strategy21_params.json

{
  "strategy_params": {
    "vatsm_indicators": {
      "volume_sma_period": 20,
      "atr_period": 14,
      "trend_sma_period": 50,
      "trend_ema_period": 21,
      "strength_rsi_period": 14,
      "momentum_period": 14
    },
    
    "signal_system": {
      "entry_signals": {
        "volume_threshold": 1.5,
        "atr_min_threshold": 0.001,
        "trend_alignment_required": true,
        "strength_min_score": 0.6,
        "momentum_min_score": 0.5
      },
      
      "signal_weights": {
        "volume_weight": 0.20,
        "atr_weight": 0.15,
        "trend_weight": 0.25,
        "strength_weight": 0.25,
        "momentum_weight": 0.15
      }
    }
  }
}

环境预设配置

根据不同市场环境选择合适的预设:

牛市配置: 使用 config_bullish.json

# 应用牛市配置
python scripts/apply_config_preset.py --preset bullish

熊市配置: 使用 config_bearish.json

# 应用熊市配置
python scripts/apply_config_preset.py --preset bearish

震荡市配置: 使用 config_sideways.json

# 应用震荡市配置
python scripts/apply_config_preset.py --preset sideways

运行策略

1. 回测验证

在实盘运行前,务必先进行回测:

# 基础回测
uv run freqtrade backtesting \
  --config user_data/config_strategy21.json \
  --strategy Strategy21VATSM \
  --timerange 20230101-20231231

# 详细回测报告
uv run freqtrade backtesting \
  --config user_data/config_strategy21.json \
  --strategy Strategy21VATSM \
  --timerange 20230101-20231231 \
  --export trades \
  --export-filename user_data/backtest_results/strategy21_2023.json

2. 模拟交易

在live环境测试前先运行模拟交易:

# 启动模拟交易(dry-run模式)
uv run freqtrade trade \
  --config user_data/config_strategy21.json \
  --strategy Strategy21VATSM \
  --dry-run

3. 实盘交易

⚠️ 警告: 实盘交易有资金损失风险,请确保充分测试后再开始。

# 启动实盘交易(确保配置dry_run: false)
uv run freqtrade trade \
  --config user_data/config_strategy21.json \
  --strategy Strategy21VATSM

4. Docker部署

# 构建并启动服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f freqbot

# 停止服务
docker-compose down

监控与管理

监控面板

访问 http://localhost:8080 查看监控面板:

  • 实时指标: VATSM指标状态
  • 交易性能: 盈亏、胜率、回撤
  • 风险监控: 仓位分布、风险告警
  • 系统状态: 运行时间、错误日志

FreqUI界面

FreqUI提供更丰富的交易管理功能:

# 启动FreqUI
freqtrade trade --config user_data/config_strategy21.json --freqai-enabled

访问 http://localhost:8080/trade 使用FreqUI。

命令行管理

# 查看当前持仓
freqtrade show-trades --config user_data/config_strategy21.json

# 强制卖出某个交易对
freqtrade forcesexit BTC/USDT --config user_data/config_strategy21.json

# 查看策略性能
freqtrade show-trades --config user_data/config_strategy21.json --print-json

# 更新配置(不重启)
freqtrade reload_config --config user_data/config_strategy21.json

优化调参

参数优化流程

  1. 确定优化目标

    • 最大化年化收益率
    • 最小化最大回撤
    • 优化夏普比率
  2. 选择优化参数

    # 运行参数优化
    freqtrade hyperopt \
      --config user_data/config_strategy21.json \
      --hyperopt-loss SharpeHyperOptLoss \
      --strategy Strategy21VATSM \
      --epochs 500 \
      --spaces buy sell
  3. 分析优化结果

    # 查看优化结果
    freqtrade hyperopt-list --config user_data/config_strategy21.json
    
    # 显示最佳参数
    freqtrade hyperopt-show --config user_data/config_strategy21.json -n 1

推荐优化参数

基于历史回测,以下参数通常表现较好:

保守配置:

{
  "volume_threshold": 2.0,
  "strength_min_score": 0.7,
  "fixed_stop_pct": 0.015
}

积极配置:

{
  "volume_threshold": 1.3,
  "strength_min_score": 0.5,
  "fixed_stop_pct": 0.025
}

故障排除

常见问题

Q1: 策略不产生交易信号

  • 检查配置参数是否过于严格
  • 验证市场数据是否正常获取
  • 确认交易对在白名单中

Q2: 内存使用过高

# 优化数据库
sqlite3 user_data/tradesv3.sqlite "VACUUM;"

# 清理旧数据
freqtrade delete-trades --config user_data/config_strategy21.json --days 30

Q3: API连接错误

  • 验证API密钥配置
  • 检查网络连接
  • 确认交易所API权限

Q4: Docker服务启动失败

# 查看详细错误信息
docker-compose logs freqbot

# 重建容器
docker-compose down && docker-compose up --build -d

日志分析

# 实时查看日志
tail -f logs/freqtrade.log

# 搜索错误日志
grep -i error logs/freqtrade.log

# 分析交易日志
grep "ENTRY\|EXIT" logs/freqtrade.log | tail -20

性能调优

# 数据库优化
sqlite3 user_data/tradesv3.sqlite "PRAGMA optimize;"

# 清理缓存
rm -rf user_data/data/binance/*.json.gz.tmp

# 更新pip包
uv sync --upgrade

紧急停止

如果需要紧急停止所有交易:

# 命令行停止
pkill -f "freqtrade trade"

# Docker停止
docker-compose down

# 强制卖出所有持仓(谨慎使用)
freqtrade forcesexit --all --config user_data/config_strategy21.json

最佳实践

  1. 风险管理

    • 始终设置合理的止损
    • 控制单笔交易资金占比
    • 定期检查回撤情况
  2. 配置管理

    • 使用版本控制管理配置
    • 记录参数修改原因
    • 建立配置文件备份
  3. 监控告警

    • 设置关键指标告警
    • 定期检查系统运行状态
    • 保持日志文件整洁
  4. 持续优化

    • 定期回测验证策略有效性
    • 根据市场变化调整参数
    • 关注策略性能衰退

更多详细信息请参考:


#### Docker部署配置

##### Dockerfile

```dockerfile
# 多阶段构建Dockerfile
FROM python:3.11-slim as builder

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

# 安装uv包管理器
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.cargo/bin:$PATH"

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY pyproject.toml uv.lock ./

# 创建虚拟环境并安装依赖
RUN uv sync --frozen --no-dev

# 运行时阶段
FROM python:3.11-slim as runtime

# 安装运行时依赖
RUN apt-get update && apt-get install -y \
    sqlite3 \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 创建非root用户
RUN useradd --create-home --shell /bin/bash freqbot

# 设置工作目录
WORKDIR /app

# 从builder阶段复制虚拟环境
COPY --from=builder /app/.venv /app/.venv

# 复制应用代码
COPY . .

# 设置权限
RUN chown -R freqbot:freqbot /app

# 切换到非root用户
USER freqbot

# 设置环境变量
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH="/app"

# 创建必要的目录
RUN mkdir -p /app/user_data/{data,logs,backtest_results} \
    && mkdir -p /app/logs

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8080/api/v1/ping || exit 1

# 暴露端口
EXPOSE 8080 8081

# 默认启动命令
CMD ["python", "-m", "freqtrade", "trade", \
     "--config", "user_data/config_strategy21.json", \
     "--strategy", "Strategy21VATSM"]
docker-compose.yml
version: '3.8'

services:
  freqbot:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: freqbot-strategy21
    restart: unless-stopped
    
    environment:
      - EXCHANGE_API_KEY=${EXCHANGE_API_KEY}
      - EXCHANGE_SECRET=${EXCHANGE_SECRET}
      - JWT_SECRET=${JWT_SECRET}
      - API_USERNAME=${API_USERNAME}
      - API_PASSWORD=${API_PASSWORD}
      - TZ=Asia/Shanghai
    
    ports:
      - "8080:8080"  # FreqTrade API
      - "8081:8081"  # 监控面板
    
    volumes:
      - ./user_data:/app/user_data
      - ./logs:/app/logs
      - freqbot_data:/app/data
    
    networks:
      - freqbot_network
    
    depends_on:
      - redis
      - postgres
    
    # 资源限制
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '1.0'
        reservations:
          memory: 1G
          cpus: '0.5'
  
  # Redis缓存服务
  redis:
    image: redis:7-alpine
    container_name: freqbot-redis
    restart: unless-stopped
    
    ports:
      - "6379:6379"
    
    volumes:
      - redis_data:/data
    
    networks:
      - freqbot_network
    
    command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
  
  # PostgreSQL数据库(可选,默认使用SQLite)
  postgres:
    image: postgres:15-alpine
    container_name: freqbot-postgres
    restart: unless-stopped
    
    environment:
      - POSTGRES_USER=freqbot
      - POSTGRES_PASSWORD=${DB_PASSWORD:-freqbot123}
      - POSTGRES_DB=freqbot
    
    ports:
      - "5432:5432"
    
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql
    
    networks:
      - freqbot_network
  
  # 监控面板
  monitoring:
    build:
      context: ./monitoring
      dockerfile: Dockerfile
    container_name: freqbot-monitoring
    restart: unless-stopped
    
    ports:
      - "3000:3000"
    
    environment:
      - FREQBOT_API_URL=http://freqbot:8080
      - REDIS_URL=redis://redis:6379
    
    depends_on:
      - freqbot
      - redis
    
    networks:
      - freqbot_network
  
  # Nginx反向代理(生产环境)
  nginx:
    image: nginx:alpine
    container_name: freqbot-nginx
    restart: unless-stopped
    
    ports:
      - "80:80"
      - "443:443"
    
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl:/etc/nginx/ssl
    
    depends_on:
      - freqbot
      - monitoring
    
    networks:
      - freqbot_network

volumes:
  freqbot_data:
  redis_data:
  postgres_data:

networks:
  freqbot_network:
    driver: bridge
.env.example
# ===========================================
# FreqBot Strategy21 环境配置
# ===========================================

# 交易所配置
EXCHANGE_NAME=binance
EXCHANGE_API_KEY=your_api_key_here
EXCHANGE_SECRET=your_secret_here
EXCHANGE_PASSPHRASE=  # 仅OKX等需要

# 交易配置
TRADING_MODE=live
DRY_RUN=true
STAKE_CURRENCY=USDT
STAKE_AMOUNT=unlimited
MAX_OPEN_TRADES=5

# 数据库配置
DB_URL=sqlite:///user_data/tradesv3.sqlite
# 或使用PostgreSQL: postgresql://freqbot:password@postgres:5432/freqbot
DB_PASSWORD=freqbot123

# API安全配置
JWT_SECRET=your_jwt_secret_here_minimum_32_characters
API_USERNAME=admin
API_PASSWORD=your_secure_password_here

# 监控配置
ENABLE_MONITORING=true
MONITORING_PORT=8081
LOG_LEVEL=INFO

# 风险控制
MAX_DRAWDOWN=0.15
MAX_DAILY_LOSS=0.08
EMERGENCY_SELL_ENABLED=true

# 通知配置(可选)
TELEGRAM_ENABLED=false
TELEGRAM_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_chat_id

DISCORD_ENABLED=false
DISCORD_WEBHOOK_URL=your_discord_webhook_url

# 时区设置
TZ=Asia/Shanghai

# 备份配置
BACKUP_ENABLED=true
BACKUP_INTERVAL_HOURS=24
BACKUP_RETENTION_DAYS=30

# 性能配置
MAX_MEMORY_USAGE_GB=4
PROCESS_THROTTLE_SECS=5

自动化部署脚本 (scripts/deploy.sh)

#!/bin/bash

# FreqBot Strategy21 自动部署脚本
# 使用方法: ./scripts/deploy.sh [environment]
# 环境选项: development, staging, production

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查依赖
check_dependencies() {
    log_info "检查部署依赖..."
    
    # 检查Docker
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安装,请先安装 Docker"
        exit 1
    fi
    
    # 检查Docker Compose
    if ! command -v docker-compose &> /dev/null; then
        log_error "Docker Compose 未安装,请先安装 Docker Compose"
        exit 1
    fi
    
    # 检查Git
    if ! command -v git &> /dev/null; then
        log_error "Git 未安装,请先安装 Git"
        exit 1
    fi
    
    log_success "依赖检查通过"
}

# 环境检查
check_environment() {
    local env=${1:-development}
    log_info "检查部署环境: $env"
    
    if [ ! -f ".env" ]; then
        if [ -f ".env.example" ]; then
            log_warning ".env 文件不存在,正在从示例文件创建..."
            cp .env.example .env
            log_warning "请编辑 .env 文件并设置正确的配置值"
            read -p "是否现在编辑 .env 文件? (y/n): " -n 1 -r
            echo
            if [[ $REPLY =~ ^[Yy]$ ]]; then
                ${EDITOR:-nano} .env
            fi
        else
            log_error ".env.example 文件不存在,无法创建配置"
            exit 1
        fi
    fi
    
    # 检查关键配置
    if grep -q "your_api_key_here" .env; then
        log_error "请在 .env 文件中设置正确的 API 密钥"
        exit 1
    fi
    
    log_success "环境检查通过"
}

# 构建镜像
build_images() {
    log_info "构建 Docker 镜像..."
    
    # 构建主应用镜像
    docker-compose build freqbot
    
    # 构建监控镜像(如果存在)
    if [ -f "monitoring/Dockerfile" ]; then
        docker-compose build monitoring
    fi
    
    log_success "镜像构建完成"
}

# 数据库初始化
init_database() {
    log_info "初始化数据库..."
    
    # 创建数据目录
    mkdir -p user_data/{data,logs,backtest_results}
    
    # 如果使用PostgreSQL,等待数据库启动
    if grep -q "postgresql://" .env 2>/dev/null; then
        log_info "等待 PostgreSQL 数据库启动..."
        docker-compose up -d postgres
        sleep 10
        
        # 检查数据库连接
        docker-compose exec -T postgres pg_isready -U freqbot
    fi
    
    log_success "数据库初始化完成"
}

# 运行测试
run_tests() {
    log_info "运行集成测试..."
    
    # 在临时容器中运行测试
    docker-compose run --rm freqbot python -m pytest tests/ -v --tb=short
    
    if [ $? -eq 0 ]; then
        log_success "所有测试通过"
    else
        log_error "测试失败,部署中止"
        exit 1
    fi
}

# 启动服务
start_services() {
    log_info "启动服务..."
    
    # 启动所有服务
    docker-compose up -d
    
    # 等待服务启动
    log_info "等待服务启动..."
    sleep 30
    
    # 检查服务状态
    if docker-compose ps | grep -q "Exit"; then
        log_error "部分服务启动失败"
        docker-compose logs
        exit 1
    fi
    
    log_success "所有服务启动成功"
}

# 健康检查
health_check() {
    log_info "执行健康检查..."
    
    local max_attempts=30
    local attempt=1
    
    while [ $attempt -le $max_attempts ]; do
        if curl -s -f http://localhost:8080/api/v1/ping > /dev/null; then
            log_success "FreqBot API 健康检查通过"
            break
        fi
        
        log_info "等待服务启动... ($attempt/$max_attempts)"
        sleep 10
        ((attempt++))
    done
    
    if [ $attempt -gt $max_attempts ]; then
        log_error "健康检查失败,服务可能未正常启动"
        docker-compose logs freqbot
        exit 1
    fi
}

# 部署后配置
post_deploy_config() {
    log_info "执行部署后配置..."
    
    # 设置定时任务(备份、日志轮转等)
    if [ "$ENVIRONMENT" = "production" ]; then
        # 添加crontab任务
        (crontab -l 2>/dev/null; echo "0 2 * * * /app/scripts/backup.sh") | crontab -
        (crontab -l 2>/dev/null; echo "0 4 * * 0 /app/scripts/cleanup_logs.sh") | crontab -
    fi
    
    # 创建监控告警(如果启用)
    if grep -q "ENABLE_MONITORING=true" .env; then
        log_info "设置监控告警..."
        # 这里可以添加监控告警的配置逻辑
    fi
    
    log_success "部署后配置完成"
}

# 显示部署信息
show_deploy_info() {
    log_success "=== 部署完成 ==="
    echo
    echo "访问地址:"
    echo "  FreqBot API: http://localhost:8080"
    echo "  监控面板:   http://localhost:3000"
    echo
    echo "常用命令:"
    echo "  查看服务状态: docker-compose ps"
    echo "  查看日志:     docker-compose logs -f freqbot"
    echo "  停止服务:     docker-compose down"
    echo "  重启服务:     docker-compose restart"
    echo
    echo "配置文件:"
    echo "  主配置:       user_data/config_strategy21.json"
    echo "  策略参数:     user_data/strategy21_params.json"
    echo "  环境变量:     .env"
    echo
    log_warning "重要提示:"
    echo "  1. 首次运行建议先启用 dry_run 模式测试"
    echo "  2. 定期备份配置和交易数据"
    echo "  3. 监控系统运行状态和性能指标"
    echo "  4. 实盘交易前请充分测试"
}

# 回滚函数
rollback() {
    log_warning "开始回滚部署..."
    
    # 停止当前服务
    docker-compose down
    
    # 如果有备份,恢复配置
    if [ -f "user_data/config_strategy21.json.backup" ]; then
        mv user_data/config_strategy21.json.backup user_data/config_strategy21.json
        log_info "配置文件已回滚"
    fi
    
    # 恢复到上一个版本的镜像
    if [ ! -z "$PREVIOUS_IMAGE_TAG" ]; then
        docker tag freqbot-strategy21:$PREVIOUS_IMAGE_TAG freqbot-strategy21:latest
        log_info "Docker镜像已回滚"
    fi
    
    log_success "回滚完成"
}

# 主函数
main() {
    local environment=${1:-development}
    export ENVIRONMENT=$environment
    
    echo "=================================================="
    echo "    FreqBot Strategy21 自动部署脚本"
    echo "    环境: $environment"
    echo "    时间: $(date)"
    echo "=================================================="
    
    # 设置错误处理
    trap 'log_error "部署过程中发生错误,执行回滚..."; rollback; exit 1' ERR
    
    # 执行部署步骤
    check_dependencies
    check_environment $environment
    
    # 备份当前配置(如果存在)
    if [ -f "user_data/config_strategy21.json" ]; then
        cp user_data/config_strategy21.json user_data/config_strategy21.json.backup
        log_info "配置文件已备份"
    fi
    
    build_images
    init_database
    
    # 生产环境需要运行测试
    if [ "$environment" = "production" ]; then
        run_tests
    fi
    
    start_services
    health_check
    post_deploy_config
    show_deploy_info
    
    log_success "部署成功完成!"
}

# 帮助信息
show_help() {
    echo "FreqBot Strategy21 部署脚本"
    echo
    echo "用法: $0 [OPTIONS] [ENVIRONMENT]"
    echo
    echo "环境选项:"
    echo "  development  开发环境(默认)"
    echo "  staging      测试环境"
    echo "  production   生产环境"
    echo
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  --rollback     执行回滚操作"
    echo "  --health-check 仅执行健康检查"
    echo
    echo "示例:"
    echo "  $0                    # 部署到开发环境"
    echo "  $0 production         # 部署到生产环境"
    echo "  $0 --rollback         # 执行回滚"
    echo "  $0 --health-check     # 健康检查"
}

# 解析命令行参数
case "${1:-}" in
    -h|--help)
        show_help
        exit 0
        ;;
    --rollback)
        rollback
        exit 0
        ;;
    --health-check)
        health_check
        exit 0
        ;;
    *)
        main "$@"
        ;;
esac

验收标准

功能测试

  1. 文档完整性

    • 用户指南覆盖所有使用场景
    • 技术文档描述清晰准确
    • API文档与实际接口一致
    • 故障排除指南实用有效
  2. 部署方案

    • Docker容器正常构建和运行
    • 自动化部署脚本执行成功
    • 环境配置管理完善
    • 版本发布流程顺畅
  3. 运维支持

    • 监控指标文档准确
    • 告警处理流程清晰
    • 备份恢复方案可行
    • 性能调优指南有效

用户体验测试

  1. 易用性测试
    • 新用户可按文档快速上手
    • 配置过程简单明了
    • 错误信息提示清楚
    • 常见问题有解决方案

实现计划

阶段1:文档编写 (2小时)

  • 创建用户指南和技术文档
  • 编写API接口文档
  • 完善配置说明文档
  • 添加故障排除指南

阶段2:Docker部署配置 (1.5小时)

  • 创建Dockerfile和docker-compose配置
  • 编写自动化部署脚本
  • 配置环境变量管理
  • 设置健康检查机制

阶段3:运维文档 (0.5小时)

  • 编写监控运维文档
  • 创建备份恢复方案
  • 添加性能调优指南
  • 完善告警处理流程

依赖关系

  • 前置依赖: 009 (集成测试套件) - 需要完整的测试验证
  • 并行执行: 不可与其他任务并行执行
  • 后续集成: 项目最终交付

风险与缓解

技术风险

  1. Docker兼容性问题

    • 风险:不同环境Docker配置差异
    • 缓解:提供多平台Docker配置,详细环境要求
  2. 部署脚本复杂性

    • 风险:自动化脚本在不同环境失败
    • 缓解:充分测试,提供手动部署备选方案

业务风险

  1. 文档维护成本
    • 风险:代码更新后文档不同步
    • 缓解:建立文档更新检查流程

成功指标

  1. 文档完整度 - 覆盖所有使用场景和功能
  2. 部署成功率 - 自动化部署成功率 > 95%
  3. 用户上手时间 - 新用户30分钟内完成部署
  4. 故障处理效率 - 常见问题5分钟内找到解决方案
  5. 运维便利性 - 运维操作标准化和自动化

交付物

  1. 用户文档

    • README.md (项目介绍)
    • docs/user-guide/ (用户指南)
    • docs/configuration/ (配置文档)
    • docs/faq.md (常见问题)
  2. 技术文档

    • docs/development/ (开发者指南)
    • docs/api/ (API接口文档)
    • docs/architecture/ (架构设计文档)
  3. 部署配置

    • Dockerfile (容器配置)
    • docker-compose.yml (服务编排)
    • scripts/deploy.sh (部署脚本)
    • .env.example (环境配置模板)
  4. 运维文档

    • docs/deployment/ (部署指南)
    • docs/monitoring/ (监控运维)
    • docs/troubleshooting/ (故障排除)
    • scripts/backup.sh (备份脚本)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions