version: '3.8' services: knowledge-automation: build: . container_name: knowledge-automation-multiuser ports: - "51232:51233" volumes: - ./data:/app/data # 数据库持久化 - ./logs:/app/logs # 日志持久化 - ./截图:/app/截图 # 截图持久化 - ./playwright:/ms-playwright # Playwright浏览器持久化(避免重复下载) - /etc/localtime:/etc/localtime:ro # 时区同步 - ./static:/app/static # 静态文件(实时更新) - ./templates:/app/templates # 模板文件(实时更新) - ./app.py:/app/app.py # 主程序(实时更新) dns: - 8.8.8.8 - 114.114.114.114 environment: - TZ=Asia/Shanghai - PYTHONUNBUFFERED=1 - PLAYWRIGHT_BROWSERS_PATH=/ms-playwright - PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright # Flask 配置 - FLASK_ENV=production - FLASK_DEBUG=false # 服务器配置 - SERVER_HOST=0.0.0.0 - SERVER_PORT=51233 # 数据库配置 - DB_FILE=data/app_data.db - DB_POOL_SIZE=5 # 并发控制配置 - MAX_CONCURRENT_GLOBAL=2 - MAX_CONCURRENT_PER_ACCOUNT=1 - MAX_CONCURRENT_CONTEXTS=100 # 安全配置 - SESSION_LIFETIME_HOURS=24 - SESSION_COOKIE_SECURE=false - MAX_CAPTCHA_ATTEMPTS=5 - MAX_IP_ATTEMPTS_PER_HOUR=10 # 日志配置 - LOG_LEVEL=INFO - LOG_FILE=logs/app.log # 知识管理平台配置 - 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: 5m timeout: 10s retries: 3 start_period: 40s