Skip to content

Commit

Permalink
selenium更换为selenoid
Browse files Browse the repository at this point in the history
  • Loading branch information
yangxg committed Sep 23, 2021
1 parent b6de505 commit 04fb408
Show file tree
Hide file tree
Showing 34 changed files with 1,413 additions and 896 deletions.
85 changes: 29 additions & 56 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,30 @@
# 安装说明

## 前置要求

docker-compose更新至最新版:
```bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
```

需要安装`docker-ce``docker-compose`
点击以下连接了解如何安装`docker``compose`

- [Debian](https://docs.docker.com/engine/install/debian/)
- [Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
- [CentOS](https://docs.docker.com/engine/install/centos/)
- [Fedora](https://docs.docker.com/engine/install/fedora/)
- [Red Hat Enterprise Linux](https://docs.docker.com/engine/install/rhel/)
- [SUSE Linux Enterprise Server](https://docs.docker.com/engine/install/sles/)

## 安装

1. 新建一个文件夹,用于存放相关数据
2. 下载仓库中的`docker-compose-allinone.yml`至本地,或是复制文件内容后在本地自行建立并粘贴内容
3. 使用docker-compose启动
4. 打开浏览器使用

```bash
# 新建数据文件夹
mkdir jd-qinglong
cd jd-qinglong
# 下载docker-compose.yml文件
wget -O docker-compose.yml https://raw.githubusercontent.com/rubyangxg/jd-qinglong/master/docker-compose-allinone.yml
# 下载配置文件模板
wget -O env.properties https://raw.githubusercontent.com/rubyangxg/jd-qinglong/master/env.template.properties
#确保env.properties和docker-compose.yml处于同级目录
#根据需要修改配置文件内容
# 启动 -d表示后台静默启动
sudo docker-compose up -d
sudo docker-compose logs -f
```
## 更新

请直接pull最新的docker镜像即可

```bash
#停止阿东应用
docker-compose --env-file env.properties stop webapp
docker rm webapp && sudo docker rmi -f rubyangxg/jd-qinglong:allinone
#此操作不要轻易执行
#sudo docker-compose --env-file env.properties down
#下载最新阿东镜像
docker pull rubyangxg/jd-qinglong:allinone
docker-compose restart
docker-compose up -d
安装教程:
1. 确保docker.sock存在(只要安装了docker一般都会有)
```
ls -alh /var/run/docker.sock
srw-rw---- 1 root root 0 Sep 21 19:46 /var/run/docker.sock
```
2. 下载chrome镜像(仅需执行一次,后续更新不用重新下载)
```
sudo docker pull selenoid/chrome:89.0
```
3. 下载rubyangxg/jd-qinglong镜像
```
sudo docker pull rubyangxg/jd-qinglong:1.1
```
4. 启动
```
sudo docker run -d -p 5701:8080 --name=webapp --privileged=true \
-e "SE_NODE_MAX_SESSIONS=8"
-v /var/run/docker.sock:/var/run/docker.sock \
-v /[你的路径]/env.properties:/env.properties:ro \
rubyangxg/jd-qinglong:1.1
```
例如:
```
sudo docker run -d -p 5701:8080 --name=webapp --privileged=true \
-e "SE_NODE_MAX_SESSIONS=8" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)"/env.properties:/env.properties:ro \
rubyangxg/jd-qinglong:1.1
```
30 changes: 0 additions & 30 deletions INSTALL2.md

This file was deleted.

1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
* **群晖**安装参考源码路径下的 **jd-qinglong-群晖安装教程.pdf**
* 编写好env.properties,然后`docker run -e "SE_NODE_MAX_SESSIONS=4" -p 5701:8080 --name=jd-qinglong -v "$(pwd)"/env.properties:/env.properties:ro rubyangxg/jd-qinglong:allinone`
* 安装教程: [INSTALL.md](INSTALL.md)
* 安装教程2: [INSTALL2.md](INSTALL2.md)
* 免费代挂及问题反馈移步: [TG交流群](https://t.me/joinchat/3JfrwNPoHFY2MGNl)

## 多谢
Expand Down
28 changes: 15 additions & 13 deletions docker-allinone/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
FROM selenium/standalone-chrome:4
ENV SE_NODE_SESSION_TIMEOUT=300
ENV SE_NODE_OVERRIDE_MAX_SESSIONS=true
ENV SE_NODE_MAX_SESSIONS=4
ENV START_XVFB=false
FROM adoptopenjdk/openjdk11:alpine

ENV TIME_ZONE=Asia/Shanghai
USER root

VOLUME /tmp
ARG JAR_FILE

COPY ${JAR_FILE} app.jar
COPY selenium.conf /etc/supervisor/conf.d/selenium.conf
COPY start-webapp.sh /opt/bin/start-webapp.sh
COPY sources.list /etc/apt/sources.list
COPY notify /opt/bin/notify
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone && \
COPY selenoid /usr/bin
COPY start-webapp.sh /opt/bin/start-webapp.sh
COPY config /etc/selenoid

RUN apk add -U ca-certificates tzdata mailcap supervisor curl && rm -Rf /var/cache/apk/* && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/shanghai" >> /etc/timezone && \
chmod 755 /opt/bin/start-webapp.sh && \
chmod 755 /opt/bin/notify
chmod 755 /opt/bin/notify && \
chmod 755 /usr/bin/selenoid

USER seluser
EXPOSE 8080 5900
EXPOSE 4444 8080
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
#JAVA_OPTS="-server -Xmx2g -Xms2g -Xss512k -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom "
#DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=n "
#ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar -Dserver.port=8080 app.jar"]
16 changes: 16 additions & 0 deletions docker-allinone/config/browsers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"chrome": {
"default": "89.0",
"versions": {
"89.0": {
"image": "selenoid/chrome:89.0",
"enableVNC": true,
"port": "4444",
"path": "/",
"limit": 100,
"privileged": true,
"env" : ["LANG=en_US.UTF-8", "LANGUAGE=us:en", "LC_ALL=en_US.UTF-8", "limit=10"]
}
}
}
}
70 changes: 39 additions & 31 deletions docker-allinone/deploy-to-dockerhub.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash

set -e
detect_macos() {
[[ $(uname -s) == Darwin ]] && is_macos=1 || is_macos=0
}
Expand All @@ -20,29 +20,32 @@ else
echo "本地构建"
fi

rm -rf qinglong && mkdir qinglong
rm -rf notify
git clone -b master --depth=1 https://github.com/whyour/qinglong.git
cd qinglong/sample || exit
if [ ! -f "$HOME/notify" ];then
rm -rf qinglong && mkdir qinglong
rm -rf notify
git clone -b master --depth=1 https://github.com/whyour/qinglong.git
cd qinglong/sample || exit

if [[ $is_macos == 1 ]]; then
sed -i '' 's/https:\/\/github.com\/whyour\/qinglong/https:\/\/github.com\/rubyangxg\/jd-qinglong/' notify.js
else
sed -i 's/https:\/\/github.com\/whyour\/qinglong/https:\/\/github.com\/rubyangxg\/jd-qinglong/' notify.js
fi
if [[ $is_macos == 1 ]]; then
sed -i '' 's/https:\/\/github.com\/whyour\/qinglong/https:\/\/github.com\/rubyangxg\/jd-qinglong/' notify.js
else
sed -i 's/https:\/\/github.com\/whyour\/qinglong/https:\/\/github.com\/rubyangxg\/jd-qinglong/' notify.js
fi

npm install
cd ../shell || exit
if [[ $is_macos == 1 ]]; then
sed -i '' 's/\/ql\/scripts\/sendNotify.js/..\/sample\/notify.js/' notify.js
npm install
cd ../shell || exit
if [[ $is_macos == 1 ]]; then
sed -i '' 's/\/ql\/scripts\/sendNotify.js/..\/sample\/notify.js/' notify.js
else
sed -i 's/\/ql\/scripts\/sendNotify.js/..\/sample\/notify.js/' notify.js
fi

pkg -t node16-linux-x64 notify.js
cp notify $HOME/notify
else
sed -i 's/\/ql\/scripts\/sendNotify.js/..\/sample\/notify.js/' notify.js
echo "notify已存在"
fi

pkg notify.js
cp notify-linux $HOME/notify
#cp notify-macos $HOME/notify-macos

cd $HOME || exit
rm -rf .npm
rm -rf .pkg-cache
Expand All @@ -52,23 +55,28 @@ docker rm -f webapp
docker rmi -f rubyangxg/jd-qinglong:allinone
docker rmi -f rubyangxg/jd-qinglong:latest

cd ..
git pull --allow-unrelated-histories
mvn clean package -Dmaven.test.skip=true
cp target/jd-qinglong-*.jar docker-allinone
cd docker-allinone || exit
docker build -t rubyangxg/jd-qinglong:allinone -t rubyangxg/jd-qinglong:latest --build-arg JAR_FILE=jd-qinglong-1.0.jar .
#docker build -t rubyangxg/jd-qinglong:1.0 --build-arg JAR_FILE=jd-qinglong-1.0.jar .


if [ ! -f "$HOME/jd-qinglong-1.0.jar" ];then
cd ..
git pull
mvn clean package -Dmaven.test.skip=true
cp target/jd-qinglong-*.jar docker-allinone
cd docker-allinone || exit
else
echo "jd-qinglong-1.0.jar已存在"
fi

docker build -t rubyangxg/jd-qinglong:latest --build-arg JAR_FILE=jd-qinglong-1.0.jar .
#docker build -t rubyangxg/jd-qinglong:1.1 --build-arg JAR_FILE=jd-qinglong-1.0.jar .
if [[ $op == 'push' ]]; then
docker push rubyangxg/jd-qinglong:latest
docker push rubyangxg/jd-qinglong:allinone
# docker push rubyangxg/jd-qinglong:1.0
# docker push rubyangxg/jd-qinglong:1.1
fi

rm -rf $HOME/.docker
cd ..
#docker stop webapp && docker rm webapp
docker run -d -p 5701:8080 --name=webapp -e "mockCookie=1" -v "$(pwd)"/env.properties:/env.properties:ro rubyangxg/jd-qinglong
docker stop webapp && docker rm webapp
docker run -d -p 5701:8080 --name=webapp --privileged=true -e "SE_NODE_MAX_SESSIONS=8" -v /var/run/docker.sock:/var/run/docker.sock -v "$(pwd)"/env.properties:/env.properties:ro rubyangxg/jd-qinglong:1.1

#mvn clean package -Dmaven.test.skip=true && docker-compose -f docker-compose-debug.yml --env-file=env.properties build --no-cache webapp
#docker-compose -f docker-compose-debug.yml --env-file=env.properties up -d --no-deps && docker logs -f webapp
Binary file added docker-allinone/selenoid
Binary file not shown.
5 changes: 0 additions & 5 deletions docker-allinone/sources.list

This file was deleted.

19 changes: 9 additions & 10 deletions docker-allinone/start-webapp.sh
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
#!/usr/bin/env bash
#!/bin/sh
# wait-for-grid.sh
set -e
cmd="$@"
while ! curl -sSL "http://localhost:4444/wd/hub/status" 2>&1 \
| jq -r '.value.ready' 2>&1 | grep "true" >/dev/null; do
echo 'Waiting for the Grid'
sleep 1
url="http://localhost:4444/status"
code=`curl -I -m 30 -o /dev/null -s -w %{http_code}"\n" $url` #第一次访问,访问成功则不进入下面while循环
while [ $code -ne 200 ]
do
sleep 1s
code=`curl -I -m 30 -o /dev/null -s -w %{http_code}"\n" $url`
done
>&2 echo "Selenium Grid is up - executing tests"
exec $cmd

#while循环访问url,直到状态码为200跳出循环
echo "开始启动webapp"
java -Djava.security.egd=file:/dev/./urandom -jar -Dserver.port=8080 /app.jar
26 changes: 26 additions & 0 deletions docker-allinone/supervisord.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[supervisord]
nodaemon=true

[program:webapp] # 你的程序名,随便命名
command=/opt/bin/start-webapp.sh
autostart=true # 自动启动
autorestart=false
startsecs=0
startretries=0

;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs"
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

[program:selenoid] # 你的程序名,随便命名
command=/usr/bin/selenoid -listen :4444 -conf /etc/selenoid/browsers.json -limit 100 -container-network bridge
autostart=true # 自动启动
autorestart=false
startsecs=0
startretries=0

;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs"
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Loading

0 comments on commit 04fb408

Please sign in to comment.