前言 之前发过一篇《开源云真机平台Sonic应用实践》,是用1。0版本搭建的,版本比较老。现在最新版已经迭代到了1。5版本。我采用的是在另一台服务器上重新部署一套的形式,当然你也可以在原有的sonic版本上进行更新。这样也方便介绍演示部署的全过程。大致分为以下步骤:安装docker、dockercompose安装MySQL,创建sonic数据库安装jdk及AndroidSDK部署sonic,注册agent部署agent,连接使用手机一、安装docker和dockercompose1。安装docker安装yumtools工具包yuminstallyyumutils指定Docker下载源(可选,适用于首次安装)yumconfigmanageraddrepohttps:download。docker。comlinuxcentosdockerce。repo安装Docker(默认安装最新版本)yuminstallydockercedockerceclicontainerd。io验证是否安装成功dockerversion启动服务systemctlstartdocker2。安装dockercomposecurlLhttps:get。daocloud。iodockercomposereleasesdownload1。29。2dockercompose(unames)(unamem)ousrlocalbindockercomposechmodxusrlocalbindockercomposedockercomposeversion二、安装mysql数据库1。安装数据库 我是通过docker安装的数据库,如果你已经安装好了mysql,可以忽略这一步。dockerpullmysql:5。7。33dockerrundrestartalwaysnamemysqleMYSQLROOTPASSWORDSonic123!p3307:3306mysql:5。7。332。创建数据库进入mysql容器内dockerexecitmysqlsh容器内登录mysqlmysqlurootp123456mysql命令行操作mysqlcreatedatabasesoniccharactersetutf8collateutf8generalci;三、安装jdk及Androidsdk 可以参考之前的文章《如何在Linux快速搭建一套ADB环境》四、部署sonic1。修改。env部署文件 主要是将服务器ip地址改为你自己的ip地址,以及数据库ip地址、端口号、账号密码的修改。Doyouneedanyhelp?Visithttps:soniccloud。gitee。ioDeployServiceConfigSONICSERVERHOST192。168。1。20SONICSERVERPORT3000SONICEUREKAUSERNAMEsonicSONICEUREKAPASSWORDsonicSONICEUREKAPORT9090MySQLConfigMYSQLHOST192。168。1。20MYSQLPORT3307MYSQLDATABASEsonicMYSQLUSERNAMErootMYSQLPASSWORDSonic123!UserConfigSECRETKEYsonicEXPIREDAY14PERMISSIONENABLEtruePERMISSIONSUPERADMINsonicREGISTERENABLEtrueNORMALUSERENABLEtrueLDAPUSERENABLEfalseLDAPUSERIDcnLDAPBASEDNouusersLDAPBASEousystemLDAPUSERNAMEuidadmin,ousystemLDAPPASSWORDSonic!123LDAPURLldap:192。168。1。20:103892。创建并启动容器dockercomposeupd3。前端访问注册账号 访问地址:http:192。168。1。20:3000,进行账号注册,并登录。 五、部署agent1。创建agent 登录成功后,需要创建一个agent 创建完成后,点击复制AgentKey,后面会用到 2。修改dockercompose。yml文件version:3services:sonicagent:image:registry。cnhangzhou。aliyuncs。comsoniccloudsonicagentlinux:v1。5。0releaseenvironment:对应server的env配置,注意防火墙关闭对应端口SONICSERVERHOST192。168。1。20SONICSERVERPORT3000替换为部署Agent机器的ipv4AGENTHOST192。168。1。20替换为Agent服务的端口,可以自行更改AGENTPORT7777替换为前面复制的AgentkeyAGENTKEYe3dd4622834a4f53914d73b64b5606e1是否使用安卓模块ANDROIDENABLEtrue是否开启远程adb调试功能USEADBKITtrue是否使用iOS模块IOSENABLEtrue替换为你自己使用的wda的bundleId,如果没有。xctrunner后缀会自动补全,建议使用公司的开发者证书WDABUNDLEIDcom。facebook。WebDriverAgentRunner。xctrunner是否启用AppiumAPPIUMENABLEtrue是否启用webview调试功能WEBVIEWENABLEtrue谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)CHROMEDRIVERPORT0是否开启sonicgomitmproxy代理功能SGMENABLEtruenetworkmode:hostprivileged:truevolumes:devbususb:devbususbvarrunusbmuxd:varrunusbmuxd3。创建并启动容器dockercomposeupd 查看日志会发现,sonicagentsonicagent1容器会自动检查相关依赖环境,并与sonicserver进行连接认证。 六、连接手机 需要在手机设置开发者选项中开启USB调试模式,个别手机如小米可能还需要勾选允许USB模拟点击。 手机通过USB数据线连接服务器后,会弹出是否允许计算机调试本台设备,勾选允许。此时可以通过adbdevices命令查看是否已成功连接:〔rootsonicsonicagent〕adbdevicesListofdevicesattached66J5T19614010786deviceGDB6R19813000723devicetkqkssgirgaipbljdevice 刷新sonic前台页面,即可看到已连接的手机 七、常见问题及解决办法1。sonicsonicservercontroller1容器一直处于重启状态 查看容器状态:dockerpsa 容器状态正常,但前端页面提示系统错误。此时需要检查controller容器日志,检查数据库是否连接成功、数据表是否成功:dockerlogsfsonicsonicservercontroller1 通过查看sonicsonicservercontroller1容器日志发现错误原因为mysql连接不上导致: 检查发现原来是系统开启了防火墙,防火墙未放开3307端口(前面创建的mysql容器的3306映射到本机的3307端口),开启防火墙3307端口即可,另外eureka的9090端口也要开放出来:firewallcmdpermanentaddport3307tcp添加3307端口firewallcmdpermanentaddport9090tcp添加9090端口firewallcmdreload重新加载防火墙配置firewallcmdlistall查看开放端口列表 重启运行dockercompose。ymldockercomposedowndockercomposeupd 此时数据库正常连接并创建相关数据表: 2。进入手机详情页面,一直处于准备图像中 查看防火墙状态,防火墙开放agent的7777端口。当然直接关闭防火墙服务也可以,不过这样会增加很多安全隐患。firewallcmdpermanentaddport7777tcp添加3307端口firewallcmdreload重新加载防火墙配置 再次刷新前台页面,重新进入手机即恢复正常: 小结 总体来说,部署过程比较简单,就是一堆的基础环境搭建及配置:JDK、ADB、Docker、MySQL。尤其需要注意防火墙端口问题,最简单粗暴的办法就是关闭防火墙。以及若部署在云服务器上,还需要在安全组中开放相关端口。比较难的地方在于出现问题后的问题排查,有时候一个问题会卡壳很久,这个时候需要学会查看日志来定位问题,不能只看容器状态,容器状态只是表象。