Laravel Sail устанавливает кукольник хром

Я установил среду Laravel Sail, и я пытаюсь сохранить веб-страницу в формате PDF с помощью puppeteer.

В настоящее время я использую этот пакет для запуска кукловода через laravel - https://packagist.org/packages/spatie/browsershot

В разделе требований указано, что вам нужно скачать кукловода через npm.

Laravel Sail имеет настройку npm, поэтому я установил пакет puppeteer, но когда я пытаюсь сохранить веб-страницу в виде снимка экрана, я получаю следующую ошибку

The command "PATH=$PATH:/usr/local/bin NODE_PATH=`npm root -g` node '/var/www/html/vendor/spatie/browsershot/src/../bin/browser.js' '{"url":"https:\/\/google.com","action":"screenshot","options":{"type":"png","path":"\/var\/www\/html\/storage\/app\/public\/screenshot.png","args":[],"viewport":{"width":800,"height":600}}}'" failed. Exit Code: 1(General error) Working directory: /var/www/html/public Output: ================ Error Output: ================ Error: Could not find expected browser (chrome) locally. Run `npm install` to download the correct Chromium revision (856583). at ChromeLauncher.launch (/var/www/html/node_modules/puppeteer/lib/cjs/puppeteer/node/Launcher.js:80:27) at async callChrome (/var/www/html/vendor/spatie/browsershot/bin/browser.js:69:23)

В основном это говорит о том, что он не может найти мою локальную версию хрома, и я не уверен, как это решить, если бы он не работал через докер, я мог бы установить его локально и указать на него, но я не думаю, что это лучшее решение при использовании докера.


person Lukerayner    schedule 19.03.2021    source источник
comment
У меня такая же проблема ... Решили ли вы эту проблему?   -  person pirmax    schedule 04.04.2021


Ответы (1)


Вам нужно установить кукольник с хромом внутри контейнера докера. В настоящее время у меня точно такая же настройка для Browsershot с Sail. Вам нужно будет опубликовать файлы конфигурации паруса, которые позволят вам отредактируйте контейнер докера.

sail artisan sail:publish

Затем вы можете найти файлы докеров в корне вашего проекта Laravel в docker/8.0 или docker/7.4 в зависимости от вашей версии PHP.

Отредактируйте файл докера и добавьте команду установки для кукольника с хромом:

RUN apt-get update \
    && apt-get install -y gconf-service libasound2 libappindicator3-1 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 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 libgbm-dev libatk-bridge2.0-0 \
    && npm install --global --unsafe-perm puppeteer \
    && chmod -R o+rx /usr/lib/node_modules/puppeteer/.local-chromium

Затем перестройте файл докеров:

sail build --no-cache

Поскольку кукловод работает в докере, нам нужно отключить песочницу. Имейте в виду, что докер будет намного медленнее генерировать PDF-файл, чем на вашем хост-компьютере, поэтому было бы разумно немного увеличить тайм-аут по умолчанию.

use Spatie\Browsershot\Browsershot;


Browsershot::html($html)
    ->noSandbox()
    ->timeout(360)
    ->save('your.pdf');
person Koen Hendriks    schedule 21.04.2021
comment
Отличное решение. Но на самом деле это намного медленнее, чем запуск этого в Homestead-setup с использованием VirtualBox в качестве VM-провайдера. Даже самая маленькая виртуальная машина с оперативной памятью всего 1 ГБ работает нормально - генерация на основе Docker занимает вечность, и я даже не понимаю, в чем причина этого. - person SPQRInc; 12.05.2021