お世話になっております。
RHEL9系のホストマシン上にdocker環境を構築し、playwrightを使ったWebクロールを実現するためにdocker版FESSをインストールし稼働させております。
しかし、実際に下記サイトで紹介されているテストページをクロールしたところ以下のようなエラーが出力されます。
簡単導入! OSS全文検索サーバFess入門(50) JavaScriptで生成されるページのクロール | TECH+(テックプラス)
org.codelibs.fess.crawler.exception.CrawlerSystemException
- Failed to create PlaywrightClient
- Failed to install browsers, exit code 1
他の方の質問で「社内環境で、FESS起動時にプロキシ設定をすれば解決した」という旨のやり取りを拝見しましたが、現在使用している環境にはプロキシが無く外部通信も支障なく行える認識です。
そこで、playwrightのインストール手順を見てみたところ、system requirementsの欄に「 * Debian 12, Ubuntu 22.04, Ubuntu 24.04, on x86-64 and arm64 architecture.」とありました。
しかし、実際にFESS公式インストール手順に沿ってセットアップしたdocker版FESSコンテナのバージョンは「NAME=“Ubuntu”、VERSION=“20.04.6 LTS (Focal Fossa)”」となっておりました。
以上を踏まえて、以下の点ご教授いただけないでしょうか。
①docker版FESSがplaywrightのシステム要件より古いバージョンのubuntu環境であることは、本件の原因と考えられないのでしょうか?
②基本、公開されているcompse.yamlファイルやDockerfileをそのままコピペし、掲載コマンドを実行すればユーザの追加作業(コンテナでコマンドを叩く、追加のパッケージをインストールするなど)無しに正常動作するものと認識しておりますが、本件を解決するために手動で実施すべきコマンドや措置があればご教授いただけないでしょうか。
Windows等、Dockerが使える環境であれば何でも良いですが、試されている手順で同じ問題が発生しているでしょうか?
ご返信ありがとうございます。
>>試されている手順で同じ問題が発生しているでしょうか?
はい、その認識です。
お忙しいところ恐縮ですが、ウェブスクレイピング中に解決できない2つの問題に直面しています。
- 一部のURLはリダイレクトが発生しており、そのままではコンテンツを取得できません。リダイレクト後のURLを使用することで正常にコンテンツを取得できます。
- 対象のウェブサイトはページが完全にロードされた後、特定のボタンをクリックし、再度ロードが完了してから必要なコンテンツが表示されます(この過程でURLは変化しません)。
これらの問題を解決するにはどのようにすれば良いでしょうか。アドバイスをいただけると幸いです。
最新版の14.18および14.17のdocker版FESS(compose.yaml+compose-opensearch2.yaml、そしてplaywrightディレクトリ内にDockerfile)で環境構築し、playwrightを使用したWebクロールを試しましたが、同様に以下の「 java.lang.RuntimeException: Failed to install browsers, exit code: 1」のエラーが出力されました。
1つ懸念している点として、この環境はOpenStack上のVM(Rocky9.5)に構築したdocker環境内で動かしていることです。
AWS環境や物理サーバ上にdocker版FESSを構築した際はこのようなエラーは出力されませんでした。
上記のエラーの解決策として、「DNS設定の不備」「プロキシ設定の不備」によるものがネット上では見られましたが、DNS設定は問題が無いことを確認しており、プロキシはそもそも存在しないためどのようにすれば「Failed to install browsers」のエラーを解決できるのか、困っている状況です。ご助言等頂けると幸いです。
org.codelibs.fess.crawler.exception.CrawlerSystemException: Failed to create PlaywrightClient.
at org.codelibs.fess.crawler.client.http.PlaywrightClient.createPlaywrightWorker(PlaywrightClient.java:165)
at org.codelibs.fess.crawler.client.http.PlaywrightClient.init(PlaywrightClient.java:142)
at org.codelibs.fess.crawler.client.http.PlaywrightClient.execute(PlaywrightClient.java:264)
at org.codelibs.fess.crawler.CrawlerThread.run(CrawlerThread.java:154)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: Failed to create driver
at com.microsoft.playwright.impl.driver.Driver.createAndInstall(Driver.java:105)
at com.microsoft.playwright.impl.driver.Driver.ensureDriverInstalled(Driver.java:57)
at com.microsoft.playwright.impl.PlaywrightImpl.createImpl(PlaywrightImpl.java:46)
at com.microsoft.playwright.impl.PlaywrightImpl.create(PlaywrightImpl.java:36)
at com.microsoft.playwright.Playwright.create(Playwright.java:110)
at org.codelibs.fess.crawler.client.http.PlaywrightClient.createPlaywrightWorker(PlaywrightClient.java:156)
… 4 more
Caused by: java.lang.RuntimeException: Failed to install browsers, exit code: 1
at com.microsoft.playwright.impl.driver.jar.DriverJar.installBrowsers(DriverJar.java:99)
at com.microsoft.playwright.impl.driver.jar.DriverJar.initialize(DriverJar.java:68)
at com.microsoft.playwright.impl.driver.Driver.initialize(Driver.java:64)
at com.microsoft.playwright.impl.driver.Driver.createAndInstall(Driver.java:101)
… 9 more
その環境のDockerコンテナ内で、何らかの原因でアクセスできない状態になっているのだと思うので、docker execとかして、コンテナ内に入って確認してみたりすれば良いと思います。
度々失礼いたします。
初歩的なことをお伺いしていたら恐縮ですが、docker composeで構築したfessコンテナは、Javaベースのplaywrightがインストールされているという認識でよろしいでしょうか。
fessのクロールログで「ブラウザのインストールに失敗した」とあったので、直接コンテナ内に入って、mvnコマンドで手動インストールが出来ないものかと思った次第です。
ただ、私自身Javaの経験が基礎レベルしかないため、変にいじって違うところでエラーを引き起こしてしまう気もしてしまうのですが、、、
docker compose buildでは、ここのimageでなく、build指定に変えることで、Playwrightが必要とする依存ライブラリを入れています。そして、docker compose upで、起動した後に初回のクロール時など、Playwrightの実行される際の初期化時にPlaywrightが必要とするブラウザのインストールで失敗しているように見えます。
今回、必要な知識は、Javaでなく、Dockerの知識だと思いますが、その環境のDockerの設定とかで、コンテナ内の環境で外部への通信がうまくいっていないとか、のようにもみえます。たとえば、
docker run -it -e RUN_SHELL=true ghcr.io/codelibs/fess:14.18.0
とかして、通信とかがどうなっているのか確認するとかでも良いと思います。