中控服务部署
中控服务说明
中控服务镜像集成了以下核心模块:
- 中控-投屏控制服务
负责群控投屏的操作执行、命令下发及设备交互,是系统的核心控制通道。 - 设备-脚本通信服务
支持多设备在执行云控脚本时进行实时通信,常用于多设备协同任务。 - 设备-代码通信服务
用于设备间执行云控代码时的指令交互,提升多设备协同的实时性与一致性。
通信机制
系统默认 优先使用 P2P 通信模式 进行数据交换。
当 P2P 通道未建立成功时,系统将自动切换至 中控-投屏控制服务,确保所有控制操作可以正常进行。
私有部署优势
私有部署可以带来以下优势:
- 更快的响应速度
- 更稳定的控制能力
- 更流畅的操作体验
👉 当绑定设备数量超过 10 台时,建议使用私有部署模式,以确保系统性能与稳定性。
部署教程
CentOS 8 上安装 Docker 并部署中控服务的 Docker 镜像
准备阶段
1️⃣ 购买云服务器
中控服务对服务器配置要求极低,本文档示例使用低配服务器即可稳定运行,无需高性能配置。
推荐云厂商:
- 阿里云
- 腾讯云
- 华为云
- 百度云
- AWS
参考服务器配置:
- CPU:2核(够用,1核也可)
- 内存:2G(够用,1G也可)
- 带宽:3Mbps
- 系统:CentOS 8
注:本教程命令基于 CentOS 8 演示,其他 Linux 发行版(如 Ubuntu、Debian)及 CentOS 其他版本同样适用,部分命令可能需要根据包管理器调整。
约 ¥99 / 年 即可使用,该配置可支撑 100~500 台设备控制。
购买步骤:
- 打开阿里云官网:https://www.aliyun.com
- 推荐服务器区域:华东、华北、香港、北京,选择离用户最近区域,延迟更低
- 操作系统选择:CentOS 8 64位
- 设置 root 密码 并开通实例。
2️⃣ 下载服务器连接工具(Windows)
推荐工具:Xshell 6 、 Xftp 6 安装教程:https://blog.csdn.net/weixin_57558097/article/details/127416711
3️⃣ 连接服务器
使用 Xshell 连接服务器:
- 打开 Xshell
- 新建会话
- 填写服务器信息
- 主机:阿里云公网IP
- 协议:SSH
- 端口:22
- 用户名:root
- 密码:服务器密码
使用 Xftp 上传文件
打开 Xftp
连接方式与 Xshell 相同,用于上传 Docker镜像文件。
安装 Docker 环境
1️⃣卸载旧版 Docker(如果有)
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
(可选)清空 Docker 数据
sudo rm -rf /var/lib/docker/*
2️⃣ 安装依赖工具
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
3️⃣ 配置阿里云 Docker 镜像源
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
替换默认源
sudo sed -i 's|download.docker.com|mirrors.aliyun.com/docker-ce|g' /etc/yum.repos.d/docker-ce.repo
4️⃣ 安装 Docker
sudo dnf makecache
sudo yum install -y docker-ce
5️⃣ 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
6️⃣ 配置 Docker 镜像加速器
sudo mkdir -p /etc/docker
创建配置:
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"registry-mirrors": [
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
7️⃣ 验证 Docker
查看版本
docker -v
查看状态
systemctl status docker
8️⃣ Docker 测试
拉取 Redis 镜像
docker pull redis
查看镜像
docker images | grep redis
删除镜像
docker rmi redis
安装中控服务镜像
下载镜像:https://vip.123pan.cn/1823071502/公共/工具/device-controller-1.0.tar
上传至服务器/mnt目录下:/mnt/device-controller-1.0.tar
1️⃣ 导入镜像
docker load -i /mnt/device-controller-1.0.tar
2️⃣ 检查镜像
docker images
如果看到device-controller:1.0说明导入成功。
3️⃣ 防火墙放行端口(以 CentOS/firewalld 为例)
需要放行TCP端口:2356、2357、2358
sudo firewall-cmd --add-port=2356/tcp --permanent
sudo firewall-cmd --add-port=2357/tcp --permanent
sudo firewall-cmd --add-port=2358/tcp --permanent
重载防火墙
sudo firewall-cmd --reload
查看端口
sudo firewall-cmd --list-ports
4️⃣ 云服务器安全组放行(必做)
云服务器默认会通过安全组拦截外部端口访问,即使本地防火墙已放行,外部设备依然无法连接。
请在云服务商控制台(阿里云、腾讯云、华为云、AWS 等)添加安全组规则,放行以下 TCP 端口:
235623572358
说明:安全组是云服务器的外层防火墙,必须单独配置,不可省略。
若你的服务器没有安全组,只需放行系统本地防火墙即可,此步骤可跳过。
运行中控服务
⚠️ 运行容器前,必须替换以下参数
| 参数名 | 说明 | 示例 |
|---|---|---|
| user | 云控用户名 | ceshi3 |
| pwd | 云控密码 | qwer1234 |
| cipher | 卡密(联系客服免费领取) | tIeSKh19vk |
运行容器:
docker run --name device-controller \
-p 2356:2356 \
-p 2357:2357 \
-p 2358:2358 \
-e user=ceshi3 \
-e pwd=qwer1234 \
-e cipher=tIeSKh19vk \
device-controller:1.0
| 参数 | 作用 | 示例值 |
|---|---|---|
--name | 指定容器名称,方便管理 | device-controller |
-p 宿主端口:容器端口 | 端口映射,外部访问映射到容器内部服务 | 2356:2356,2357:2357,2358:2358 |
-e 变量名=值 | 设置环境变量,传递配置参数 | user=ceshi3,pwd=qwer1234,cipher=tIeSKh19vk |
镜像名:标签 | 指定要运行的镜像和版本 | device-controller:1.0 |
直接退出并停止容器的快捷键:Ctrl + C
常见错误
错误1
#错误信息
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/48fe6d34675b407cd96af00362ed1051e53636d8b3a1b9f8d9b9a07d364df2fb/log.json: no such file or directory): runc did not terminate successfully: exit status 127: unknown.
#下面是检查和解决办法
# 查看runc是否存在
runc --version
# 查看docker版本
docker version
# 检查libseccomp是否存在
rpm -qa | grep libseccomp
# 安装libseccomp
sudo yum downgrade libseccomp-2.5.1-1.el8
# 更新libseccomp
sudo yum update libseccomp
# 再次查看docker版本(此时应显示runc版本)
docker version
# 重启docker服务
sudo systemctl restart docker
错误2
#错误信息
docker: Error response from daemon: driver failed programming external connectivity on endpoint device-controller (1e5552b5ea689a400c450a5d8dc211b9e67d1e392d14df1a1110271aa2e9bf1e): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 2358 -j DNAT --to-destination 172.17.0.2:2358 ! -i docker0: iptables: No chain/target/match by that name.
#原因 Docker容器做端口映射报错或者宿主机防火墙改动都可能造成
#解决方法
systemctl restart docker
常用 Docker 管理命令
1️⃣ 查看所有容器(包含运行和停止的)
docker ps -a
| 参数 | 作用 |
|---|---|
-a | 显示所有容器(含停止状态) |
2️⃣ 查看正在运行的容器
docker ps
| 参数 | 作用 |
|---|---|
| 无 | 只显示正在运行的容器 |
3️⃣ 停止容器
docker stop device-controller
| 参数 | 作用 | 示例值 |
|---|---|---|
| 容器名/ID | 指定要停止的容器 | device-controller |
4️⃣ 启动已停止的容器
docker start device-controller
| 参数 | 作用 | 示例值 |
|---|---|---|
| 容器名/ID | 指定要启动的容器 | device-controller |
5️⃣ 删除容器 需先停止容器,再执行删除操作:
docker stop device-controller
docker rm device-controller
| 命令 | 作用 | 示例值 |
|---|---|---|
docker stop | 停止目标容器 | device-controller |
docker rm | 删除已停止的容器 | device-controller |
6️⃣ 删除镜像(如需重建镜像)
docker rmi device-controller:1.0
| 参数 | 作用 | 示例值 |
|---|---|---|
| 镜像名:标签 | 指定要删除的镜像 | device-controller:1.0 |
7️⃣ 查看容器日志(实时输出)
docker logs -f device-controller
| 参数 | 作用 | 示例值 |
|---|---|---|
-f | 持续跟踪日志实时输出 | device-controller |
设置开机自启
创建 systemd 服务:
cat <<EOF | sudo tee /etc/systemd/system/device-controller.service > /dev/null
[Unit]
Description=Device Controller Service
After=docker.service network.target
[Service]
ExecStart=/usr/bin/docker start -a device-controller
ExecStop=/usr/bin/docker stop device-controller
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable device-controller.service
sudo systemctl start device-controller.service
重启服务器
sudo reboot
检查服务状态
1️⃣ 查看容器:
docker ps
预期输出(需能看到 device-controller 容器处于 Up 状态):
CONTAINER ID IMAGE STATUS PORTS
xxxxxxx device-controller:1.0 Up X seconds 0.0.0.0:2356->2356/tcp, 0.0.0.0:2357->2357/tcp, 0.0.0.0:2358->2358/tcp
2️⃣ 检查端口:
ss -tuln | grep 235
预期输出(需包含以下 3 个端口的监听记录,代表服务就绪):
LISTEN 0 128 0.0.0.0:2356 0.0.0.0:*
LISTEN 0 128 0.0.0.0:2357 0.0.0.0:*
LISTEN 0 128 0.0.0.0:2358 0.0.0.0:*
云控后台切换 IP


当后台服务器切换 IP 后,手机端 云控APP 需手动断开后重新连接,或重启 APP 以生效。
补充说明
- 卡密用于防止滥用,免费提供
- 采用 一机一码机制
- 每位用户 限领一枚卡密
- 卡密 长期有效