Server Edition - PDF/Email Issues

That’s strange, it makes me think PuppeteerSharp is not opening the correct chromium binary. Can you try running this command to first make sure the arm build of chromium is installed and working:

/snap/bin/chromium --no-sandbox --disable-gpu --headless --dump-dom https://example.com

If that works, then you’re either not setting the environment variable properly (Environment="PUPPETEER_EXECUTABLE_PATH=/usr/local/bin/chromium-wrapper") or for some reason it’s being ignored/overridden by Manager/PuppeteerSharp.

Thanks @_SK.

I tried your setup and it isn’t working. Would you mind having a look to see if you can spot my mistake?

Clicking the PDF button on a sales invoice (or anywhere else) does not cause anything to hit the logs. I watched journalctl --unit=manager-server --follow

It does cause the following javascript error
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘digest’)
at sha256Hex (pdf.js?version=25.11.27.3143:33:38)
at getBlob (pdf.js?version=25.11.27.3143:52:23)
at async getPdf (pdf.js?version=25.11.27.3143:97:22)

Here’s my setup

I’m running 25.11.27.3143 on Debian GNU/Linux 13 (trixie) headless

I tweaked your instructions a bit to fit my setup.

apt update && apt install chromium
which chromium
/usr/bin/chromium

chromium --version
Chromium 142.0.7444.175 built on Debian GNU/Linux 13 (trixie)

/gecko/manager-chromium-wrapper

#!/bin/bash
exec /usr/bin/chromium --no-sandbox --disable-gpu --headless “$@”

I confirmed that /gecko/manager-chromium-wrapper --print-to-pdf https://google.com works

/etc/systemd/system/manager-server.service

[Unit]
After=network.target

[Service]
LimitNOFILE=1048576
Environment=“PUPPETEER_EXECUTABLE_PATH=/gecko/manager-chromium-wrapper”
ExecStart=/srv/manager.io/ManagerServer -port 8088
Restart=on-failure
StartLimitInterval=600

[Install]
WantedBy=multi-user.target

that looks like it’s happening on the client side instead of the server. I found this: https://stackoverflow.com/questions/57146558/typeerror-digest-of-undefined-in-development-environment

The gist of that discussion above is that your browser will only allow some features if you have an SSL certificate on the domain the code is running in.

Are you accessing Manager over HTTP instead of HTTPS? In my setup I have it behind a subdomain through Cloudflare so I can access it via a URL like https://manager.my-website.com.

That was it. Thank you. I’m now running via HTTPS behind a proxy server.

For anyone else watching, none of the other changes were necessary for me. I just needed to run over https.

I have installed a new clean Ubuntu 24.04 ARM64 server just to make sure I am not doing something wrong. Installed latest manager version, nginx and installed ssl certificate. Then I tried above steps but unfortunately same error is appearing on new server.

<h1>Internal Error</h1><hr />Manager 25.12.2.3146<hr /><pre>PuppeteerSharp.ProcessException: Failed to launch browser! 
   at PuppeteerSharp.States.ProcessStartingState.StartCoreAsync(LauncherBase p) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/States/ProcessStartingState.cs:line 83
   at PuppeteerSharp.States.ProcessStartingState.StartCoreAsync(LauncherBase p) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/States/ProcessStartingState.cs:line 89
   at PuppeteerSharp.Launcher.LaunchAsync(LaunchOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Launcher.cs:line 77
   at PuppeteerSharp.Launcher.LaunchAsync(LaunchOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Launcher.cs:line 110
   at ManagerServer.HttpHandlers.Pdf.Post() in /home/runner/work/Manager/Manager/ManagerServer/HttpHandlers/Pdf.cs:line 38
   at ManagerServer.HttpServer.<>c.<<Build>b__0_16>d.MoveNext() in /home/runner/work/Manager/Manager/ManagerServer/HttpServer.cs:line 270
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareImpl.<Invoke>g__Awaited|10_0(ExceptionHandlerMiddlewareImpl middleware, HttpContext context, Task task)</pre><p><a href="javascript:window.history.back();">Go back</a>