version: '3.8'

services:
  knowledge-automation:
    build: .
    container_name: knowledge-automation-multiuser
    ports:
      - "51232:51233"
    volumes:
      - ./data:/app/data          # 数据库持久化
      - ./logs:/app/logs          # 日志持久化
      - ./截图:/app/截图          # 截图持久化
      - /etc/localtime:/etc/localtime:ro  # 时区同步
      - ./static:/app/static      # 静态文件（实时更新）
      - ./templates:/app/templates  # 模板文件（实时更新）
      - ./app.py:/app/app.py      # 主程序（实时更新）
      - ./database.py:/app/database.py  # 数据库模块（实时更新）
      - ./crypto_utils.py:/app/crypto_utils.py  # 加密工具（实时更新）
    dns:
      - 223.5.5.5
      - 114.114.114.114
      - 119.29.29.29
    environment:
      - TZ=Asia/Shanghai
      - PYTHONUNBUFFERED=1
      # Flask 配置
      - FLASK_ENV=production
      - FLASK_DEBUG=false
      - SOCKETIO_ASYNC_MODE=eventlet
      # 服务器配置
      - SERVER_HOST=0.0.0.0
      - SERVER_PORT=51233
      # 数据库配置
      - DB_FILE=data/app_data.db
      - DB_POOL_SIZE=5
      - SYSTEM_CONFIG_CACHE_TTL_SECONDS=30
      - DB_SLOW_QUERY_MS=120
      - DB_SLOW_SQL_WINDOW_SECONDS=86400
      - DB_SLOW_SQL_TOP_LIMIT=12
      - DB_SLOW_SQL_RECENT_LIMIT=50
      - DB_SLOW_SQL_MAX_EVENTS=20000
      - ADMIN_SLOW_SQL_METRICS_CACHE_TTL_SECONDS=3
      # 并发控制配置
      - MAX_CONCURRENT_GLOBAL=2
      - MAX_CONCURRENT_PER_ACCOUNT=1
      - MAX_CONCURRENT_CONTEXTS=100
      # 安全配置
      # 加密密钥配置（重要！防止容器重建时丢失密钥）
      - ENCRYPTION_KEY_RAW=${ENCRYPTION_KEY_RAW}
      - SESSION_LIFETIME_HOURS=24
      - SESSION_COOKIE_SECURE=true
      - HTTPS_ENABLED=true
      - MAX_CAPTCHA_ATTEMPTS=5
      - MAX_IP_ATTEMPTS_PER_HOUR=10
      # 日志配置
      - LOG_LEVEL=INFO
      - SECURITY_LOG_ALLOW_STRATEGY=0
      - LOG_FILE=logs/app.log
      - API_DIAGNOSTIC_LOG=0
      - API_DIAGNOSTIC_SLOW_MS=0
      # 状态推送节流（秒）
      - STATUS_PUSH_INTERVAL_SECONDS=2
      # wkhtmltoimage 截图配置
      - WKHTMLTOIMAGE_FULL_PAGE=0
      # 知识管理平台配置
      - ZSGL_LOGIN_URL=https://postoa.aidunsoft.com/admin/login.aspx
      - ZSGL_INDEX_URL_PATTERN=index.aspx
      - PAGE_LOAD_TIMEOUT=60000
    restart: unless-stopped
    shm_size: 2gb               # 为Chromium分配共享内存
    
    # 内存和CPU资源限制
    mem_limit: 4g               # 硬限制:最大4GB内存
    mem_reservation: 2g         # 软限制:预留2GB
    cpus: '2.0'                 # 限制使用2个CPU核心
    
    # 健康检查(可选)
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:51233 || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
