This guide will help you install the latest version of Browsershot on a new Ubuntu 20.04 server provisioned by Laravel Forge.

Step 1.

First, update the servers sources to use the latest version of Node (currently 14):

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

Step 2.

Next, install all required packages:

sudo apt-get install -y nodejs gconf-service libasound2 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

Step 3.

Next, make sure the installed Headless Chrome has correct permissions:

sudo chmod -R o+rx /home/forge/project-path/node_modules/puppeteer/.local-chromium/ (your path will be different)

If you instead installed puppeteer globally, you should instead run sudo npm install --global --unsafe-perm puppeteer && sudo chmod -R o+rx /usr/lib/node_modules/puppeteer/.local-chromium

Step 4.

Verify that all necessary modules are installed:

  • cd /home/forge/project-path/node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux
  • ldd chrome | grep not

If nothing is outputted, everything should work fine, If not, try to install all dependencies again (can happen when you paste all dependencies and something goes wrong).

Step 5.

Test Browsershot with tinker:

  • php artisan tinker
  • Spatie\Browsershot\Browsershot::url('https://google.se')->save('example.pdf');