云控系统手机群控批量管理

云控系统架构设计与部署:同时管理上百台设备的远程方案

云控系统底层怎么搭?中控服务器选型、投屏协议(VNC/RDP)、设备隔离技术、多机同步调度算法,适用于电商 / 游戏 / 社媒等多行业场景。

约 13 分钟

所谓云控系统,就是一个跑在服务器上的管理后台:设备连上来,你在网页里发任务、看状态、收数据。

为什么自建,架构和部署怎么走

市面上有各种 SaaS 群控产品,但很多团队最终选择自建,原因很实际。数据完全可控——所有设备日志、脚本内容、执行记录都在你自己的服务器上,不经过任何第三方,对跨境电商、金融测试等对数据安全敏感的场景是刚需。深度定制自由——你可以对接内部 ERP、CRM,实现自然语言控制、自定义 AI Agent 工作流,甚至为特定 App 编写专属自动化模板,SaaS 产品给不了这些。长期成本更低——设备量达到 50 台以上时,按台付费的 SaaS 总成本远高于一次性自建投入,自建是一次性硬件投入加少量运维人力,规模越大边际成本越低。

一个完整的云控系统包含这些模块:

组件 作用 选型
API 网关 处理登录、设备管理、任务调度请求 Node.js / Python FastAPI / Go
关系型数据库 存储设备信息、用户信息、任务记录 MySQL 8.0 / PostgreSQL
缓存层 高频读写缓存、设备心跳检测 Redis
消息队列 指令队列、断线重传、异步任务 Redis Queue / RabbitMQ
实时通道 WebSocket/H.264 视频流转发投屏 Nginx RTMP / WebRTC
进程守护 服务异常退出自动重启 Supervisor / PM2

架构可以简化为三层:

Web 浏览器 → Nginx(反代+TLS) → API 网关 → Redis/MySQL
                                    ↓ WSS/UDP
                              ┌───┴───┐
                          Agent 手机 1   Agent 手机 N

架构定下来,落到具体服务器上就是选型和初始化的事。国内环境建议用阿里云、腾讯云或华为云的 ECS/CVM。带宽上,单台设备投屏上行约 1-3 Mbps,20 台至少需 40-60 Mbps 公网带宽;CPU/内存上,4 核 8G 支撑 50 台以内,100 台以上建议 8 核 16G 起步;地域选离业务主力区域最近的机房,延迟越低投屏体验越好。

系统初始化(Ubuntu 22.04):

# 1. 更新系统
apt update && apt upgrade -y

# 2. 安装常用工具
apt install -y curl git wget htop net-tools unzip jq

# 3. 创建非 root 用户
adduser cloudadmin
usermod -aG sudo cloudadmin

# 4. SSH 密钥登录+禁用密码登录
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 5. 防火墙只开放必要端口
ufw allow 22/tcp && ufw allow 443/tcp && ufw enable

然后购买域名并添加 A 记录指向服务器公网 IP,用通配符方便后续扩展子域名,另留一个 cloud 子域给控制台专用。

部署有两种方式。一是 Docker Compose(推荐新手):先装 Docker。

curl -fsSL https://get.docker.com | sh
systemctl enable docker
docker compose version

再在项目目录创建 docker-compose.yml:

version: '3.8'

services:
  # MySQL 数据库
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your-strong-password
      MYSQL_DATABASE: easyclick_cloud
      MYSQL_USER: clouduser
      MYSQL_PASSWORD: another-strong-password
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "127.0.0.1:3306:3306"  # 仅本机可访问

  # Redis 缓存与消息队列
  redis:
    image: redis:7-alpine
    restart: always
    command: redis-server --requirepass your-redis-password
    volumes:
      - redis_data:/data
    ports:
      - "127.0.0.1:6379:6379"

  # API 后端服务
  api:
    build: ./backend
    restart: always
    environment:
      DB_HOST: db
      DB_PORT: 3306
      REDIS_URL: redis://:your-redis-password@redis:6379/0
    depends_on:
      - db
      - redis
    ports:
      - "8080:8080"

  # Nginx 反向代理 + 静态文件
  nginx:
    image: nginx:alpine
    restart: always
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./frontend/dist:/usr/share/nginx/html:ro
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - api

volumes:
  mysql_data:
  redis_data:

启动全部服务:docker compose up -d。二是宝塔面板(国内用户更熟悉),一键安装后装 MySQL 8.0、Redis、Nginx 1.24、Supervisor 四个软件。两种方式各有优劣:Docker 适合需要严格隔离环境的团队,宝塔适合快速上手且运维深度要求不高的场景。

数据库这边,核心是设备表和任务表。

字段 类型 说明
id BIGINT AUTO_INCREMENT 主键
name VARCHAR(100) 设备昵称/编号
status ENUM(‘online’,‘offline’,‘error’) 在线状态
platform ENUM(‘android’,‘ios’,‘harmonyos’) 设备平台
agent_version VARCHAR(20) Agent 客户端版本号
last_seen_at DATETIME 最后心跳时间
created_at DATETIME 注册时间
properties JSON 设备属性(品牌、型号、系统版本等)
字段 类型 说明
id BIGINT AUTO_INCREMENT 主键
title VARCHAR(200) 任务名称
script_content TEXT 脚本内容/JSON 参数
target_devices JSON 目标设备 ID 列表
status ENUM(‘pending’,‘running’,‘completed’,‘failed’) 任务状态
progress INT 进度百分比
started_at DATETIME 开始时间
finished_at DATETIME 结束时间

创建表的 SQL 可以在项目仓库的 sql/ 目录里找到初始迁移脚本,生产环境推荐用 Flyway 这类工具管理版本迭代。

后端、前端、接入和安全这几块

后端不讲完整框架代码,列几个最容易踩坑的核心模块。设备心跳检测:每个 Agent 需要按固定间隔(建议 10-30 秒)向云端发送心跳,云端后台进程轮询数据库,标记超过阈值(比如 3 倍心跳间隔)没发消息的设备为离线。

import time

def heartbeat_monitor():
    while True:
        now = datetime.now()
        offline_threshold = now - timedelta(seconds=90)  # 3 × 30s
        
        cursor.execute("""
            UPDATE devices 
            SET status = 'offline' 
            WHERE status = 'online' 
              AND last_seen_at < %s
        """, (offline_threshold,))
        
        time.sleep(10)  # 每 10 秒检查一次
EasyClick 中控运行状态面板显示中控桥接和 AIAGENT 状态以及重启看日志操作

这是 EasyClick 实际的状态监控面板:左侧能看到中控服务、桥接服务和 AI Agent 的在线状态,某台设备掉线了右侧列表会实时更新最后心跳时间戳,点「查看日志」可以直接跳到底层日志页,不用额外翻服务器日志文件。

指令队列:指令进入 Redis 消息队列,由 Agent 主动拉取,这样断线重连后不会丢指令。

device_queue = f"task:{device_id}"
payload = json.dumps({
    "task_id": task_id,
    "action": "run_script",
    "params": {...},
    "timestamp": int(time.time())
})
r.lpush(device_queue, payload)

Agent 端定期 LPOP 自己的队列消费指令,队列为空就阻塞等待一段短时间再重试,这个模式叫“推拉结合”,兼顾了实时性和可靠性。WebSocket 实时投屏:网页上的屏幕镜像最佳方案是 WebRTC 或 WebSocket+H.264,Agent 端持续录屏并编码成 H.264 视频流通过 WebSocket 发给服务端,服务端再转发到所有订阅了该设备画面的浏览器页面。关键在按需推送——只有有人打开某台设备的投屏页面时才建立视频流连接,没人看的时候关掉编码节省 CPU。为什么按需推送?没人看还开着编码,纯烧 CPU。

前端 Dashboard 是用户唯一操作入口,几个模块缺一不可:设备管理页以卡片或表格展示所有设备,显示设备名、在线状态、平台图标、电量,支持筛选、搜索、分页、批量操作;实时监控大屏用设备树加缩略图墙,顶部放总设备数、在线数、今日任务数、成功率;任务编排页支持拖拽创建步骤、设置条件分支、设置循环和并发策略、保存模板复用;数据分析看板展示近 7 天/30 天的活跃趋势、执行成功率 Top/Bottom、掉线频率分布。

设备接入时,Agent 是每个设备上的核心进程,负责上报心跳和设备信息、接收并执行云端指令、采集屏幕画面推送、报告结果和异常。Android 端通常是一个 APK,可以扫码下载或 OTA 静默安装;iOS/鸿蒙则通过各自平台的分发机制。装完后在控制台刷新设备列表,应该能看到新设备变为“在线”,检查四件事:设备能否被正常选中、心跳是否持续更新、能否成功下发一条简单指令、投屏画面是否流畅。四步都通过,说明接入链路完全正常。

最后是安全加固,云控系统暴露在公网后防护必须跟上:强制 HTTPS(TLS 1.2 以上、强制 HTTP 跳转)、API 认证(Token/JWT 鉴权、过期不超过 24 小时)、设备认证(Agent 连接时携带设备指纹或共享密钥)、上线前装 WAF 挡常见 Web 攻击、操作日志审计且不可篡改、敏感信息加密存储、对登录和 API 调用做限流防爆破。

FAQ

Q1:云控系统搭建大概需要多少成本? A:纯自建方案最低配置(4 核 8G 云主机+免费 SSL+MySQL 开源版+自制前端)大约每月 200-400 元服务器费用。带宽是主要变动因素,设备越多需要的上行带宽越大。

Q2:有没有开箱即用的云控系统产品? A:市面上有几个选择但大多是 SaaS 模式而非私有化部署。如果需要完全自主可控(数据在自己服务器上),自建是唯一选项。自建的优点是完全掌控代码、可以随时定制功能、不存在第三方数据泄露风险。

Q3:搭建难度如何?需要什么技术水平? A:中等偏上水平即可胜任。需要具备的能力:Linux 服务器管理、Docker/宝塔部署经验、后端服务开发(Node.js/Python/Go 任一语言)、数据库设计和基本的前端知识。如果一个团队里有 1 名全栈工程师,大约 2-3 周可以跑通 MVP(最小可用版本)。

Q4:能不能在家庭 NAS 或小机上运行? A:理论上可以但有明显的硬件瓶颈。NAS 的小机通常 CPU 和内存都很有限,跑几台设备的轻量管理还凑合,但如果要实时投屏的话几乎扛不住。建议至少保证 2 核 4G 的配置。

Q5:多久需要维护和升级? A:正常使用下每周做一次数据库备份就够了。系统本身更新频率取决于你选的框架:主流框架一般每月发布安全补丁,建议及时跟进。


关于 EasyClick:手机自动化脚本开发平台,覆盖安卓免 ROOT、iOS 免越狱、鸿蒙三大手机生态,还提供苹果脚本编写、苹果群控、安卓群控、远程云控、AI 群控手机等。→ 了解全部产品


想要真实跑起来?

本文介绍的方案均可在 EasyClick 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。

访问 EasyClick 官网 →