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

云控系统怎么搭建?从0到跑通的免root群控实操教程

云控系统从零搭建完整实操:架构拆解→服务器准备→Docker部署→设备接入验证→安全加固→性能优化,含宝塔/Docker双方案步骤详解与常见问题排查。

约 16 分钟

云控系统怎么搭建?从0到跑通的免root群控实操教程

一、为什么你需要自建云控系统

市面上有各种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:

*.yourdomain.com  →  服务器IP  (通配符方便后续扩展子域名)
cloud.yourdomain.com → 服务器IP  (控制台专用)

接下来安装核心依赖。

四、两种部署方式

方式一: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

方式二:宝塔面板(国内用户更熟悉)

一键安装宝塔面板:

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

安装以下软件:

  • MySQL 8.0:创建数据库和用户
  • Redis:缓存与消息队列
  • Nginx 1.24:反向代理和站点配置
  • Supervisor:后端服务的进程守护

两种方式各有优劣:Docker适合需要严格隔离环境的团队,宝塔适合快速上手且运维深度要求不高的场景。根据技术栈自选。

五、数据库设计与初始化

核心数据模型包括以下几张表:

设备表(devices)

字段 类型 说明
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 设备属性(品牌、型号、系统版本等)

任务表(tasks)

字段 类型 说明
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发送给服务端;服务端再通过WebSocket转发到所有订阅了该设备画面的浏览器页面。

关键点在于按需推送:只有有人打开某台设备的投屏页面时才建立视频流连接,没人看的时候关掉编码节省CPU。这部分涉及复杂的实时通信优化,建议优先使用成熟的开源方案做基座再二次开发。

七、前端Dashboard功能清单

Web控制台是用户唯一操作入口,以下功能模块缺一不可:

1. 设备管理页

以卡片或表格形式展示所有已注册设备。每张卡片显示设备名、在线状态(绿/灰圆点)、平台图标、电量(如果有)。支持筛选、搜索、分页、批量操作(选中多台设备同时下发指令)。

2. 实时监控大屏

类似指挥中心的可视化视图:左侧列出现有设备树状结构,右侧显示选中设备的实时画面缩略图墙。点击任意缩略图可以展开全屏查看。顶部放聚合统计指标:总设备数、在线数、今日执行任务数、成功率。

3. 任务编排页

可视化的任务编排编辑器。用户可以:

  • 拖拽创建任务步骤(如“打开App A → 点击按钮B → 等待3秒 → 滑动100px”)
  • 设置条件分支(“如果弹出弹窗C则点击取消”)
  • 设置循环次数和并发策略(顺序执行/并行执行)
  • 保存模板供后续复用

4. 数据分析看板

统计报表页面,展示近7天/30天的活跃趋势、脚本执行成功率Top/Bottom分析、设备掉线频率分布等图表。帮助企业评估自动化投入产出比、发现潜在问题。

八、设备接入与测试验证

安装Agent客户端

Agent是每个设备上的核心进程,负责:

  • 定时向云端上报心跳和设备信息
  • 接收云端下发的脚本和指令并执行
  • 采集屏幕画面并通过视频通道推送
  • 报告执行结果和异常日志

Android端的Agent通常是一个APK,用户可以通过扫码下载或云控后台OTA静默安装。iOS/HarmonyOS则需要通过各自平台的分发机制。

验证接入成功

安装完成后,在Web控制台刷新设备列表,应该能看到新设备状态变为“在线”。检查一下:

  1. 设备能否被正常选中?
  2. 心跳是否正常更新(last_seen_at字段在持续变化)?
  3. 是否能成功下发一条简单指令(比如打开一个App)?
  4. 投屏画面是否流畅无严重卡顿?

如果这四步都通过了,说明设备接入链路完全正常。

九、安全加固 checklist

把云控系统在公网暴露出去后安全防护就必须跟上:

  • 强制HTTPS:全站启用TLS 1.2以上,强制HTTP→HTTPS跳转
  • API认证:所有接口使用Token/JWT鉴权,Token过期时间不超过24小时
  • 设备认证:Agent连接时需要携带设备指纹或共享密钥,防止伪造设备接入
  • WAF防护:上线前装个免费WAF挡掉常见Web攻击(XSS、SQL注入等)
  • 日志审计:记录所有管理员操作日志(谁在什么时间删除了哪个设备),不可篡改
  • 数据加密:敏感信息(设备账号密码、API Key)在数据库中要加密存储
  • 速率限制:对登录接口和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:EasyClick 是手机自动化AI智能体平台,覆盖安卓免 root、iOS 免越狱、鸿蒙 Next 三大生态,提供脚本开发、苹果群控、本地中控投屏与云控系统。→ 了解全部产品


想要真实跑起来?

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

访问 EasyClick 官网 →