プロキシ配下の CentOS8 で puppeteer を動かす
ほぼプレーンな CentOS8 に node.js を入れるところから puppeteer が動くようになるまでを記録
nodejs のインストール
- AppStream リポジトリで提供されているので、簡単に入れられる。
dnf install -y @nodejs:12/common node -v #=> v12.18.2 npm -v #=> 6.14.5
参考:
npm のプロキシやレジストリを設定する
$ npm -g config set proxy http://<proxy>:<port>
$ npm -g config set https-proxy http://<proxy>:<port>
$ npm -g config set registry http://registry.npmjs.org/
$ npm config list
chromium install
puppeteer のインストールに依存している chromium のインストール元が google cloud storage で、FQDNだけでプロキシ申請通るか非常に不安\(^o^)/ https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/800071/chrome-linux.zip
ドメインを開けていく
途中で都度 squid の whitelist で開けていく。 squidのアクセスログで通信失敗しているドメインをダブルチェックしながら、が一番手堅い。以下は参考まで
ftp.riken.jp # コレじゃなくても良いんだけど dnf のミラーサイト
registry.npmjs.org # npm install 実行に必要
storage.googleapis.com # npm install puppeteer でインストールされる chromium はここにある…
puppeteer が動かない
CLI に出力される puppeteer/troubleshooting.md at main · puppeteer/puppeteer のページをじっくり見るのが良いのかも。
その中の cups-libs.x86_64 を見ると、
CentOS Dependencies に有るものを入れよう
alsa-lib.x86_64 atk.x86_64 cups-libs.x86_64 gtk3.x86_64 ipa-gothic-fonts libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXrandr.x86_64 libXScrnSaver.x86_64 libXtst.x86_64 pango.x86_64 xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-cyrillic xorg-x11-fonts-misc xorg-x11-fonts-Type1 xorg-x11-utils
さらにコレも必要らしい
After installing dependencies you need to update nss library using this command
yum update nss -y
しかし CentOS8 では
ipa-gothic-fonts
だけ標準で見つからなかった。日本語フォント必須とも思えなかったので一旦除外(結果、なしで目的は達成できた)dnf install -y alsa-lib.x86_64 atk.x86_64 cups-libs.x86_64 gtk3.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXrandr.x86_64 libXScrnSaver.x86_64 libXtst.x86_64 pango.x86_64 xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-cyrillic xorg-x11-fonts-misc xorg-x11-fonts-Type1 xorg-x11-utils
しかも nss は update 以前にインストールされていないのでインストールすることに:
yum update -y nss.x86_64
この状態で実行すると
error while loading shared libraries: libgbm.so.1
がでた (さっきは nss だったので進歩)dnf install mesa-libgbm.x86_64
puppeteer の proxy 指定
ありがたい記事 などが見つかりますが、 puppeteer.launch
する時に args
として渡す。
'use strict';
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({
args: [ '--proxy-server=127.0.0.1:9876' ]
});
const page = await browser.newPage();
await page.goto('https://google.com');
await browser.close();
})();
そしてついに…!
puppeteer 動いた!