F2etest-web 的 Docker 化之路(Linux 篇)

前言

F2etest 是一个面向前端、测试、产品等岗位的多浏览器兼容性测试整体解决方案,优势是:

  • 10 倍以上硬件利用率,降低企业运营成本;
  • 提供非常棒的桌面用户体验,极大的提高测试效率;
  • 浏览器云提供真实浏览器环境,还原真实测试场景;
  • WebDriver 云快速稳定的支撑自动化测试脚本运行。

现状

仓库地址:https://github.com/alibaba/f2etest

  1. 用户需自行搭建 F2etest,没有线上的云测平台供用户直接使用;
  2. 平台搭建成本非常大,耗时耗力,需要同时了解 Windows 运维和 Linux 运维;
  3. 安装手册无法满足用户实际的需求。

系统架构

architecture.png

详细系统架构及实现原理请参考《F2etest 系统架构及实现原理》

方案

旨在降低用户搭建成本,期望用户可以在 1 个小时内完成 F2etest 最小版本的搭建。

目前采用的方案是:

  1. Linux 上各个服务通过 Docker 打在一个镜像里,用户通过拉取镜像直接部署。
  2. Windows 的基础配置做成一个镜像,阿里云用户可以通过镜像市场获取(进行中)。
  3. 用户根据自己机器的实际网络情况,修改对应的 IP 地址则可以直接体验最小版本的 F2etest。

Linux Docker 化

完整版 Dockerfile 源文件:https://github.com/alibaba/f2etest/blob/master/Dockerfile

Guacamole Server

C 应用,我们习惯叫它 guacd,用于与 Windows Server 进行通信,RDP 协议。

FROM centos

### Guacamole Server ###
# 更多详细安装信息可参考 Guacamole 官方 <https://guacamole.apache.org/doc/gug/installing-guacamole.html>
# 拷贝定制过的 guacamole-server 并解压
ADD f2etest-guacamole/guacamole-server-0.9.3.tar.gz /home/guacdshare

WORKDIR /home/guacdshare

# 安装需要使用到的依赖包
RUN yum install -y wget gcc initscripts sudo lsof automake autoconf libtool make \
  # 安装 `guacd` 依赖
  cairo-devel libpng-devel uuid-devel freerdp* libvncserver-devel openssl-devel \
  # 编译前创建 `freerdp` 的软连接
  && ln -s /usr/local/lib/freerdp/guacsnd.so /usr/lib64/freerdp/ \
  && ln -s /usr/local/lib/freerdp/guacdr.so /usr/lib64/freerdp/

WORKDIR /home/guacdshare/guacamole-server-0.9.3

# 运行配置脚本并将 `guacd` 添加到 `/etc/init.d` 目录
RUN ./configure --with-init-dir=/etc/init.d \
  # 编译
  && make \
  # 安装构建的组件
  && make install \
  # 更新已安装库的缓存
  && ldconfig \
  # 设置运行时自动启动
  && chkconfig --add guacd \
  && chkconfig guacd on 

Guacamole Client

Tomcat 应用,我们习惯叫它 guacamole,主要与 guacamole server 进行通信,HTTP 协议。

WORKDIR /root

## JAVA ##
# 下载 JDK 1.8
RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz" \
  && mkdir /usr/java

WORKDIR /usr/java

# 拷贝并解压 JDK
RUN cp /root/jdk-8u141-linux-x64.tar.gz ./ \
  && tar xzf jdk-8u141-linux-x64.tar.gz

# 设置 JAVA 运行环境
ENV JAVA_HOME /usr/java/jdk1.8.0_141
ENV PATH $JAVA_HOME/bin;$PATH
ENV CLASSPATH .:$JAVA_HOME/lib

## TOMCAT ##
WORKDIR /usr/local

# 下载并解压 Tomcat
RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz \
  && tar -xzvf apache-tomcat-8.5.38.tar.gz \
  && mv apache-tomcat-8.5.38 tomcat8

# 拷贝定制过的 WAR 包
COPY f2etest-guacamole/guacamole-0.9.3.war /usr/local/tomcat8/webapps/guacamole.war

# 拷贝 guacamole 配置文件和免登配置文件
COPY f2etest-docker/guacamole.properties /etc/guacamole/
COPY f2etest-docker/noauth-config.xml /etc/guacamole/

# 拷贝 Tomcat 服务脚本到 `/etc/init.d` 目录
COPY f2etest-docker/tomcat8 /etc/init.d/

WORKDIR /etc/init.d

# 增加 Tomcat 服务让其运行时自动启动
RUN chmod 755 tomcat8 \
  && chkconfig --add tomcat8 \
  && chkconfig --level 234 tomcat8 on \
  && mkdir /root/.guacamole \
  && ln -s /etc/guacamole/guacamole.properties /root/.guacamole

F2etest-web

Node 应用,用户操作的入口站点,可访问指定版本的浏览器。

## Node Env ##
WORKDIR /usr/local

# 下载 node v10 并解压
RUN wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz \
  && xz -d node-v10.15.1-linux-x64.tar.xz \
  && tar -xf node-v10.15.1-linux-x64.tar \
  && mv node-v10.15.1-linux-x64 node \
  # 给 `node`, `npm` 命令创建软连接
  && ln -s /usr/local/node/bin/node /usr/bin/node \
  && ln -s /usr/local/node/bin/npm /usr/bin/npm \
  # 安装 pm2 [node 应用进程管理器]
  && npm i -g pm2 \
  # 给 `pm2` 命令创建软连接
  && ln -s /usr/local/node/bin/pm2 /usr/bin/pm2

## MySQL ##
# 下载安装 MySQL
RUN wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm \
  && yum localinstall -y mysql-community-release-el7-5.noarch.rpm \
  && yum install -y mysql-community-server

## Nginx ##
# 拷贝 nginx 源配置
COPY f2etest-docker/nginx.repo /etc/yum.repos.d/

# yum 安装 nginx
RUN yum-config-manager --enable nginx-mainline \
  && yum install -y nginx

COPY f2etest-docker/nginx.conf /etc/nginx/

# 拷贝 Web 应用程序
COPY f2etest-web /home/f2etest-web
WORKDIR /home/f2etest-web/
# 安装 node 依赖包
RUN npm i


# 拷贝初始化脚本(初始化数据库表、`pm2` 启动 Web、启动 Nginx)
COPY f2etest-docker/setup.sh ./

EXPOSE 80

# 指定容器启动程序(以防出现权限不足情况)
ENTRYPOINT ["/usr/sbin/init"]

部署指南

# 获取 `f2etest-web` 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/f2etest/f2etest-web

# 启动容器
# 映射本地端口,这里已 80 为例,请确保此端口未被占用
# 如果 80 被占用,请修改为其它可用端口,例如 8080 端口:-p 8080:80
docker run -dit --privileged -p 80:80 --name f2etest registry.cn-hangzhou.aliyuncs.com/f2etest/f2etest-web

详细部署指南请参考《F2etest-web 部署》

联系

如果你对 F2etest 有任何意见建议,欢迎勾搭。答疑请入群咨询:

猜你喜欢

转载自yq.aliyun.com/articles/701486