122 lines
5.0 KiB
YAML
122 lines
5.0 KiB
YAML
# 工作手机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:5038(5037 在部分 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
|