selenium使っていろいろ自動化とかテストとか行ってると同じタイミングで同じブラウザを立ち上げてたり、ブラウザのバージョンアップで不具合が出たり、ローカルの環境と切り離したSelenium環境が欲しくなる。
ちょうどいい家鯖(NAS用途メイン)があるので、そこにSeleniumサーバーを構築させたい。
かといって動作を確認できないとそれも不便なので何かしらの方法で動作も見たい。
とここまで考えたときにとあるところで、ブラウザからSeleniumの動作を見ることができるシステムを見た。
いろいろ調べるとguacamoleというオープンソースがVNCなどのプロトコルをHTTPにフォワードできるらしい。
ということで以下から本題。
使うDockerイメージ
selenium
公式にてwebdriver+browser+vncserverをバンドルしたイメージがいくつか提供されている。
https://github.com/SeleniumHQ/docker-selenium
selenium/standalone-chrome
selenium/standalone-firefox
seleniumはこのへんから
(単体で動かしてvncクライアントから確認しても良し)
guacamole
これも公式から
https://guacamole.apache.org/doc/gug/guacamole-docker.html
guacamole/guacd
guacamole/guacamole
と、したいところなんですが最新のイメージだとクライアント認証が必須なのでdbイメージも必要となっています。
ある程度公開されるサービスなら当然必須になると思いますが、ローカルネットワークくらいなら認証なんか別にいらない、
と思ってたらnoauth
という拡張があったらしい。(1.0以降はなくなった)
https://guacamole.apache.org/doc/0.9.9/gug/noauth.html
こちらの場合はnoauthが使えるそのままのdockerイメージはないので、
https://guacamole.apache.org/releases/
noauthが使える0.9.14
を使う。
guacamole/guacd:0.9.14
guacamole/guacamole:0.9.14
(guacdの方もバージョン合わせる。)
guacamoleのDockerfile
ということでnoauthの拡張を入れたguacamoleイメージを作りましょう。
noauth-extension
拡張と設定ファイルをイメージにCOPYするので適当なフォルダを作成する。ここでは./guacamole
という名前にしよう。
https://guacamole.apache.org/releases/0.9.14/
のguacamole-auth-noauth-0.9.14.tar.gz
をダウンロード、解凍。
中身はjarファイルなので、上のフォルダの配下にextensions
というフォルダを作り、そこに入れる。
./guacamole/extensions/guacamole-auth-noauth-0.9.14.jar
↑という配置にする。
guacamole, noauth-config.xml
各seleniumのvncと接続する設定ファイルも必要なので、./guacamole
に配置。
./guacamole/noauth-config.xml
↑という状態。
内容は
<configs>
<config name="google chrome" protocol="vnc">
<param name="hostname" value="chrome" />
<param name="port" value="5900" />
<param name="password" value="secret" />
</config>
<config name="firefox" protocol="vnc">
<param name="hostname" value="firefox" />
<param name="port" value="5900" />
<param name="password" value="secret" />
</config>
</configs>
これでOK
Dockerfile
あとはguacamoleフォルダをベースイメージ内に入れて、そこにGUACAMOLE_HOME
を設定する。
FROM guacamole/guacamole:0.9.14
COPY guacamole /etc/guacamole
ENV GUACAMOLE_HOME /etc/guacamole
EXPOSE 8080
この8080ポートはWebアクセス用のポート、もし他で使われている場合は変更したりしましょう。
docker-compose
あとはdocker-composeで動かすだけ。
version: '3'
services:
guacd:
image: guacamole/guacd:0.9.14
restart: unless-stopped
guacamole:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "8080:8080"
links:
- guacd
environment:
GUACD_HOSTNAME: guacd
chrome:
image: selenium/standalone-chrome-debug
restart: unless-stopped
ports:
- "4444:4444"
firefox:
image: selenium/standalone-firefox-debug
restart: unless-stopped
ports:
- "4445:4444"
port
8080
→HTTP用
4444
→selenium-remote chrome用
4445
→selenium-remote firefox用
docker-compose up -d
で立ち上がったら、同じネットワーク上からのブラウザから
http://[ip or host]:8080/guacamole
でアクセス。
(ルートはtomcatのページが出ます。)
こんな感じで出ますね。
あとはどちらのブラウザか選んで、seleniumをremoteでつなげばブラウザが立ち上がる。
rubyでselenium-remote(chrome) : おまけ
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :remote, url: "http://[host or ip]:4444/wd/hub", desired_capabilities: :chrome
driver.get "https://www.google.com"
参考
参考にさせていただきました。ありがとうございます。
https://qiita.com/S_SenSq/items/758bbde01e801e2d1624