{"repo": "10000ge10000/epic-kiosk", "files": {"docker-compose.yml": {"6b57553a3ce77b6904d01bb0305ea6bfa9facb04": {"t": 1785747420.7782805, "n": 9689, "h": "5bc86d688d1e6871", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n\n # 容器 mem_limit 是 256m,但 redis 自己原本 maxmemory=0(无上限),\n # 到限时会被内核 OOM Kill 而不是按策略拒写。noeviction 保证队列不被淘汰。\n command: [\"redis-server\", \"--maxmemory\", \"200mb\", \"--maxmemory-policy\", \"noeviction\", \"--save\", \"300\", \"10\"]\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=9000\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n init: true\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=${API_KEY_FILE:-/run/secrets/captcha_siliconflow_api_key}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=9000\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-zai-org/GLM-4.5V}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-moonshotai/Kimi-K2.7-Code}\n - CAPTCHA_TERTIARY_BASE_URL=${CAPTCHA_TERTIARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_TERTIARY_MODEL=${CAPTCHA_TERTIARY_MODEL:-Pro/moonshotai/Kimi-K2.6}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=150\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n # 让浏览器指纹按 WARP 出口 IP 对齐时区/语言/经纬度。改的是指纹,\n # 而账号用的是带既有登录态的持久化 profile,建议在一轮周免跑完\n # 确认基线之后再置为 1;出问题改回 0 重启即可,无需重建镜像。\n - EPIC_ENABLE_GEOIP=${EPIC_ENABLE_GEOIP:-0}\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "efd3404144335c4c6585241b4870e0024a88a633": {"t": 1785773179.121506, "n": 9509, "h": "6b549f831e173bb2", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n\n # 容器 mem_limit 是 256m,但 redis 自己原本 maxmemory=0(无上限),\n # 到限时会被内核 OOM Kill 而不是按策略拒写。noeviction 保证队列不被淘汰。\n command: [\"redis-server\", \"--maxmemory\", \"200mb\", \"--maxmemory-policy\", \"noeviction\", \"--save\", \"300\", \"10\"]\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=9000\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n init: true\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=${API_KEY_FILE:-/run/secrets/captcha_siliconflow_api_key}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=9000\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-zai-org/GLM-4.5V}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-moonshotai/Kimi-K2.7-Code}\n - CAPTCHA_TERTIARY_BASE_URL=${CAPTCHA_TERTIARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_TERTIARY_MODEL=${CAPTCHA_TERTIARY_MODEL:-Pro/moonshotai/Kimi-K2.6}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=150\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "5622900acde9c0f7760898f958917ad6a2580ceb": {"t": 1785773180.3271124, "n": 9759, "h": "55c5e9cfc0f74dc1", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n\n # 容器 mem_limit 是 256m,但 redis 自己原本 maxmemory=0(无上限),\n # 到限时会被内核 OOM Kill 而不是按策略拒写。noeviction 保证队列不被淘汰。\n command: [\"redis-server\", \"--maxmemory\", \"200mb\", \"--maxmemory-policy\", \"noeviction\", \"--save\", \"300\", \"10\"]\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=9000\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n init: true\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=${API_KEY_FILE:-/run/secrets/captcha_siliconflow_api_key}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=9000\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-zai-org/GLM-4.5V}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-moonshotai/Kimi-K2.7-Code}\n - CAPTCHA_TERTIARY_BASE_URL=${CAPTCHA_TERTIARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_TERTIARY_MODEL=${CAPTCHA_TERTIARY_MODEL:-Pro/moonshotai/Kimi-K2.6}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=150\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "798447e35e5190a6b5840af69ff0c7c6f247c6f7": {"t": 1785773182.3398533, "n": 9761, "h": "b94c1bf2ad403bb6", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n\n # 容器 mem_limit 是 256m,但 redis 自己原本 maxmemory=0(无上限),\n # 到限时会被内核 OOM Kill 而不是按策略拒写。noeviction 保证队列不被淘汰。\n command: [\"redis-server\", \"--maxmemory\", \"200mb\", \"--maxmemory-policy\", \"noeviction\", \"--save\", \"300\", \"10\"]\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n init: true\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=${API_KEY_FILE:-/run/secrets/captcha_siliconflow_api_key}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-zai-org/GLM-4.5V}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-moonshotai/Kimi-K2.7-Code}\n - CAPTCHA_TERTIARY_BASE_URL=${CAPTCHA_TERTIARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_TERTIARY_MODEL=${CAPTCHA_TERTIARY_MODEL:-Pro/moonshotai/Kimi-K2.6}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=150\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "b623e450fe36c0d5b9a9b9c85c32c14e540b052e": {"t": 1785773184.6342223, "n": 9522, "h": "a9b8d70760d30e3e", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=${API_KEY_FILE:-/run/secrets/captcha_siliconflow_api_key}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-zai-org/GLM-4.5V}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-moonshotai/Kimi-K2.7-Code}\n - CAPTCHA_TERTIARY_BASE_URL=${CAPTCHA_TERTIARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_TERTIARY_MODEL=${CAPTCHA_TERTIARY_MODEL:-Pro/moonshotai/Kimi-K2.6}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=150\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "88e215e8fdb97fbc9554dcff6cf410c2d6008110": {"t": 1785773185.7776484, "n": 9353, "h": "bb89dee478f3e4c3", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis@sha256:c5e375abb885e6b2021c0377879e4890bf76f9065b8922ffc113f2b226b9fc17\n container_name: epic-redis\n restart: always\n volumes:\n - ./data/redis:/data\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 256m\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"127.0.0.1:18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS:-172.22.0.1}\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n - CLAIM_BATCH_SIZE=${CLAIM_BATCH_SIZE:-5}\n - CLAIM_BATCH_INTERVAL_SECONDS=${CLAIM_BATCH_INTERVAL_SECONDS:-600}\n - PROMOTION_REFRESH_INTERVAL_SECONDS=${PROMOTION_REFRESH_INTERVAL_SECONDS:-3600}\n # 可选历史数据偏移量,默认不补偿。\n - CLAIM_HISTORY_OFFSET=${CLAIM_HISTORY_OFFSET:-0}\n - ACCOUNT_VERIFIED_OFFSET=${ACCOUNT_VERIFIED_OFFSET:-0}\n - ACCOUNT_TOTAL_OFFSET=${ACCOUNT_TOTAL_OFFSET:-0}\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health/ready', timeout=5)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 512m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n mem_limit: 5g\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: \"1002:1002\"\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN_FILE=/run/secrets/internal_api_token\n - EPIC_CREDENTIAL_KEYS_FILE=/run/secrets/epic_credential_keys\n - CAPTCHA_NVIDIA_API_KEY_FILE=/run/secrets/captcha_nvidia_api_key\n - CAPTCHA_SILICONFLOW_API_KEY_FILE=/run/secrets/captcha_siliconflow_api_key\n - TASK_TIMEOUT_SECONDS=600\n - TASK_SOFT_TIMEOUT_SECONDS=480\n - TASK_MIN_GAME_BUDGET_SECONDS=180\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-180}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-90}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n - HCAPTCHA_LOG_DIR=/app/data/logs/hcaptcha\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_PRIMARY_BASE_URL=${CAPTCHA_PRIMARY_BASE_URL:-https://integrate.api.nvidia.com/v1}\n - CAPTCHA_PRIMARY_MODEL=${CAPTCHA_PRIMARY_MODEL:-meta/llama-4-maverick-17b-128e-instruct}\n - CAPTCHA_SECONDARY_BASE_URL=${CAPTCHA_SECONDARY_BASE_URL:-https://api.siliconflow.cn/v1}\n - CAPTCHA_SECONDARY_MODEL=${CAPTCHA_SECONDARY_MODEL:-Qwen/Qwen3-VL-32B-Instruct}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_TOTAL_API_BUDGET=110\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=0\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n secrets:\n - internal_api_token\n - epic_credential_keys\n - captcha_nvidia_api_key\n - captcha_siliconflow_api_key\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import os,time,redis; r=redis.Redis(host=os.getenv('REDIS_HOST','redis')); v=r.get('worker:heartbeat'); raise SystemExit(0 if v and time.time()-float(v)<90 else 1)\"]\n interval: 30s\n timeout: 10s\n retries: 3\n mem_limit: 4g\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n test:\n profiles: [\"test\"]\n init: true\n build:\n context: .\n dockerfile: Dockerfile.test\n network_mode: none\n read_only: true\n tmpfs:\n - /tmp:size=512m\n - /usr/local/lib/python3.12/site-packages/hcaptcha_challenger/logs:size=64m\n environment:\n - DATA_DIR=/tmp/epic-kiosk-test\n - ENABLE_APSCHEDULER=false\n - INTERNAL_API_TOKEN=test-internal-token\n - EPIC_CREDENTIAL_KEYS=9QKUvZF-uPSzD4suKpprhwUTUyoj5nrR9BgeJeAs5mM=\n\nsecrets:\n internal_api_token:\n file: ${INTERNAL_API_TOKEN_PATH:?set INTERNAL_API_TOKEN_PATH}\n epic_credential_keys:\n file: ${EPIC_CREDENTIAL_KEYS_PATH:?set EPIC_CREDENTIAL_KEYS_PATH}\n captcha_nvidia_api_key:\n file: ${CAPTCHA_NVIDIA_API_KEY_PATH:?set CAPTCHA_NVIDIA_API_KEY_PATH}\n captcha_siliconflow_api_key:\n file: ${CAPTCHA_SILICONFLOW_API_KEY_PATH:?set CAPTCHA_SILICONFLOW_API_KEY_PATH}\n"}, "9007d9b31aba8d5e080dc2ad15f5bb166c61709e": {"t": 1785773188.15115, "n": 6896, "h": "9bd56d3fcb2c7b5c", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=600\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-240}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-120}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=4\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n - API_KEY=${API_KEY:?set API_KEY in .env}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=${CAPTCHA_MODEL:-Qwen/Qwen3-VL-32B-Instruct}\n - CAPTCHA_MODEL_FALLBACK=${CAPTCHA_MODEL_FALLBACK:-Qwen/Qwen3-VL-30B-A3B-Instruct}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_API_TIMEOUT=${CAPTCHA_API_TIMEOUT:-60}\n - CAPTCHA_API_RETRIES=1\n - CAPTCHA_FALLBACK_AFTER_CALLS=0\n - CAPTCHA_FALLBACK_TIME_WINDOW=300\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - WARP_CONTROL_RESTART_RETRIES=${WARP_CONTROL_RESTART_RETRIES:-3}\n - WARP_CONTROL_RESTART_BACKOFF_SECONDS=${WARP_CONTROL_RESTART_BACKOFF_SECONDS:-5}\n - WARP_CONTAINER_FALLBACK_RESTARTS=${WARP_CONTAINER_FALLBACK_RESTARTS:-1}\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "9b9b61b84c91d8bd0af57516093a78f517a9f19d": {"t": 1785773189.577444, "n": 6656, "h": "3400344aa4446a46", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# Configure it in .env; NVIDIA, SiliconFlow, and custom OpenAI-compatible providers are supported.\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=600\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-240}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-120}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=4\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # API Key must be configured in .env.\n # Supports NVIDIA, SiliconFlow, or custom OpenAI-compatible providers.\n # Do not commit real keys in docker-compose.yml.\n # ============================================================\n - API_KEY=${API_KEY:?set API_KEY in .env}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=${CAPTCHA_MODEL:-Qwen/Qwen3-VL-32B-Instruct}\n - CAPTCHA_MODEL_FALLBACK=${CAPTCHA_MODEL_FALLBACK:-Qwen/Qwen3-VL-30B-A3B-Instruct}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_API_TIMEOUT=${CAPTCHA_API_TIMEOUT:-60}\n - CAPTCHA_API_RETRIES=1\n - CAPTCHA_FALLBACK_AFTER_CALLS=0\n - CAPTCHA_FALLBACK_TIME_WINDOW=300\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "7c6ee9958059596599b92a14d6a7f8e39b9cc0d9": {"t": 1785773191.9647973, "n": 6889, "h": "665b4db5e0e6ad7d", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:单容器多出口(10 个独立 WARP 实例)\n # 端口: epic-warp:19000-19009\n # 控制接口: http://epic-warp:18080/restart/{idx}\n # ============================================================\n warp:\n image: zen-warp-multi:local\n container_name: epic-warp\n restart: always\n privileged: true\n environment:\n - WARP_INSTANCE_COUNT=10\n - WARP_START_PORT=19000\n - WARP_CONTROL_PORT=18080\n volumes:\n - ./data/warp:/warp-data\n healthcheck:\n test: [\"CMD\", \"curl\", \"-fsS\", \"http://127.0.0.1:18080/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 8m\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=${API_PROVIDER:-siliconflow}\n - API_BASE_URL=${API_BASE_URL:-https://api.siliconflow.cn/v1}\n - OPENCODE_BASE_URL=https://opencode.ai/zen\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=600\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=${HCAPTCHA_EXECUTION_TIMEOUT:-240}\n - HCAPTCHA_RESPONSE_TIMEOUT=${HCAPTCHA_RESPONSE_TIMEOUT:-120}\n - HCAPTCHA_PAYLOAD_TIMEOUT=${HCAPTCHA_PAYLOAD_TIMEOUT:-90}\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=4\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测、选择端口和重启单个出口)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_START_PORT=19000\n - WARP_PROXY_COUNT=10\n - WARP_CONTROL_URL_TEMPLATE=http://epic-warp:18080/restart/{idx}\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=${CAPTCHA_MODEL:-Qwen/Qwen3-VL-32B-Instruct}\n - CAPTCHA_MODEL_FALLBACK=${CAPTCHA_MODEL_FALLBACK:-Qwen/Qwen3-VL-30B-A3B-Instruct}\n - CAPTCHA_RESPONSE_MAX_TOKENS=1200\n - CAPTCHA_API_TIMEOUT=${CAPTCHA_API_TIMEOUT:-60}\n - CAPTCHA_API_RETRIES=1\n - CAPTCHA_FALLBACK_AFTER_CALLS=0\n - CAPTCHA_FALLBACK_TIME_WINDOW=300\n # 可选:外部验证码服务商 fallback(默认关闭;Key 只放 .env)\n - CAPTCHA_PROVIDER=${CAPTCHA_PROVIDER:-none}\n - CAPTCHA_PROVIDER_API_KEY=${CAPTCHA_PROVIDER_API_KEY:-}\n - CAPTCHA_PROVIDER_SITE_KEY=${CAPTCHA_PROVIDER_SITE_KEY:-91e4137f-95af-4bc9-97af-cdcedce21c8c}\n - CAPTCHA_PROVIDER_TIMEOUT=${CAPTCHA_PROVIDER_TIMEOUT:-180}\n - CAPTCHA_PROVIDER_POLL_INTERVAL=${CAPTCHA_PROVIDER_POLL_INTERVAL:-5}\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n # 验证码失败后的自动恢复策略\n - COOKIE_INVALID_MAX_RETRIES=${COOKIE_INVALID_MAX_RETRIES:-1}\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "ea75a55fdee30ab87681551355c4ee1bdc3997b9": {"t": 1785773193.3022492, "n": 6023, "h": "cd2c50d8702ae6bc", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - ENABLE_APSCHEDULER=true\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n - DAILY_SCHEDULE_LOCK_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n init: true\n cpus: \"2.00\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - API_BASE_URL=https://api.siliconflow.cn/v1\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=600\n - TASK_LOCK_SECONDS=86400\n - HCAPTCHA_EXECUTION_TIMEOUT=180\n - HCAPTCHA_RESPONSE_TIMEOUT=45\n - HCAPTCHA_PAYLOAD_TIMEOUT=45\n - HCAPTCHA_FRAME_TIMEOUT=20\n - HCAPTCHA_SOLVE_MAX_ATTEMPTS=2\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=Qwen/Qwen3-VL-30B-A3B-Thinking\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen3.5-397B-A17B\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n - RESPONSE_TIMEOUT=120\n # 验证码失败后的自动恢复策略\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "bb0508b42d2b1571c16405d0a54b8e03733bdcb9": {"t": 1785773194.7558835, "n": 5769, "h": "08ce7964da79f5fd", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n init: true\n cpus: \"0.50\"\n pids_limit: 300\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - API_BASE_URL=https://api.siliconflow.cn/v1\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=900\n - TASK_LOCK_SECONDS=86400\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=Qwen/Qwen3-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen3-VL-30B-A3B-Instruct\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n - RESPONSE_TIMEOUT=120\n # 验证码失败后的自动恢复策略\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "06acf833273a55c517da4eb1683cd575f6b5f283": {"t": 1785773196.1466277, "n": 5717, "h": "f782a42e98911b69", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_LOCK_SECONDS=86400\n - CONFIRM_TOKEN_SECONDS=86400\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - API_BASE_URL=https://api.siliconflow.cn/v1\n - INTERNAL_API_TOKEN=${INTERNAL_API_TOKEN:?请在 .env 中配置 INTERNAL_API_TOKEN}\n - TASK_TIMEOUT_SECONDS=900\n - TASK_LOCK_SECONDS=86400\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=Qwen/Qwen3-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen3-VL-30B-A3B-Instruct\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n - RESPONSE_TIMEOUT=120\n # 验证码失败后的自动恢复策略\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - NETWORK_FAILURE_MAX_RETRIES=2\n - NETWORK_FAILURE_RETRY_DELAY_SECONDS=600\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "d5ed9d40fe54a11493bc7960a2ebd9e98cd999a6": {"t": 1785773197.386146, "n": 5336, "h": "ff877400af9bd8d4", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - API_BASE_URL=https://api.siliconflow.cn/v1\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=Qwen/Qwen3-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen3-VL-30B-A3B-Instruct\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V4-Flash\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Pro\n - RESPONSE_TIMEOUT=120\n # 验证码失败后的自动恢复策略\n - CAPTCHA_FAILURE_MAX_RETRIES=2\n - CAPTCHA_FAILURE_RETRY_DELAY_SECONDS=900\n - WARP_RESTART_COOLDOWN_SECONDS=300\n - TASK_SPACING_SECONDS=5\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"1m\"\n max-file: \"1\"\n"}, "34f6c93ca6f4478ad3250e0d8fa872433053e630": {"t": 1785773199.6840022, "n": 5156, "h": "5cb9dbf0a36a59ae", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"5m\"\n max-file: \"2\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - API_BASE_URL=https://api.siliconflow.cn/v1\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问分享链接 https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 登录 SiliconFlow 账号\n # 3. 进入 API Key 管理页创建新密钥;通过分享链接注册认证后,双方可获得 16 元代金券\n # 4. 复制 sk- 开头的 API Key\n # ============================================================\n - API_KEY=${API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(SiliconFlow 实测通过)\n - CAPTCHA_MODEL=Qwen/Qwen3-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen3-VL-30B-A3B-Instruct\n - PRIMARY_MODEL=deepseek-ai/DeepSeek-V3.2\n - PRIMARY_MODEL_FALLBACK=deepseek-ai/DeepSeek-V4-Flash\n - RESPONSE_TIMEOUT=120\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "c287bdacfca8314928ecef533eb3154d10d34a87": {"t": 1785773200.8644526, "n": 5237, "h": "b39e63ba3a5e8af5", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n # 历史数据偏移量配置(用于补偿丢失的记录,其他用户无需修改)\n - CLAIM_HISTORY_OFFSET=1132\n - ACCOUNT_VERIFIED_OFFSET=140\n - ACCOUNT_TOTAL_OFFSET=140\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"5m\"\n max-file: \"2\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # 内部服务不走代理(修复入库 API 失败问题)\n - NO_PROXY=web,epic-web,redis,epic-redis,localhost,127.0.0.1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 SILICONFLOW_API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key\n # ============================================================\n - SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化验证码识别能力)\n # 主模型: Qwen2.5-VL-32B-Instruct (性价比高,速度快)\n # 备用模型: Qwen2.5-VL-72B-Instruct (能力更强)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "b7b3f52dfbe425e545349be5241bf276b8052545": {"t": 1785773202.925644, "n": 4997, "h": "6831ca34c1741751", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译(含 WARP 网络代理)\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # WARP 代理:提供 Cloudflare 网络出口\n # 用于访问 Epic Games Store(自动重启换 IP)\n # 镜像: caomingjun/warp(集成 WARP + gost HTTP 代理)\n # ============================================================\n warp:\n image: caomingjun/warp:latest\n container_name: epic-warp\n restart: always\n cap_add:\n - NET_ADMIN\n sysctls:\n net.ipv6.conf.all.disable_ipv6: 0\n environment:\n # gost 监听端口(HTTP 代理)\n - GOST_ARGS=-L http://:19000\n volumes:\n - ./data/warp:/var/lib/cloudflare-warp\n healthcheck:\n # 使用 curl 测试代理连通性\n test: [\"CMD-SHELL\", \"curl -s --connect-timeout 5 -x http://127.0.0.1:19000 https://api.ipify.org || exit 1\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n logging:\n driver: json-file\n options:\n max-size: \"5m\"\n max-file: \"2\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # 通过 WARP 代理访问 Epic Games\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n # Docker socket - 允许 worker 重启 WARP 容器\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # WARP HTTP 代理(容器内部网络)\n - HTTP_PROXY=http://epic-warp:19000\n - HTTPS_PROXY=http://epic-warp:19000\n # WARP 代理配置(用于检测和重启)\n - WARP_PROXY_HOST=epic-warp\n - WARP_PROXY_PORT=19000\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 SILICONFLOW_API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key\n # ============================================================\n - SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化验证码识别能力)\n # 主模型: Qwen2.5-VL-32B-Instruct (性价比高,速度快)\n # 备用模型: Qwen2.5-VL-72B-Instruct (能力更强)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n warp:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "c989b1565936f574e6b972fefa892945413042b0": {"t": 1785773204.1429687, "n": 3717, "h": "c7d853d903c6692d", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须配置 API Key ⚠️⚠️⚠️\n # ============================================================\n # 方式一:直接修改下方环境变量(不推荐,会暴露在配置文件中)\n # 方式二:创建 .env 文件,添加 SILICONFLOW_API_KEY=sk-xxx(推荐)\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key\n # ============================================================\n - SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY:-sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化验证码识别能力)\n # 主模型: Qwen2.5-VL-32B-Instruct (性价比高,速度快)\n # 备用模型: Qwen2.5-VL-72B-Instruct (能力更强)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "7830154bc1b0a6c2cf262173f124a0db3eebe33d": {"t": 1785773206.7006524, "n": 3449, "h": "d071b8163dba3998", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 克隆项目 → 修改 API Key → docker compose up -d --build\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "307ce737f7837aa53f5855bdc8184385b3e63ac9": {"t": 1785773207.9399624, "n": 3503, "h": "0188016ed5cefeb0", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统(本地编译版本)\n# ============================================================\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# 公益站点: https://epic.910501.xyz/\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. Linux 一键部署: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d --build\n# 3. NAS 部署: 复制本项目到 NAS,修改 API Key 后通过 Docker Compose 启动\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - epic-kiosk-web - 本地编译\n# - epic-kiosk-worker - 本地编译\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 本地编译,首次部署约需 2-3 分钟\n # ============================================================\n web:\n build:\n context: .\n image: epic-kiosk-web:local\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 本地编译,首次部署约需 5-10 分钟\n # ============================================================\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n image: epic-kiosk-worker:local\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "6dd5cc8a0aaa24c1cee5c4f6a59aadbb2744fac6": {"t": 1785773209.1581924, "n": 3565, "h": "6a386da0f65384a0", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统\n# ============================================================\n# 公益站点: https://epic.910501.xyz/\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. 一键脚本: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - ghcr.io/...-worker - GitHub Actions 自动构建\n# - ghcr.io/...-web - GitHub Actions 自动构建\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n web:\n image: ghcr.io/10000ge10000/epic-kiosk-web:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n worker:\n image: ghcr.io/10000ge10000/epic-kiosk-worker:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n # dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # 环境变量(绕过父类验证器,无需修改)\n - GEMINI_API_KEY=not_used\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "5b2e6cdf2c2b26c535d04035d3d46bd887e171d4": {"t": 1785773211.8231683, "n": 3506, "h": "872188a3022ef38d", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统\n# ============================================================\n# 公益站点: https://epic.910501.xyz/\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. 一键脚本: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - ghcr.io/...-worker - GitHub Actions 自动构建\n# - ghcr.io/...-web - GitHub Actions 自动构建\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n web:\n image: ghcr.io/10000ge10000/epic-kiosk-web:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n worker:\n image: ghcr.io/10000ge10000/epic-kiosk-worker:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n # dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "963f1ace87bbdd1c63e252b3836c57e6f8ccfb2f": {"t": 1785773213.3391795, "n": 3483, "h": "6bbb6108e280206e", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统\n# ============================================================\n# 公益站点: https://epic.910501.xyz/\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. 一键脚本: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - ghcr.io/...-worker - GitHub Actions 自动构建\n# - ghcr.io/...-web - GitHub Actions 自动构建\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n web:\n build:\n context: .\n # image: ghcr.io/10000ge10000/epic-kiosk-web:latest\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n worker:\n image: ghcr.io/10000ge10000/epic-kiosk-worker:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n # dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "07c4de4145f0bae996a57e7234bbf79866dd4973": {"t": 1785773214.6369245, "n": 3506, "h": "872188a3022ef38d", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统\n# ============================================================\n# 公益站点: https://epic.910501.xyz/\n# GitHub: https://github.com/10000ge10000/epic-kiosk\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. 一键脚本: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-kiosk/main/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - ghcr.io/...-worker - GitHub Actions 自动构建\n# - ghcr.io/...-web - GitHub Actions 自动构建\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n web:\n image: ghcr.io/10000ge10000/epic-kiosk-web:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n worker:\n image: ghcr.io/10000ge10000/epic-kiosk-worker:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n # dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "435b3a3591f9b84965ce7e45f1b97b55de897209": {"t": 1785773215.9458818, "n": 3548, "h": "f769dfc87112cf4b", "c": "# ============================================================\n# Epic Kiosk - 自动驾驶领取系统\n# ============================================================\n# 公益站点: https://epic.910501.xyz/\n# GitHub: https://github.com/10000ge10000/epic-awesome-gamer\n# ============================================================\n#\n# 🚀 部署方式:\n# 1. 一键脚本: curl -fsSL https://raw.githubusercontent.com/10000ge10000/epic-awesome-gamer/Epic-Autopilot/install.sh | bash\n# 2. 手动部署: 修改 API Key 后执行 docker compose up -d\n#\n# ⚠️ 必须修改: SILICONFLOW_API_KEY\n# 获取地址: https://cloud.siliconflow.cn/i/OVI2n57p\n#\n# 📦 镜像说明:\n# - redis:alpine - 官方镜像,直接拉取\n# - ghcr.io/...-worker - GitHub Actions 自动构建\n# - ghcr.io/...-web - GitHub Actions 自动构建\n# ============================================================\n\nservices:\n # ============================================================\n # Redis: 消息队列(官方镜像)\n # ============================================================\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 30s\n timeout: 10s\n retries: 3\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Web: 前端服务(FastAPI)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n web:\n image: ghcr.io/10000ge10000/epic-awesome-gamer-web:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ============================================================\n # Worker: 后台任务执行器(浏览器自动化)\n # 镜像由 GitHub Actions 自动构建并推送\n # ============================================================\n worker:\n image: ghcr.io/10000ge10000/epic-awesome-gamer-worker:latest\n # 本地开发时取消注释下方两行:\n # build:\n # context: .\n # dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n - ./data:/app/data\n - ./data:/app/app/volumes\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n - ENABLE_APSCHEDULER=false\n - API_PROVIDER=siliconflow\n - SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n # ============================================================\n # ⚠️⚠️⚠️ 必须修改下方 API Key ⚠️⚠️⚠️\n # ============================================================\n # 获取步骤:\n # 1. 访问邀请链接: https://cloud.siliconflow.cn/i/OVI2n57p\n # 2. 注册账号并完成实名认证\n # 3. 双方各得 ¥16 代金券(可领 1500+ 次任务)\n # 4. 在控制台创建 API Key,替换下方的 sk-xxx\n # ============================================================\n - SILICONFLOW_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n # ============================================================\n # 模型配置(已优化,无需修改)\n - CAPTCHA_MODEL=Qwen/Qwen2.5-VL-32B-Instruct\n - CAPTCHA_MODEL_FALLBACK=Qwen/Qwen2.5-VL-72B-Instruct\n - PRIMARY_MODEL=Qwen/Qwen2.5-7B-Instruct\n - PRIMARY_MODEL_FALLBACK=Qwen/Qwen2.5-72B-Instruct\n depends_on:\n redis:\n condition: service_healthy\n restart: always\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"3\"\n"}, "88b9c8a3b7d487a63b2b94a1725261bd45489c40": {"t": 1785773217.9417517, "n": 1062, "h": "ffb51c4dfe2d97b7", "c": "version: '3.8'\n\nservices:\n redis:\n image: redis:alpine\n container_name: epic-redis\n restart: always\n\n web:\n build: .\n container_name: epic-web\n ports:\n - \"18000:8000\"\n volumes:\n # 统一挂载 data 目录,图片存在 ./data/images 下\n - ./data:/app/data\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n depends_on:\n - redis\n restart: always\n\n worker:\n build:\n context: .\n dockerfile: Dockerfile.worker\n container_name: epic-worker\n user: root\n volumes:\n # 这里的映射是为了持久化 Cookie\n - ./data:/app/app/volumes \n # ⚠️ 新增:为了让 Worker 把图片保存到宿主机,Web 也能读到\n - ./data:/app/data\n - ./worker.py:/app/worker.py\n environment:\n - REDIS_HOST=redis\n - TZ=Asia/Shanghai\n - PYTHONUNBUFFERED=1\n # ⚠️ ⚠️ ⚠️ 修改GEMINI_API_KEY值:为你自己申请到的\n - GEMINI_API_KEY=sk-xxx\n - GEMINI_BASE_URL=https://aihubmix.com\n - GEMINI_MODEL=gemini-2.5-pro\n - ENABLE_APSCHEDULER=false\n command: [\"python3\", \"/app/worker.py\"]\n depends_on:\n - redis\n restart: always"}}}}