プロキシ配下の CentOS8 で puppeteer を動かす

Page content

ほぼプレーンな 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 動いた!