概要
- dokkuでpuppeteerを動かしたい。
- ローカルでは動くが、本番サーバーではエラーが出て動作しない。
- 詰んで数日2~3日も無駄にしてしまった。後続者のためにメモ。
#エラー内容
2019-03-08T17:17:35.658980463Z app[web.1]: Error: Failed to launch chrome!
2019-03-08T17:17:35.658991689Z app[web.1]: /app/node_modules/puppeteer/.local-chromium/linux-624492/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory
2019-03-08T17:17:35.658994915Z app[web.1]:
2019-03-08T17:17:35.658997085Z app[web.1]:
2019-03-08T17:17:35.658999215Z app[web.1]: TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
2019-03-08T17:17:35.659001950Z app[web.1]:
2019-03-08T17:17:35.659004031Z app[web.1]: at onClose (/app/node_modules/puppeteer/lib/Launcher.js:360:14)
2019-03-08T17:17:35.659006156Z app[web.1]: at Interface.helper.addEventListener (/app/node_modules/puppeteer/lib/Launcher.js:349:50)
2019-03-08T17:17:35.659014821Z app[web.1]: at Interface.emit (events.js:194:15)
2019-03-08T17:17:35.659017113Z app[web.1]: at Interface.close (readline.js:397:8)
2019-03-08T17:17:35.659019221Z app[web.1]: at Socket.onend (readline.js:173:10)
2019-03-08T17:17:35.659021409Z app[web.1]: at Socket.emit (events.js:194:15)
2019-03-08T17:17:35.659023631Z app[web.1]: at endReadableNT (_stream_readable.js:1107:12)
2019-03-08T17:17:35.659026145Z app[web.1]: at process.internalTickCallback (internal/process/next_tick.js:72:19)
#動作環境
- Ubuntu 16.04
- Dokku 0.14.5
- Puppeteer 1.13.0
#原因
- puppeteerに必要なChromeヘッドレスは、デフォルトの状態のDokkuでは機能しない。
- インストールする必要があるが、その方法がわからなくて2~3日詰んでいた
解決策
dokku-aptプラグインで必要なパッケージをインストールする
- 【前提】dokkuインストール、gitのリモートリポジトリの追加は済ませた状態
- dokku-aptのインストール(SSH接続した状態)を実行
//dokku version0.4.0以上の場合(たいていはこっち)
sudo dokku plugin:install https://github.com/F4-Group/dokku-apt
//dokku version0.4.0未満の場合
git clone https://github.com/F4-Group/dokku-apt -b 0.3.0 /var/lib/dokku/plugins/dokku-apt
dokku plugins-install
- 開発中のプロジェクトのルートフォルダに
apt-packages
(拡張子なし)を作成- ↑勘違いして、サーバー上の
home/dokku/<app_name>
に配置してしまっていて詰んでた👊💢
- ↑勘違いして、サーバー上の
- ファイルの内容は以下の通り
- 改行区切りでインストールしたいパッケージを記述
- 公式サイトからUbuntuで動かすためのパッケージ一覧をコピペしただけなので不要なのもあるかも
gconf-service
libasound2
libatk1.0-0
libatk-bridge2.0-0
libc6
libcairo2
libcups2
libdbus-1-3
libexpat1
libfontconfig1
libgcc1
libgconf-2-4
libgdk-pixbuf2.0-0
libglib2.0-0
libgtk-3-0
libnspr4
libpango-1.0-0
libpangocairo-1.0-0
libstdc++6
libx11-6
libx11-xcb1
libxcb1
libxcomposite1
libxcursor1
libxdamage1
libxext6
libxfixes3
libxi6
libxrandr2
libxrender1
libxss1
libxtst6
ca-certificates
fonts-liberation
libappindicator1
libnss3
lsb-release
xdg-utils
wget
-
git add .
→git commit -m"add apt-packages
→git push dokku master
などでpush - dokkuがデプロイするときに自動的に
apt-packages
の内容をインストールしてくれる
参考
- An example app with Node.js, Express.js, Puppeteer and Chrome Headless
- Inject deb packages into dokku based on files in project