version: '3.8' # Sanguo VeighNa Docker 编排配置 # 用于 NAS 部署和开发环境 # 支持环境变量配置和绑定挂载 # 加载环境变量 # 使用前请复制 .env.example 为 .env 并修改配置 services: # ============================================ # VeighNa 核心服务 # ============================================ vnpy: build: context: .. dockerfile: docker/Dockerfile container_name: sanguo-vnpy restart: unless-stopped init: true # tini 作 PID1, 防 docker exec nohup 后台进程被清(见 docs/three-env-code-promote.md §9) # 容器名称 hostname: vnpy-server # 环境变量 environment: # Python 配置 - PYTHONUNBUFFERED=1 - PYTHONDONTWRITEBYTECODE=1 - TZ=${TZ:-Asia/Shanghai} # VeighNa 配置 - VNPY_LOG_LEVEL=${VNPY_LOG_LEVEL:-INFO} - VNPY_LOG_FILE=${VNPY_LOG_FILE:-/app/logs/vnpy.log} # 数据库配置 - DB_TYPE=${DB_TYPE:-sqlite} - DB_PATH=${DB_PATH:-/app/data/vnpy.db} # Web 服务配置 - WEB_HOST=${WEB_HOST:-0.0.0.0} - WEB_PORT=${WEB_PORT:-8000} - WEB_WORKERS=${WEB_WORKERS:-2} # 安全配置 - JWT_SECRET_KEY=${JWT_SECRET_KEY:-change-this-to-a-random-secret-key} - SESSION_TIMEOUT=${SESSION_TIMEOUT:-3600} # Redis 配置 - REDIS_HOST=${REDIS_HOST:-redis} - REDIS_PORT=${REDIS_PORT:-6379} - REDIS_PASSWORD=${REDIS_PASSWORD:-} # PostgreSQL 配置 - POSTGRES_DB=${POSTGRES_DB:-vnpy} - POSTGRES_USER=${POSTGRES_USER:-vnpy} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-vnpy_password_change_me} - POSTGRES_HOST=${POSTGRES_HOST:-postgres} - POSTGRES_PORT=${POSTGRES_PORT:-5432} # 开发选项 - SKIP_REDIS_CHECK=${SKIP_REDIS_CHECK:-0} - USE_POSTGRES=${USE_POSTGRES:-0} - DEBUG=${DEBUG:-0} # 端口映射 ports: - "${HTTP_PORT:-8000}:8000" # HTTP API - "${WS_PORT:-8080}:8080" # WebSocket # 数据卷 - 使用绑定挂载到 NAS stock 目录 volumes: # 数据持久化目录 - 挂载到 NAS stock 目录 - ${DATA_DIR}/data:/app/data - ${DATA_DIR}/logs:/app/logs - ${DATA_DIR}/config:/app/config - ${DATA_DIR}/temp:/app/temp # 配置文件(只读)- 如果有外部配置 - ../config:/app/config:ro # 网络 networks: - vnpy-network # 依赖项 depends_on: - redis # 资源限制 deploy: resources: limits: cpus: '${VNPY_CPU_LIMIT:-2.0}' memory: ${VNPY_MEMORY_LIMIT:-2G} reservations: cpus: '${VNPY_CPU_RESERVATION:-0.5}' memory: ${VNPY_MEMORY_RESERVATION:-512M} # ============================================ # Redis 服务(缓存和消息队列) # ============================================ redis: image: redis:7-alpine container_name: sanguo-redis restart: unless-stopped # 命令参数 command: > sh -c ' if [ -n "${REDIS_PASSWORD}" ]; then redis-server --appendonly yes --requirepass ${REDIS_PASSWORD} else redis-server --appendonly yes fi ' # 环境变量 environment: - TZ=${TZ:-Asia/Shanghai} # 数据卷 - 挂载到 NAS stock 目录 volumes: - ${DATA_DIR}/redis:/data # 网络 networks: - vnpy-network # 资源限制 deploy: resources: limits: cpus: '${REDIS_CPU_LIMIT:-0.5}' memory: ${REDIS_MEMORY_LIMIT:-256M} # ============================================ # Nginx 反向代理(可选) # ============================================ nginx: image: nginx:alpine container_name: sanguo-nginx restart: unless-stopped profiles: - nginx - ${ENABLE_NGINX:+nginx} # 环境变量 environment: - TZ=${TZ:-Asia/Shanghai} # 端口映射 ports: - "${NGINX_HTTP_PORT:-80}:80" - "${NGINX_HTTPS_PORT:-443}:443" # 配置文件 volumes: - ../docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ${DATA_DIR}/nginx/ssl:/etc/nginx/ssl:ro - ${DATA_DIR}/nginx/cache:/var/cache/nginx - ${DATA_DIR}/logs/nginx:/var/log/nginx # 依赖项 depends_on: - vnpy # 网络 networks: - vnpy-network # 资源限制 deploy: resources: limits: cpus: '${NGINX_CPU_LIMIT:-0.5}' memory: ${NGINX_MEMORY_LIMIT:-256M} # ============================================ # PostgreSQL 数据库(可选,升级用) # ============================================ postgres: image: postgres:15-alpine container_name: sanguo-postgres restart: unless-stopped profiles: - postgres - ${USE_POSTGRES:+postgres} # 环境变量 environment: - POSTGRES_DB=${POSTGRES_DB:-vnpy} - POSTGRES_USER=${POSTGRES_USER:-vnpy} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-vnpy_password_change_me} - TZ=${TZ:-Asia/Shanghai} - PGDATA=/var/lib/postgresql/data/pgdata # 数据卷 - 挂载到 NAS stock 目录 volumes: - ${DATA_DIR}/postgres:/var/lib/postgresql/data # 网络 networks: - vnpy-network # 资源限制 deploy: resources: limits: cpus: '1.0' memory: 512M # ============================================ # 网络定义 # ============================================ networks: vnpy-network: name: sanguo_vnpy_network driver: bridge # ============================================ # 使用说明 # ============================================ # # 基本使用: # # 1. 首次使用前,配置环境变量: # cp .env.example .env # vi .env # 修改 DATA_DIR 等配置 # # 2. 创建数据目录: # mkdir -p ${DATA_DIR}/{data,logs,config,temp,redis,nginx} # # 3. 启动核心服务: # docker-compose up -d # # 4. 启动所有服务(含 Nginx): # docker-compose --profile nginx up -d # # 5. 启动所有服务(含 PostgreSQL): # docker-compose --profile postgres up -d # # 管理命令: # # 查看日志: # docker-compose logs -f vnpy # # 停止服务: # docker-compose down # # 重启服务: # docker-compose restart vnpy # # 进入容器: # docker-compose exec vnpy bash # # 更新并重启: # docker-compose up -d --build # # 数据备份: # tar czf vnpy_backup_$(date +%Y%m%d).tar.gz ${DATA_DIR} # # ============================================