前言
之前发过一篇《开源云真机平台-Sonic应用实践》,是用1.0版本搭建的,版本比较老。现在最新版已经迭代到了1.5版本。我采用的是在另一台服务器上重新部署一套的形式,当然你也可以在原有的sonic版本上进行更新。这样也方便介绍演示部署的全过程。大致分为以下步骤:
- 安装docker、docker-compose
- 安装MySQL,创建sonic数据库
- 安装jdk及Android SDK
- 部署sonic,注册agent
- 部署agent,连接使用手机
一、安装docker和docker-compose
1.安装docker
# 安装yum-tools工具包yum install -y yum-utils # 指定Docker下载源(可选,适用于首次安装)yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker(默认安装最新版本)yum install -y docker-ce docker-ce-cli containerd.io # 验证是否安装成功docker version # 启动服务systemctl start docker
2.安装docker-compose
curl-L"https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose chmod+x /usr/local/bin/docker-compose docker-compose --version
二、安装mysql数据库
1.安装数据库
通过docker安装数据库
docker pull mysql:5.7.33 docker run -d--restart always --name mysql -eMYSQL_ROOT_PASSWORD=Sonic123!@# -p 3307:3306 mysql:5.7.33
2.创建数据库
# 进入mysql容器内docker exec -it mysql sh# 容器内登录mysqlmysql -uroot-p123456# mysql命令行操作mysql> create database sonic character set utf8 collate utf8_general_ci;
三、安装jdk及Android-sdk
可以参考前面的一篇文章《如何在Linux快速搭建一套ADB环境》
四、部署sonic
1.修改.env部署文件
################################################# Do you need any help? ## Visit https://sonic-cloud.gitee.io/#/Deploy #################################################################### Service Config ###################SONIC_SERVER_HOST=192.168.1.20 SONIC_SERVER_PORT=3000SONIC_EUREKA_USERNAME=sonic SONIC_EUREKA_PASSWORD=sonic SONIC_EUREKA_PORT=9090################# MySQL Config #################MYSQL_HOST=192.168.1.20 MYSQL_PORT=3307MYSQL_DATABASE=sonic MYSQL_USERNAME=root MYSQL_PASSWORD=Sonic!@123 ################# User Config #################SECRET_KEY=sonic EXPIRE_DAY=14PERMISSION_ENABLE=truePERMISSION_SUPER_ADMIN=sonic REGISTER_ENABLE=trueNORMAL_USER_ENABLE=trueLDAP_USER_ENABLE=falseLDAP_USER_ID=cn LDAP_BASE_DN=ou=users LDAP_BASE=ou=system LDAP_USERNAME=uid=admin,ou=system LDAP_PASSWORD=Sonic!@#123LDAP_URL=ldap://192.168.1.20:10389
2.创建并启动容器
docker-compose up -d
3.前端访问&注册账号
访问地址:http://192.168.1.20:3000/,进行账号注册,并登录。
五、部署agent
1.创建agent
登录成功后,需要创建一个agent
创建完成后,点击复制Agent Key,后面会用到
2.修改docker-compose.yml文件
version: '3'services: sonic-agent: image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-agent-linux:v1.5.0-release" environment: # 对应server的env配置,注意防火墙关闭对应端口-SONIC_SERVER_HOST=192.168.1.20 -SONIC_SERVER_PORT=3000# 替换为部署Agent机器的ipv4-AGENT_HOST=192.168.1.20 # 替换为Agent服务的端口,可以自行更改-AGENT_PORT=7777# 替换为前面复制的Agent key-AGENT_KEY=e3dd4622-834a-4f53-914d-73b64b5606e1 # 是否使用安卓模块-ANDROID_ENABLE=true# 是否开启远程adb调试功能-USE_ADBKIT=true# 是否使用iOS模块-IOS_ENABLE=true# 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书-WDA_BUNDLE_ID=com.facebook.WebDriverAgentRunner.xctrunner # 是否启用Appium-APPIUM_ENABLE=true# 是否启用webview调试功能-WEBVIEW_ENABLE=true# 谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)-CHROME_DRIVER_PORT=0# 是否开启sonic-go-mitmproxy代理功能-SGM_ENABLE=true network_mode: "host" privileged: true volumes: - /dev/bus/usb:/dev/bus/usb - /var/run/usbmuxd:/var/run/usbmuxd
3.创建并启动容器
docker-compose up -d
查看日志会发现,sonic-agent_sonic-agent_1 容器会自动检查相关依赖环境,并与sonic server进行连接认证。
六、连接手机
需要在手机设置-开发者选项中开启USB调试模式,个别手机如小米可能还需要勾选允许USB模拟点击。
手机通过USB数据线连接服务器后,会弹出是否允许计算机调试本台设备,勾选允许。此时可以通过adb devices命令查看是否已成功连接:
[root@sonic sonic-agent]# adb devicesList of devices attached 66J5T19614010786 device GDB6R19813000723 device tkqkssgirgaipblj device
刷新sonic前台页面,即可看到已连接的手机
七、常见问题及解决办法
1.sonic_sonic-server-controller_1容器一直处于重启状态
查看容器状态:
docker ps-a
容器状态正常,但前端页面提示系统错误。此时需要检查controller容器日志,检查数据库是否连接成功、数据表是否成功:
docker logs -f sonic_sonic-server-controller_1
通过查看sonic_sonic-server-controller_1容器日志发现错误原因为mysql连接不上导致:
检查发现原来是系统开启了防火墙,防火墙未放开3307端口(前面创建的mysql容器的3306映射到本机的3307端口),开启防火墙3307端口即可,另外eureka的9090端口也要开放出来:
firewall-cmd --permanent--add-port=3307/tcp # 添加3307端口firewall-cmd --permanent--add-port=9090/tcp # 添加9090端口firewall-cmd --reload# 重新加载防火墙配置firewall-cmd --list-all# 查看开放端口列表
重启运行docker-compose.yml
docker-compose down docker-compose up -d
此时数据库正常连接并创建相关数据表:
2.进入手机详情页面,一直处于“准备图像中”
查看防火墙状态,防火墙开放agent的7777端口。当然直接关闭防火墙服务也可以,不过这样会增加很多安全隐患。
firewall-cmd --permanent--add-port=7777/tcp # 添加3307端口firewall-cmd --reload# 重新加载防火墙配置
再次刷新前台页面,重新进入手机即恢复正常:
小结
总体来说,部署过程比较简单,就是一堆的基础环境搭建及配置:JDK、ADB、Docker、MySQL。尤其需要注意防火墙端口问题,最简单粗暴的办法就是关闭防火墙。以及若部署在云服务器上,还需要在安全组中开放相关端口。比较难的地方在于出现问题后的问题排查,有时候一个问题会卡壳很久,这个时候需要学会查看日志来定位问题,不能只看容器状态,容器状态只是表象。