Files
workphone-sdk/sdk/docker-compose.yml

122 lines
5.0 KiB
YAML
Raw 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.

# 工作手机SDK v3.1 - 唯一 Docker 套件
# SDK、MongoDB、Redis 同一编排,避免依赖其它网站或宿主机服务。
# 含 AI Brain 支持、Hook 模块管理
# 统一入口8899控制台 /hub、API、WebSocket 同源,不再使用 8880 Nginx 反代)
services:
mongo:
image: mongo:6.0
container_name: workphone-mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USERNAME:-workphone}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD:-workphone-mongo-2026}
TZ: Asia/Shanghai
volumes:
- workphone_mongo:/data/db
healthcheck:
test: ["CMD-SHELL", "mongosh --quiet \"mongodb://$${MONGO_INITDB_ROOT_USERNAME}:$${MONGO_INITDB_ROOT_PASSWORD}@127.0.0.1:27017/admin\" --eval \"db.adminCommand('ping')\""]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7.0-alpine
container_name: workphone-redis
restart: always
command: redis-server --appendonly yes
volumes:
- workphone_redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 10
workphone-sdk:
build:
context: .
dockerfile: Dockerfile
container_name: workphone-sdk
restart: always
depends_on:
mongo:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "8899:8899"
environment:
- ENV=production
- TZ=Asia/Shanghai
# Type-C/USB容器内默认看不到本机 USB。宿主机执行 sdk/scripts/adb_host_server_listen_all.sh 后,
# 在 .env 中设置 ADB_SERVER_SOCKET=tcp:host.docker.internal:50385037 在部分 Mac 会挂死)
- ADB_SERVER_SOCKET=${ADB_SERVER_SOCKET:-tcp:host.docker.internal:5038}
- MONGO_URI=mongodb://${MONGO_ROOT_USERNAME:-workphone}:${MONGO_ROOT_PASSWORD:-workphone-mongo-2026}@mongo:27017/?authSource=admin
- MONGO_DB=workphone_sdk
- REDIS_URL=redis://redis:6379/1
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
- AI_PROVIDER=${AI_PROVIDER:-longxia}
- AI_BASE_URL=${AI_BASE_URL:-https://simpleapi.quwanzhi.com/v1}
- AI_API_KEY=${AI_API_KEY:-}
- AI_MODEL=${AI_MODEL:-deepseek-chat}
- WORKPHONE_AI_CONFIG_PATH=/app/runtime-config/ai_provider.json
- API_KEY=${API_KEY:-workphone-secret-key}
# Docker Hub 与公网控制台统一使用管理员账号登录。
- CONSOLE_USERNAME=${CONSOLE_USERNAME:-admin}
- CONSOLE_PASSWORD=${CONSOLE_PASSWORD:-k123456}
# 手机扫码绑定统一使用当前局域网地址,避免生成 localhost 或公网域名。
- WORKPHONE_LAN_IP=${WORKPHONE_LAN_IP:-192.168.110.47}
- WORKPHONE_BIND_SERVER=${WORKPHONE_BIND_SERVER:-ws://192.168.110.47:8899/ws/device}
- WORKPHONE_PUBLIC_WSS=${WORKPHONE_PUBLIC_WSS:-wss://wpsdk.quwanzhi.com/ws/device}
# 无 Root 真机仍允许通过已连接的 WebSocket Agent + u2 执行微信操作。
- WECHAT_BACKEND_ONLY=${WECHAT_BACKEND_ONLY:-false}
- WECHAT_WS_HOOK_ONLY=${WECHAT_WS_HOOK_ONLY:-false}
# 微信无界面业务SDK 容器直接连接真机 phantom Frida daemon。
- SERVER_FRIDA_ENABLED=${SERVER_FRIDA_ENABLED:-true}
- SERVER_FRIDA_HOST=${SERVER_FRIDA_HOST:-host.docker.internal}
- SERVER_FRIDA_PORT=${SERVER_FRIDA_PORT:-19886}
- SERVER_FRIDA_DEVICE_ID=${SERVER_FRIDA_DEVICE_ID:-xgfe65eimrrofyws}
# 微信加好友冷却:默认 10 秒,可通过环境变量调整;浮动默认关闭。
- WECHAT_ADD_FRIEND_COOLDOWN_SECONDS=${WECHAT_ADD_FRIEND_COOLDOWN_SECONDS:-10}
- WECHAT_ADD_FRIEND_COOLDOWN_JITTER_SECONDS=${WECHAT_ADD_FRIEND_COOLDOWN_JITTER_SECONDS:-0}
- WECHAT_ADD_FRIEND_LONG_PAUSE_ENABLED=${WECHAT_ADD_FRIEND_LONG_PAUSE_ENABLED:-false}
- WECHAT_ADD_FRIEND_DAILY_MAX=${WECHAT_ADD_FRIEND_DAILY_MAX:-50}
- WECHAT_ADD_FRIEND_NEW_DAILY_MAX=${WECHAT_ADD_FRIEND_NEW_DAILY_MAX:-50}
# AI Brain 配置
- AI_BRAIN_ENABLED=${AI_BRAIN_ENABLED:-true}
- AI_BRAIN_API_URL=${AI_BRAIN_API_URL:-http://host.docker.internal:3102}
- AI_BRAIN_API_KEY=${AI_BRAIN_API_KEY:-kr_jSH3zQPDUKmuNwn_Q931CJgfofuOs5Eg}
- AI_BRAIN_DEFAULT_MODEL=${AI_BRAIN_DEFAULT_MODEL:-claude-sonnet-4-5-20250929}
volumes:
- ./app:/app
- ./config:/app/runtime-config
- ./frida_scripts:/app/frida_scripts
- ../开发文档:/开发文档:ro
- workphone_data:/data
- workphone_logs:/app/logs
# 与宿主机共用 adb 密钥容器内通过「WiFi + adb tcpip」连手机Mac 上 Docker 无法直插 USB
- ${HOME}/.android:/root/.android:ro
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8899/health"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
volumes:
workphone_data:
workphone_logs:
workphone_mongo:
workphone_redis:
networks:
default:
name: workphone-network