通过docker的方式搭建OpenSTF避免了手动安装时需要处理的繁多依赖关系!

一.这里需要记录下我部署时的疑惑点
①ifconfig command not found

检查yum是否安装
输入命令:ip addr,观察是否分配了IP地址(下图为未分配的情况,需要修改网卡自启动)

检查配置/etc/resolv.conf是否配置,未配置则按如下方式配置:
search localdomain
nameserver 8.8.8.8

#######
nameserver 114.114.114.114(这是国内的dns服务器系统,还是比较好用的。谷歌的可以使用8.8.8.8)
检查配置/etc/sysconfig/network-scripts/ifcfg-ens33,并修改网卡自启动
ONBOOT=yes
输入命令:yum install net-tools
②docker部署完成后,容器的启动顺序一定要是最后启动stf

③部署完毕,stf、adbd、rethinkdb都已启动,但是管理界面显示设备为准备中?

服务器端使用命令:docker logs stf 查看stf日志


这里需要将手机中的STFService.apk重新安装,即可
二.环境部署
1.docker安装---安装软件包

 

2.docker安装---设置稳定的仓库

 

3.docker安装---列出并排序存储库中可用的docker版本

 

4.docker安装---通过其完整的软件包名称安装特定版本

 

5.docker安装---启动docker

 

6.docker安装---验证是否正确安装了docker

 

7.docker安装---查看当前docker的版本信息

 

9.拉取openstf镜像

 

10.拉取adb镜像

 

11.拉取ambassador镜像

 

12.拉取rethinkdb数据库镜像

 

13.拉取nginx镜像

 

14.查看所有镜像

 

15.启动数据库

docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090


16.启动adb service

docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb/ --net host sorccu/adb:latest


17.启动stf

docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.163.129


18.查看已启动的容器

 

19.查看所有容器

 

20.查看防火墙状态

 

21.临时关闭防火墙,reboot后失效

 

22.临时打开防火墙,reboot后失效

 

23.永久关闭防火墙,reboot后生效

 

24.永久开启防火墙,reboot后生效

 

25.docker中删除镜像

 

26.浏览器登录http://192.168.163.129:7100/auth/mock/进入管理登录界面

 

27.登录任意用户名进入管理界面

 

三.将上面环境部署整合成了脚本
1.deploystf.sh:一件部署openstf

#!/bin/bash

#IP
IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print$2}' | awk -F "/" '{print $1}'`
echo $IP

#docker安装-安装软件包
yum install -y yum-utils device-mapper-persistent-data lvm2

#docker安装-设置稳定的仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#docker安装---列出并排序存储库中可用的docker版本
yum list docker-ce --showduplicates | sort -r

#docker安装---通过其完整的软件包名称安装特定版本
echo "Please enter the version number of docker(e.g. 19.03.5):"
read version
echo "准备安装docker.........."
yum install docker-ce-$version docker-ce-cli-$version containerd.io
echo "docker安装完毕.........."

#docker安装---查看当前docker的版本信息
echo "---------- docker versionInfo ----------"
docker version
echo "----------//dockerversionInfo ----------"

#docker安装---启动docker
systemctl start docker
echo "docker已启动.........."

#拉取openstf镜像
echo "拉取openstf镜像......"
docker pull openstf/stf:latest

#拉取adb镜像
echo "拉取adb镜像......."
docker pull sorccu/adb:latest

#拉取ambassador镜像
echo "拉取ambassador镜像......."
docker pull openstf/ambassador:latest

#拉取rethinkdb数据库镜像
echo "拉取rethinkdb数据库镜像......."
docker pull rethinkdb:latest

#拉取nginx镜像
echo "拉取nginx镜像........"
docker pull nginx:latest

#启动数据库
echo "正在启动数据库......"
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
echo "数据库启动完成......."

#启动adb service
echo "正在启动adb......."
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb/ --net host sorccu/adb:latest
echo "adb启动完成......."

#启动stf
echo "正在启动stf......."
docker run -d --name stf --net host openstf/stf stf local --public-ip $IP
echo "stf启动完成......."
2.startstf.sh:快速启动脚本

#!/bin/bash

echo "`docker start adbd`已启动......."

echo "`docker start rethinkdb`已启动......."

echo "`docker start stf`已启动......."

# 展示已启动的容器
docker ps
3.虚拟机的端口映射

①由于目前是在虚拟机中搭建的环境,必须允许局域网其它设备连入

②虚拟机->编辑->虚拟机网络编辑

③NAT模式->NAT设置

 

④点击添加即可添加端口映射

***这里只需将宿主机7100端口映射入虚拟机7100端口即可

⑤其它局域网设备可以通过地址:http://宿主机地址:7100/auth/mock/进入管理登录界面

 

在Centos和Docker上安装STF 遇到的若干问题总结

1. 概述
刚开始接触 STF 是看了testhome上思寒讲的关于Appium的一些教程,知道了远程管理设备这回事,自己也在使用Appium框架做App自动化测试,已经通过集成到了jenkins服务器上,由于服务器不在不在自己工位上,每次查看手机状态或者想看下运行情况,就要跑到服务器所在的位置查看,很是麻烦,于是自己想着也搭建一台STF服务器,远程管理设备。网上这方面的教程很多,也有关于各种坑的解决办法,总体安装下来没有想象的那么复杂,但也卡在了不少小问题上,特别是防火墙和权限的问题。建议刚接触STF 的同学先从安装,能够正常使用起来开始,然后慢慢拓展,比如二次改造,制作Docker镜像。

2. 直接在Centos中安装STF环境
2.1 安装篇
网上很多此类的安装文档,可参考以下几篇,很是详细
centos7下stf安装介绍(一)—-环境搭建
Centos 搭建STF
SDK环境配置1
SDK环境配置2

2.2 遇到的问题
安装完成后,远程不能访问
关闭 Centos 防火墙

可远程访问STF,登录可显示连接的设备。但点进去设备却不能显示界面,如下图:

 

Centos 防火墙未关闭引起的,不止是7100,还有其他许多端口和外界访问。建议关闭centos防火墙。

3. 使用Docker镜像安装
3.1 安装步骤
在centos上安装Docker,很简单,直接 yum install docker 即可
开启docker服务
在centos中开启服务可以使用systemctl start serviceName.service,比如开启docker,systemctl start docker.service
拉取docker镜像文件
使用docker安装 STF 很简单,只需拉取以下5个镜像即可:
docker pull openstf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
docker pull openstf/ambassador:latest
docker pull nginx:latest
启动容器
先启动一个数据库
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
1
再启动adb service

docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest
1
再启动stf

docker run -d --name stf --net host openstf/stf stf local --public-ip 宿主机IP地址
1
一定要注意启动顺序,STF 依赖 rethinkdb,所以要先启动 rethinkdb,启动完成后使用: docker ps -a 查看是否启动成功


3.2 遇到的问题
如果未成功启动,可能是权限问题,加 –privileged=true 即可。
启动 rethinkdb

docker run -d --name rethinkdb --privileged=true -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 2048 --http-port 8090
1
启动STF

docker run -d provider --name stf --privileged=true --net host openstf/stf stf local --public-ip 192.168.116.128
1
4. 连接未安装STF 的电脑上的设备
首先保证其他电脑可以和安装STF 的系统通信,在未安装STF 的电脑上暴露adb端口,建议采用默认端口:5037,

adb -a -P 5037 fork-server server
1

如果出现以下错误:


在任务管理器中关掉adb.exe,重新运行上述命令。
如果出现下面报错,建议换成低版本adb

reply fd for adb server to client communication not specified.
1
或者使用命令:adb nodaemon server -a

在docker中删除原来的stf镜像,重新运行(15.2.23.38 是宿主机IP,5037 是宿主机暴露的adb端口):

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 15.2.23.203 --adb-host 15.2.23.38 --adb-port 5037 --allow-remote
1
更详细教程可参考:stf使用经验--在windows平台连接Mac上stf的过程

5. 备注:过程中可能用到的一些命令以及可能遇到的问题
1 docker start 容器名 启动某个容器
2 docker stop 容器名 停止某个容器
3 docker rm 容器名 删除某个容器
4 sudo ufw status 查看ubuntu的防火墙状态
5 过程中可能会无法ping虚拟机,改成桥接。同时关闭掉机器的防火墙(这个看自己,或者自己加规则,准许哪些IP访问)。
还不可以的话,配置一个跟主机相同IP段的IP地址
一般都能解决。。。
————————————————