Files

1 line
166 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}