Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

anuzpandey's avatar

Spatie/browsershot Permission Issue

Hello.

I have setup a server on a Digital Ocean and Im using supervisor to run the queues. I am using spatie/browsershot package to create a pdf to send it as an attachment in an email, but I am getting this error.

Symfony\Component\Process\Exception\ProcessFailedException: The command "PATH=$PATH:/usr/local/bin:/opt/homebrew/bin NODE_PATH=`npm root -g` node '/var/www/nepson-international-cargo/vendor/spatie/browsershot/src/../bin/browser.cjs' '{"url":"file:\/\/\/var\/www\/nepson-international-cargo\/storage\/506086505-0359309001692646930\/index.html","action":"pdf","options":{"path":"\/var\/www\/nepson-international-cargo\/public\/storage\/freight-debit-notes\/3\/10006.pdf","args":["--no-sandbox"],"viewport":{"width":800,"height":600},"displayHeaderFooter":false,"executablePath":"\/snap\/bin\/chromium","format":"A4"}}'" failed.

Exit Code: 1(General error)

Working directory: /

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


Error Output:
================
Error: net::ERR_FILE_NOT_FOUND at file:///var/www/nepson-international-cargo/storage/506086505-0359309001692646930/index.html
at navigate (/var/www/nepson-international-cargo/node_modules/puppeteer/lib/cjs/puppeteer/common/Frame.js:225:23)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Frame.goto (/var/www/nepson-international-cargo/node_modules/puppeteer/lib/cjs/puppeteer/common/Frame.js:195:21)
at async Page.goto (/var/www/nepson-international-cargo/node_modules/puppeteer/lib/cjs/puppeteer/common/Page.js:1155:16)
at async callChrome (/var/www/nepson-international-cargo/vendor/spatie/browsershot/bin/browser.cjs:267:26)
in /var/www/nepson-international-cargo/vendor/spatie/browsershot/src/Browsershot.php:953
Stack trace:
#0 /var/www/nepson-international-cargo/vendor/spatie/browsershot/src/Browsershot.php(646): Spatie\Browsershot\Browsershot->callBrowser()
#1 /var/www/nepson-international-cargo/vendor/spatie/browsershot/src/Browsershot.php(572): Spatie\Browsershot\Browsershot->savePdf()
#2 /var/www/nepson-international-cargo/app/Listeners/SendFreightDebitNoteEmail.php(69): Spatie\Browsershot\Browsershot->save()
#3 /var/www/nepson-international-cargo/app/Listeners/SendFreightDebitNoteEmail.php(52): App\Listeners\SendFreightDebitNoteEmail->savePdf()
#4 /var/www/nepson-international-cargo/app/Listeners/SendFreightDebitNoteEmail.php(28): App\Listeners\SendFreightDebitNoteEmail->renderViewAndSavePdf()
#5 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php(107): App\Listeners\SendFreightDebitNoteEmail->handle()
#6 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Events\CallQueuedListener->handle()
#7 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#8 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#9 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#10 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/Container.php(662): Illuminate\Container\BoundMethod::call()
#11 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\Container\Container->call()
#12 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#13 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#14 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then()
#15 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(124): Illuminate\Bus\Dispatcher->dispatchNow()
#16 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}()
#17 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#18 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(126): Illuminate\Pipeline\Pipeline->then()
#19 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#20 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call()
#21 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(439): Illuminate\Queue\Jobs\Job->fire()
#22 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(389): Illuminate\Queue\Worker->process()
#23 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(176): Illuminate\Queue\Worker->runJob()
#24 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(138): Illuminate\Queue\Worker->daemon()
#25 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(121): Illuminate\Queue\Console\WorkCommand->runWorker()
#26 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle()
#27 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#28 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#29 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#30 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Container/Container.php(662): Illuminate\Container\BoundMethod::call()
#31 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\Container\Container->call()
#32 /var/www/nepson-international-cargo/vendor/symfony/console/Command/Command.php(326): Illuminate\Console\Command->execute()
#33 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Console/Command.php(181): Symfony\Component\Console\Command\Command->run()
#34 /var/www/nepson-international-cargo/vendor/symfony/console/Application.php(1081): Illuminate\Console\Command->run()
#35 /var/www/nepson-international-cargo/vendor/symfony/console/Application.php(320): Symfony\Component\Console\Application->doRunCommand()
#36 /var/www/nepson-international-cargo/vendor/symfony/console/Application.php(174): Symfony\Component\Console\Application->doRun()
#37 /var/www/nepson-international-cargo/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(201): Symfony\Component\Console\Application->run()
#38 /var/www/nepson-international-cargo/artisan(37): Illuminate\Foundation\Console\Kernel->handle()
#39 {main}

It says

Error: net::ERR_FILE_NOT_FOUND at file:///var/www/nepson-international-cargo/storage/506086505-0359309001692646930/index.html

But when I navigate to the storage folder I can see the index.html file within that folder.

My current Implementation is:

$browserShot = Browsershot::html($view);

if (config('app.env') !== 'local') {
    $browserShot->setChromePath('/snap/bin/chromium')
        ->setCustomTempPath(storage_path())
        ->noSandbox();
}

$browserShot->format('A4')
    ->save(public_path('storage/freight-debit-notes/' . $parentFolderName . '/' . $fileName . '.pdf'));

Supervisor conf:

[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/nepson-international-cargo/artisan queue:work
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/worker.log

Please help.

0 likes
3 replies
anuzpandey's avatar

@Dosmukhanbet Sorry but no. I tried asking in their issues, discussions everywhere, but none replied. I tried every other solutions but did not work in my end. So, I switched to DOM PDF.

Please or to participate in this conversation.