システム開発 - spatie/browsershotの設定の覚書

 

このライブラリは、Webページを画像又はPDFに変換します。
背後では、ヘッドレスのGoogle Chromeを扱うPuppeteerを使用しています。

Puppeteerは、JSから実行しますが、BrowsershotをインストールすることによりPHPからヘッドレスChromeを制御することができるようになります。

ここでいくつかはまったので覚書として残しておきます。

用件

下記がインストールされている必要があります。

  • Puppeteer ・・・ ChromeまたはChrominiumを制御するNodeライブラリ
  • Node7.6.x以降

設定環境

  • AWS EC2
  • Laravel 6.x
  • nvmを使用してnpmをインストール
    ※ここに今回の問題の原因があったのかも…

インストール

細かい説明は割愛します。

npm install puppeteer
composer require spatie/browsershot

使用法

下記のように簡単な記述で使用できるはずですが。。。

use Spatie\Browsershot\Browsershot;

// スクリーンショット
Browsershot::url('https://example.com')->save($pathToImage);

// PDF作成
Browsershot::url('https://example.com')->save('example.pdf');

最初のエラー

まずは下記を実行

Browsershot::url('http://www.yahoo.co.jp')->save('./test.pdf');

すると

The command "PATH=$PATH:/usr/local/bin NODE_PATH=`npm root -g` node '/var/www/vendor/spatie/browsershot/src/../bin/browser.js' '{"url":"http:\/\/www.yahoo.co.jp","action":"pdf","options":{"path":"\./test.pdf","args":[],"viewport":{"width":800,"height":600}}}'" failed.

Exit Code: 127(Command not found)

Working directory: /var/www/html

Output:
================


Error Output:
================
sh: npm: command not found
sh: node: command not found

上記から「npm」と「node」のコマンドが見つからないらしい。。。

色々調べたら下記の3つの方法でnodeのパスが確認できるということが分かったが、どれが本当なのか?

$ npm root -g
/home/ec2-user/.nvm/versions/node/v10.23.2/lib/node_modules

$ npm bin -g
/home/ec2-user/.nvm/versions/node/v10.23.2/bin

$ node
> global.module.paths
[ '/home/ec2-user/.npm/_logs/repl/node_modules',
  '/home/ec2-user/.npm/_logs/node_modules',
  '/home/ec2-user/.npm/node_modules',
  '/home/ec2-user/node_modules',
  '/home/node_modules',
  '/node_modules',
  '/home/ec2-user/.node_modules',
  '/home/ec2-user/.node_libraries',
  '/home/ec2-user/.nvm/versions/node/v10.23.2/lib/node' ]

様々確かめた結果、下記のような設定になった。

Browsershot::url('http://www.yahoo.co.jp')
                   ->setNodeBinary('/home/ec2-user/.nvm/versions/node/v10.23.2/bin/node')
                   ->save('./test.pdf');

そして実行したところ次のエラーが出た

2回目のエラー

local.ERROR: The command "PATH=/var/www/ NODE_PATH='/var/www/node_modules' /home/ec2-user/.nvm/versions/node/v10.23.2/bin/node '/var/www/app/Libs/browser.js' '{"url":"https:\/\/www.google.com\/?hl=ja","action":"pdf","options":{"path":"\/var\/www\/html\/test.pdf","args":["--no-sandbox","--disable-web-security"],"viewport":{"width":800,"height":600}}}'" failed.

Exit Code: 126(Invoked command cannot execute)

Working directory: /var/www/html

Output:
================


Error Output:
================
sh: /home/ec2-user/.nvm/versions/node/v10.23.2/bin/node: Permission denied

nodeを実行する権限が無いらしい…

nodeの実行権限を調べてみる。

$ ls -la /home/ec2-user/.nvm/versions/node/v10.23.2/bin/
合計 40260
drwxrwxr-x 2 ec2-user ec2-user       40  2月  8 08:44 .
drwxrwxr-x 6 ec2-user ec2-user      108  2月  8 08:42 ..
-rwxrwxr-x 1 ec2-user ec2-user 41226208  1月 27 00:59 node
lrwxrwxrwx 1 ec2-user ec2-user       38  2月  8 08:44 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 ec2-user ec2-user       38  2月  8 08:44 npx -> ../lib/node_modules/npm/bin/npx-cli.js

特に問題はない。

一つずつ階層を上がってみる

$ ls -la /home/ec2-user/.nvm/versions/node/v10.23.2/
・・・
$ ls -la /home/ec2-user/.nvm/versions/node/
・・・
$ ls -la /home/ec2-user/.nvm/versions/
・・・
$ ls -la /home/ec2-user/.nvm/
・・・
$ ls -la /home/ec2-user/
・・・

nbsp;ls -la /home/ 合計 0 drwxr-xr-x 5 root root 55 1月 21 09:02 . dr-xr-xr-x 18 root root 257 2月 3 16:29 .. drwx------ 9 ec2-user ec2-user 293 2月 7 11:40 ec2-user

ここで初めて、ユーザーにしか実行権限がない状態を発見する。

確認のため、当フォルダーの「その他」の権限を変更してみる。

$ chmod 705 /home/ec2-user

フォルダの実行権限を変更し、プログラムを実行したところ、エラーがでなかった。

最後の処理が正しいかわからないが、そういうことだったらしい。

WEBサイト・ホームページの制作をご検討の方

コーポレートサイト

フライング・ハイ・ワークスの紹介

フライング・ハイ・ワークスは、東京のホームページ制作・Web制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。

実績

デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。

また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。

500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください。

東京のWeb制作会社・ホームページ制作のお問い合わせ、お見積り依頼、相談、質問は
お問い合わせフォームよりお願いいたします

ホームページ制作実績

コーポレートサイトへ