[GH-ISSUE #2060] Playwright/Chromium not included in Docker image - Document sealing fails after signing Environment: #589

Open
opened 2026-02-26 18:47:42 +03:00 by kerem · 21 comments
Owner

Originally created by @Tschatscher85 on GitHub (Oct 3, 2025).
Original GitHub issue: https://github.com/documenso/documenso/issues/2060

Describe the improvement you are suggesting in detail

t:

Docker Image: documenso/documenso:latest
Platform: Ubuntu 24.04 LTS
Installation: Docker Compose (self-hosted)

Problem Description:
When a recipient signs a document, the signing process completes successfully and emails are sent. However, the document status remains "PENDING" instead of changing to "COMPLETED".
Root Cause:
The internal.seal-document job fails because Playwright/Chromium is not installed in the Docker container. The error logs show:
Failed to get certificate PDF
browserType.launch: Executable doesn't exist at /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1169/chrome-linux/headless_shell

Please run the following command to download new browsers:
npx playwright install
Why it can't be fixed manually:
Attempting to run npx playwright install --with-deps chromium inside the container fails with:
su: must be suid to work properly
Failed to install browsers
Error: Installation process exited with code: 1
The container runs as an unprivileged user (nodejs) and doesn't allow system package installation.
Impact:

Documents are successfully signed (signatures are valid)
Status remains "PENDING" forever
No audit trail PDF is generated
Certificate sealing fails

Expected Behavior:
The Docker image should include Playwright/Chromium pre-installed, or provide a way to install it without requiring root privileges.
Workaround:
Currently none. Documents can be signed but won't show as "COMPLETED" in the system.
Request:
Could you please either:

Include Playwright/Chromium in the official Docker image
Provide instructions for building a custom image with Playwright
Make the audit trail PDF generation optional/disable-able

Logs:
Full error trace shows the seal-document job retries 4 times before giving up with BackgroundTaskExceededRetriesError.

Additional Information & Alternatives (optional)

No response

Do you want to work on this improvement?

No

Please check the boxes that apply to this improvement suggestion.

  • I have searched the existing issues and improvement suggestions to avoid duplication.
  • I have provided a clear description of the improvement being suggested.
  • I have explained the rationale behind this improvement.
  • I have included any relevant technical details or design suggestions.
  • I understand that this is a suggestion and that there is no guarantee of implementation.
Originally created by @Tschatscher85 on GitHub (Oct 3, 2025). Original GitHub issue: https://github.com/documenso/documenso/issues/2060 ### Describe the improvement you are suggesting in detail t: Docker Image: documenso/documenso:latest Platform: Ubuntu 24.04 LTS Installation: Docker Compose (self-hosted) Problem Description: When a recipient signs a document, the signing process completes successfully and emails are sent. However, the document status remains "PENDING" instead of changing to "COMPLETED". Root Cause: The internal.seal-document job fails because Playwright/Chromium is not installed in the Docker container. The error logs show: Failed to get certificate PDF browserType.launch: Executable doesn't exist at /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1169/chrome-linux/headless_shell Please run the following command to download new browsers: npx playwright install Why it can't be fixed manually: Attempting to run npx playwright install --with-deps chromium inside the container fails with: su: must be suid to work properly Failed to install browsers Error: Installation process exited with code: 1 The container runs as an unprivileged user (nodejs) and doesn't allow system package installation. Impact: Documents are successfully signed (signatures are valid) Status remains "PENDING" forever No audit trail PDF is generated Certificate sealing fails Expected Behavior: The Docker image should include Playwright/Chromium pre-installed, or provide a way to install it without requiring root privileges. Workaround: Currently none. Documents can be signed but won't show as "COMPLETED" in the system. Request: Could you please either: Include Playwright/Chromium in the official Docker image Provide instructions for building a custom image with Playwright Make the audit trail PDF generation optional/disable-able Logs: Full error trace shows the seal-document job retries 4 times before giving up with BackgroundTaskExceededRetriesError. ### Additional Information & Alternatives (optional) _No response_ ### Do you want to work on this improvement? No ### Please check the boxes that apply to this improvement suggestion. - [ ] I have searched the existing issues and improvement suggestions to avoid duplication. - [ ] I have provided a clear description of the improvement being suggested. - [ ] I have explained the rationale behind this improvement. - [ ] I have included any relevant technical details or design suggestions. - [ ] I understand that this is a suggestion and that there is no guarantee of implementation.
Author
Owner

@github-actions[bot] commented on GitHub (Oct 3, 2025):

Thank you for opening your first issue and for being a part of the open signing revolution!

One of our team members will review it and get back to you as soon as it possible 💚

Meanwhile, please feel free to hop into our community in Discord

<!-- gh-comment-id:3365297497 --> @github-actions[bot] commented on GitHub (Oct 3, 2025): Thank you for opening your first issue and for being a part of the open signing revolution! <br /> One of our team members will review it and get back to you as soon as it possible 💚 <br /> Meanwhile, please feel free to hop into our community in [Discord](https://documen.so/discord)
Author
Owner

@DerpBicycle commented on GitHub (Oct 5, 2025):

I am also encountering this issue.

<!-- gh-comment-id:3369006830 --> @DerpBicycle commented on GitHub (Oct 5, 2025): I am also encountering this issue.
Author
Owner

@Tschatscher85 commented on GitHub (Oct 5, 2025):

But no one has a solution ;(

<!-- gh-comment-id:3369026480 --> @Tschatscher85 commented on GitHub (Oct 5, 2025): But no one has a solution ;(
Author
Owner

@DerpBicycle commented on GitHub (Oct 5, 2025):

You can disable certificate signing in your settings as a temp fix.

<!-- gh-comment-id:3369058702 --> @DerpBicycle commented on GitHub (Oct 5, 2025): You can disable certificate signing in your settings as a temp fix.
Author
Owner

@Tschatscher85 commented on GitHub (Oct 5, 2025):

Oh, how do I do that? Will it then show as completed or pending?

<!-- gh-comment-id:3369060130 --> @Tschatscher85 commented on GitHub (Oct 5, 2025): Oh, how do I do that? Will it then show as completed or pending?
Author
Owner

@DerpBicycle commented on GitHub (Oct 5, 2025):

I removed the variable related to the cert, and disabled the cert option in documenso’s settings. That way you can sign documents and complete them.

<!-- gh-comment-id:3369068236 --> @DerpBicycle commented on GitHub (Oct 5, 2025): I removed the variable related to the cert, and disabled the cert option in documenso’s settings. That way you can sign documents and complete them.
Author
Owner

@Tschatscher85 commented on GitHub (Oct 5, 2025):

Something like that?

  - #NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12
<!-- gh-comment-id:3369132614 --> @Tschatscher85 commented on GitHub (Oct 5, 2025): Something like that? - #NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12
Author
Owner

@Tschatscher85 commented on GitHub (Oct 5, 2025):

I've paid it, but despite signing, it still shows as outstanding ;(

Image Image
<!-- gh-comment-id:3369137226 --> @Tschatscher85 commented on GitHub (Oct 5, 2025): I've paid it, but despite signing, it still shows as outstanding ;( <img width="786" height="191" alt="Image" src="https://github.com/user-attachments/assets/1e69d6fc-624a-494a-ae98-7bfac3158373" /> <img width="951" height="701" alt="Image" src="https://github.com/user-attachments/assets/c672c5e5-e1e8-4add-80f7-5893af40e799" />
Author
Owner

@DerpBicycle commented on GitHub (Oct 5, 2025):

Let’s hope someone can fix it :)

<!-- gh-comment-id:3369189612 --> @DerpBicycle commented on GitHub (Oct 5, 2025): Let’s hope someone can fix it :)
Author
Owner

@dexit commented on GitHub (Oct 7, 2025):

I've paid it, but despite signing, it still shows as outstanding ;(

Just so you know, i am no guru, just someone trying to solve this issue as well, and i've circumvented this somehow by:

I've battled the same issue, but if you go to the DOCKER CONTAINER and Logon to it via SSH/Terminal, you can edit the :

/app/apps/remix/start.sh

file by typing:

vi start.sh

to start INPUT, press down the letter "i" on keyboard then use keybaord arrows to navigate down, until you find the prisma migrate command mentioned below, then right click paste.

Then copy paste the below just after the line "npx prisma migrate deploy --schema ../../packages/prisma/schema.prisma" :

printf ".... Start NPM install\n"
npm i
printf ".... Start NPM install PLAYWRIGHT\n" 
npm install playwright
printf ".... Start NPX install playright \n" 
npx playwright install

Once you have added the lines, just hit "ESC" this changes the input mode, and the just type ":wq" and hit enter.
Now if you can "Restart" the Docker Instance, and voila it will work.
The file should look like this :

#!/bin/sh

# .... Starting Documenso...
printf ".... Starting Documenso...\n\n"

# .... Check certificate configuration
printf ".... Checking certificate configuration...\n"

CERT_PATH="${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH:-/opt/documenso/cert.p12}"
                                                                            
if [ -f "$CERT_PATH" ] && [ -r "$CERT_PATH" ]; then                         
    printf "... Certificate file found and readable - document signing is ready!\n"
else                                                                               
    printf "......  Certificate not found or not readable\n"                       
    printf ".... Tip: Documenso will still start, but document signing will be unavailable\n"
    printf ".... Check: http://localhost:3000/api/certificate-status for detailed status\n"  
fi                                                                                           
                                                                                           
printf "\n.... Useful Links:\n"                                                    
printf ".... Documentation: https://docs.documenso.com\n"                          
printf ".... Self-hosting guide: https://docs.documenso.com/developers/self-hosting\n"       
printf ".... Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate\n"
printf ".... Health check: http://localhost:3000/api/health\n"                                           
printf ".... Certificate status: http://localhost:3000/api/certificate-status\n"                         
printf ".... Community: https://github.com/documenso/documenso\n\n"             
                                                                                
printf ".......  Running database migrations...\n"                                    
npx prisma migrate deploy --schema ../../packages/prisma/schema.prisma                                   
                                                                                                         
printf ".... Start NPM install\n"                                              
npm i                                                                           
printf ".... Start NPM install PLAYWRIGHT\n"                     
npm install playwright                                             
printf ".... Start NPX install playright \n"                          
npx playwright install                                                
printf ".... Starting Documenso server...\n"                          
HOSTNAME=0.0.0.0 node build/server/main.js    

Now the certificate still is necessary, as it might fail wheni t cant find it or read it.
So ensure that it exists and is accessible, the PLAYWRIGHT can be fixed by updating the docker files i believe.

<!-- gh-comment-id:3376246983 --> @dexit commented on GitHub (Oct 7, 2025): > I've paid it, but despite signing, it still shows as outstanding ;( Just so you know, i am no guru, just someone trying to solve this issue as well, and i've circumvented this somehow by: I've battled the same issue, but if you go to the DOCKER CONTAINER and Logon to it via SSH/Terminal, you can edit the : ``` /app/apps/remix/start.sh ``` file by typing: ``` vi start.sh ``` to start INPUT, press down the letter "i" on keyboard then use keybaord arrows to navigate down, until you find the prisma migrate command mentioned below, then right click paste. Then copy paste the below just after the line "npx prisma migrate deploy --schema ../../packages/prisma/schema.prisma" : ``` printf ".... Start NPM install\n" npm i printf ".... Start NPM install PLAYWRIGHT\n" npm install playwright printf ".... Start NPX install playright \n" npx playwright install ``` Once you have added the lines, just hit "ESC" this changes the input mode, and the just type ":wq" and hit enter. Now if you can "Restart" the Docker Instance, and voila it will work. The file should look like this : ``` #!/bin/sh # .... Starting Documenso... printf ".... Starting Documenso...\n\n" # .... Check certificate configuration printf ".... Checking certificate configuration...\n" CERT_PATH="${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH:-/opt/documenso/cert.p12}" if [ -f "$CERT_PATH" ] && [ -r "$CERT_PATH" ]; then printf "... Certificate file found and readable - document signing is ready!\n" else printf "...... Certificate not found or not readable\n" printf ".... Tip: Documenso will still start, but document signing will be unavailable\n" printf ".... Check: http://localhost:3000/api/certificate-status for detailed status\n" fi printf "\n.... Useful Links:\n" printf ".... Documentation: https://docs.documenso.com\n" printf ".... Self-hosting guide: https://docs.documenso.com/developers/self-hosting\n" printf ".... Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate\n" printf ".... Health check: http://localhost:3000/api/health\n" printf ".... Certificate status: http://localhost:3000/api/certificate-status\n" printf ".... Community: https://github.com/documenso/documenso\n\n" printf "....... Running database migrations...\n" npx prisma migrate deploy --schema ../../packages/prisma/schema.prisma printf ".... Start NPM install\n" npm i printf ".... Start NPM install PLAYWRIGHT\n" npm install playwright printf ".... Start NPX install playright \n" npx playwright install printf ".... Starting Documenso server...\n" HOSTNAME=0.0.0.0 node build/server/main.js ``` Now the certificate still is necessary, as it might fail wheni t cant find it or read it. So ensure that it exists and is accessible, the PLAYWRIGHT can be fixed by updating the docker files i believe.
Author
Owner

@dexit commented on GitHub (Oct 7, 2025):

I've paid it, but despite signing, it still shows as outstanding ;(

Image Image

Please follow the following : https://github.com/documenso/documenso/issues/1634#issuecomment-2948258699

Create a new docker-compose.yml with the following contents :

services:
  chrome:
    image: browserless/chrome:latest
    container_name: Chrome
    hostname: headless
    ports:
      - "3001:3000"
    environment:
      - MAX_CONCURRENT_SESSIONS=10
      - MAX_QUEUE_LENGTH=20

And then within the folder of this "docker-compose.yml" execute the command :

 docker compose up -d

This will result it :

debian@vps:~/headless$ docker compose up -d
[+] Running 2/2
 ✔ Network headless_default  Created                                                                                        0.1s
 ✔ Container Chrome          Started                            

Then you can tap into the "headless" container named "Chrome"
and you shall see something similar to this :

2025-10-07T10:37:51.574596453Z Running on port 3000
2025-10-07T10:37:51.574599781Z  Localhost        ws:localhost:3000
2025-10-07T10:37:51.574603190Z  Local network    ws:172.19.0.2:3000
2025-10-07T10:37:51.574606283Z 2025-10-07T10:37:51.574Z browserless:server
2025-10-07T10:37:51.574609443Z Get started at    https://www.browserless.io/docs/start
2025-10-07T10:37:51.574612409Z Get a license at  https://www.browserless.io/sign-up?type=commercial
2025-10-07T10:37:51.574615362Z Get support at    https://www.browserless.io/contact
2025-10-07T10:37:51.574618239Z
2025-10-07T10:37:51.574621033Z Happy coding!

Now the system has told you what is the local network WS address "2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000"

Nowing this now go to your DOCUMENSO instance and add a new ENV variable :

NEXT_PRIVATE_BROWSERLESS_URL=YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG

Change the "YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG" value to the value needed, in this case : "ws:172.19.0.2:3000"

Then you will see once a docuemnts is initialized in the "HEADLESS" chrome instance logs something like :

2025-10-07T10:55:43.008018905Z   "executablePath": "/usr/bin/google-chrome",
2025-10-07T10:55:43.008021872Z   "handleSIGINT": false,
2025-10-07T10:55:43.008024649Z   "handleSIGTERM": false,
2025-10-07T10:55:43.008027445Z   "handleSIGHUP": false
2025-10-07T10:55:43.008030224Z }
2025-10-07T10:55:43.035320412Z 2025-10-07T10:55:43.035Z browserless:chrome-helper Garbage collecting and removing listeners
2025-10-07T10:55:43.037297346Z 2025-10-07T10:55:43.037Z browserless:chrome-helper Browser process 9920cc39-27f2-4778-9d69-19a7f32bff91 has closed, cleaning up.
2025-10-07T10:55:43.241098684Z 2025-10-07T10:55:43.240Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gaOpmC removed successfully
2025-10-07T10:55:43.367683479Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Chrome PID: 144
2025-10-07T10:55:43.367986980Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Finding prior pages
2025-10-07T10:55:43.379363433Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Found 1 pages
2025-10-07T10:55:43.379451431Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Setting up page Unknown
2025-10-07T10:55:43.379470446Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace"
2025-10-07T10:55:43.380415568Z 2025-10-07T10:55:43.380Z browserless:system Chrome launched 381ms
2025-10-07T10:55:43.380428788Z 2025-10-07T10:55:43.380Z browserless:system Got chrome instance
2025-10-07T10:55:43.380550907Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Starting session.
2025-10-07T10:55:43.380663521Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Proxying request to /devtools/browser route: ws://127.0.0.1:39879/devtools/browser/5e336ed6-a402-4936-84ed-d73fcd730ce1.
2025-10-07T10:55:43.381984626Z 2025-10-07T10:55:43.381Z browserless:chrome-helper Setting up file:// protocol request rejection
2025-10-07T10:55:43.786293068Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Setting up page Unknown
2025-10-07T10:55:43.786326919Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace"
2025-10-07T10:55:43.803642488Z 2025-10-07T10:55:43.803Z browserless:chrome-helper Setting up file:// protocol request rejection
2025-10-07T10:55:46.538786590Z 2025-10-07T10:55:46.538Z browserless:server EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Recording successful stat and cleaning up.
2025-10-07T10:55:46.539005940Z 2025-10-07T10:55:46.538Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Cleaning up job
2025-10-07T10:55:46.539075477Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser not needed, closing
2025-10-07T10:55:46.539165787Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Shutting down browser with close command
2025-10-07T10:55:46.539307653Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser cleanup complete.
2025-10-07T10:55:46.539458430Z 2025-10-07T10:55:46.539Z browserless:server Current workload complete.
2025-10-07T10:55:46.539585829Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Sending SIGKILL signal to browser process 144
2025-10-07T10:55:46.544229658Z 2025-10-07T10:55:46.544Z browserless:chrome-helper Removing temp data-dir /tmp/browserless-data-dir-gJJ0mG
2025-10-07T10:55:46.616405431Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Garbage collecting and removing listeners
2025-10-07T10:55:46.616673134Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Browser process 5e336ed6-a402-4936-84ed-d73fcd730ce1 has closed, cleaning up.
2025-10-07T10:55:46.618923538Z 2025-10-07T10:55:46.618Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gJJ0mG removed successfully
2025-10-07T10:56:26.029245272Z 2025-10-07T10:56:26.028Z browserless:server Health check stats: CPU 10%,6% MEM: 25%,21%
2025-10-07T10:56:26.029341340Z 2025-10-07T10:56:26.029Z browserless:server Current period usage: {"date":1759834286025,"error":0,"rejected":0,"successful":2,"timedout":0,"totalTime":7434,"maxTime":3894,"minTime":3540,"meanTime":3717,"maxConcurrent":1,"units":2}

Then you know its working same as in the DOCUMENSO instance logs:

2025-10-07T10:55:37.032570165Z 2025/10/07 11:55AM 30 | pid=223 hostname=documenso ipAddress=X.X.X.X userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 requestId=75cwwwuxau4mf8dg2khda nonBatchedRequestId=mg4rdm4bunf3xibcx2osb input={"documentId":42} 
2025-10-07T10:55:37.061591933Z Submitting job to endpoint: http://documenso/api/jobs/send.recipient.signed.email/cmggg1nc1000vsa6717x1vy2q
2025-10-07T10:55:37.133980878Z [JOBS]: Triggering job send.recipient.signed.email with payload { documentId: 42, recipientId: 90 }
2025-10-07T10:55:37.231636788Z Submitting job to endpoint: http://documenso/api/jobs/internal.seal-document/cmggg1ngr000wsa67cr12vlct
2025-10-07T10:55:37.247946404Z [JOBS]: Triggering job internal.seal-document with payload {
2025-10-07T10:55:37.247983112Z   documentId: 42,
2025-10-07T10:55:37.247991620Z   requestMetadata: {
2025-10-07T10:55:37.247997135Z     ipAddress: 'X.X.X.X',
2025-10-07T10:55:37.248002870Z     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
2025-10-07T10:55:37.248008683Z   }
2025-10-07T10:55:37.248013937Z }
<!-- gh-comment-id:3376567030 --> @dexit commented on GitHub (Oct 7, 2025): > I've paid it, but despite signing, it still shows as outstanding ;( > > <img alt="Image" width="786" height="191" src="https://private-user-images.githubusercontent.com/205684005/497563527-1e69d6fc-624a-494a-ae98-7bfac3158373.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTk4Mzc5NDIsIm5iZiI6MTc1OTgzNzY0MiwicGF0aCI6Ii8yMDU2ODQwMDUvNDk3NTYzNTI3LTFlNjlkNmZjLTYyNGEtNDk0YS1hZTk4LTdiZmFjMzE1ODM3My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMDA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTAwN1QxMTQ3MjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNGRmNWNmZDg5NTQ3YWRjOTA0YzdkMmVjNzA2MjJjMjdlNjQzNTA0MDBmOTJhZTBkMGVjZTk1YmYyN2UyOGUyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.0ifkT6VgoOcwu3xXxJejzhb_bj9CoKCJI9ZOhXKXfUI"> <img alt="Image" width="951" height="701" src="https://private-user-images.githubusercontent.com/205684005/497563435-c672c5e5-e1e8-4add-80f7-5893af40e799.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTk4Mzc5NDIsIm5iZiI6MTc1OTgzNzY0MiwicGF0aCI6Ii8yMDU2ODQwMDUvNDk3NTYzNDM1LWM2NzJjNWU1LWUxZTgtNGFkZC04MGY3LTU4OTNhZjQwZTc5OS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMDA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTAwN1QxMTQ3MjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTQ4YTJiYjFjZWZlMjJkOTZjYWE0ZGI2Yjg1MzEyNmE1OWQ4NTIzZDNjZTVjNmJiMzhmZDhhZmU1ZjhlMTY5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.3dkgpnYymlyCniGoKFUYFLWx24T3nzxFYZx20bL95jE"> Please follow the following : [https://github.com/documenso/documenso/issues/1634#issuecomment-2948258699](1634) Create a new docker-compose.yml with the following contents : ``` services: chrome: image: browserless/chrome:latest container_name: Chrome hostname: headless ports: - "3001:3000" environment: - MAX_CONCURRENT_SESSIONS=10 - MAX_QUEUE_LENGTH=20 ``` And then within the folder of this "docker-compose.yml" execute the command : ``` docker compose up -d ``` This will result it : ``` debian@vps:~/headless$ docker compose up -d [+] Running 2/2 ✔ Network headless_default Created 0.1s ✔ Container Chrome Started ``` Then you can tap into the "headless" container named "Chrome" and you shall see something similar to this : ``` 2025-10-07T10:37:51.574596453Z Running on port 3000 2025-10-07T10:37:51.574599781Z Localhost ws:localhost:3000 2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000 2025-10-07T10:37:51.574606283Z 2025-10-07T10:37:51.574Z browserless:server 2025-10-07T10:37:51.574609443Z Get started at https://www.browserless.io/docs/start 2025-10-07T10:37:51.574612409Z Get a license at https://www.browserless.io/sign-up?type=commercial 2025-10-07T10:37:51.574615362Z Get support at https://www.browserless.io/contact 2025-10-07T10:37:51.574618239Z 2025-10-07T10:37:51.574621033Z Happy coding! ``` Now the system has told you what is the local network WS address "2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000" Nowing this now go to your DOCUMENSO instance and add a new ENV variable : ``` NEXT_PRIVATE_BROWSERLESS_URL=YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG ``` Change the "YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG" value to the value needed, in this case : "ws:172.19.0.2:3000" Then you will see once a docuemnts is initialized in the "HEADLESS" chrome instance logs something like : ``` 2025-10-07T10:55:43.008018905Z "executablePath": "/usr/bin/google-chrome", 2025-10-07T10:55:43.008021872Z "handleSIGINT": false, 2025-10-07T10:55:43.008024649Z "handleSIGTERM": false, 2025-10-07T10:55:43.008027445Z "handleSIGHUP": false 2025-10-07T10:55:43.008030224Z } 2025-10-07T10:55:43.035320412Z 2025-10-07T10:55:43.035Z browserless:chrome-helper Garbage collecting and removing listeners 2025-10-07T10:55:43.037297346Z 2025-10-07T10:55:43.037Z browserless:chrome-helper Browser process 9920cc39-27f2-4778-9d69-19a7f32bff91 has closed, cleaning up. 2025-10-07T10:55:43.241098684Z 2025-10-07T10:55:43.240Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gaOpmC removed successfully 2025-10-07T10:55:43.367683479Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Chrome PID: 144 2025-10-07T10:55:43.367986980Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Finding prior pages 2025-10-07T10:55:43.379363433Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Found 1 pages 2025-10-07T10:55:43.379451431Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Setting up page Unknown 2025-10-07T10:55:43.379470446Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace" 2025-10-07T10:55:43.380415568Z 2025-10-07T10:55:43.380Z browserless:system Chrome launched 381ms 2025-10-07T10:55:43.380428788Z 2025-10-07T10:55:43.380Z browserless:system Got chrome instance 2025-10-07T10:55:43.380550907Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Starting session. 2025-10-07T10:55:43.380663521Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Proxying request to /devtools/browser route: ws://127.0.0.1:39879/devtools/browser/5e336ed6-a402-4936-84ed-d73fcd730ce1. 2025-10-07T10:55:43.381984626Z 2025-10-07T10:55:43.381Z browserless:chrome-helper Setting up file:// protocol request rejection 2025-10-07T10:55:43.786293068Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Setting up page Unknown 2025-10-07T10:55:43.786326919Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace" 2025-10-07T10:55:43.803642488Z 2025-10-07T10:55:43.803Z browserless:chrome-helper Setting up file:// protocol request rejection 2025-10-07T10:55:46.538786590Z 2025-10-07T10:55:46.538Z browserless:server EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Recording successful stat and cleaning up. 2025-10-07T10:55:46.539005940Z 2025-10-07T10:55:46.538Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Cleaning up job 2025-10-07T10:55:46.539075477Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser not needed, closing 2025-10-07T10:55:46.539165787Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Shutting down browser with close command 2025-10-07T10:55:46.539307653Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser cleanup complete. 2025-10-07T10:55:46.539458430Z 2025-10-07T10:55:46.539Z browserless:server Current workload complete. 2025-10-07T10:55:46.539585829Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Sending SIGKILL signal to browser process 144 2025-10-07T10:55:46.544229658Z 2025-10-07T10:55:46.544Z browserless:chrome-helper Removing temp data-dir /tmp/browserless-data-dir-gJJ0mG 2025-10-07T10:55:46.616405431Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Garbage collecting and removing listeners 2025-10-07T10:55:46.616673134Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Browser process 5e336ed6-a402-4936-84ed-d73fcd730ce1 has closed, cleaning up. 2025-10-07T10:55:46.618923538Z 2025-10-07T10:55:46.618Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gJJ0mG removed successfully 2025-10-07T10:56:26.029245272Z 2025-10-07T10:56:26.028Z browserless:server Health check stats: CPU 10%,6% MEM: 25%,21% 2025-10-07T10:56:26.029341340Z 2025-10-07T10:56:26.029Z browserless:server Current period usage: {"date":1759834286025,"error":0,"rejected":0,"successful":2,"timedout":0,"totalTime":7434,"maxTime":3894,"minTime":3540,"meanTime":3717,"maxConcurrent":1,"units":2} ``` Then you know its working same as in the DOCUMENSO instance logs: ``` 2025-10-07T10:55:37.032570165Z 2025/10/07 11:55AM 30 | pid=223 hostname=documenso ipAddress=X.X.X.X userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 requestId=75cwwwuxau4mf8dg2khda nonBatchedRequestId=mg4rdm4bunf3xibcx2osb input={"documentId":42} 2025-10-07T10:55:37.061591933Z Submitting job to endpoint: http://documenso/api/jobs/send.recipient.signed.email/cmggg1nc1000vsa6717x1vy2q 2025-10-07T10:55:37.133980878Z [JOBS]: Triggering job send.recipient.signed.email with payload { documentId: 42, recipientId: 90 } 2025-10-07T10:55:37.231636788Z Submitting job to endpoint: http://documenso/api/jobs/internal.seal-document/cmggg1ngr000wsa67cr12vlct 2025-10-07T10:55:37.247946404Z [JOBS]: Triggering job internal.seal-document with payload { 2025-10-07T10:55:37.247983112Z documentId: 42, 2025-10-07T10:55:37.247991620Z requestMetadata: { 2025-10-07T10:55:37.247997135Z ipAddress: 'X.X.X.X', 2025-10-07T10:55:37.248002870Z userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' 2025-10-07T10:55:37.248008683Z } 2025-10-07T10:55:37.248013937Z } ```
Author
Owner

@Tschatscher85 commented on GitHub (Oct 7, 2025):

Hallo, leider hat es nicht geklapp?

# NEU: Headless-Chrome (browserless) – wie im Screenshot chrome: image: browserless/chrome:latest container_name: Chrome hostname: headless ports: - "3001:3000" # extern 3001 → intern 3000 (browserless) environment: - MAX_CONCURRENT_SESSIONS=10 - MAX_QUEUE_LENGTH=20 restart: unless-stopped

- NEXT_PRIVATE_BROWSERLESS_URL=ws:192.168.112.2:3000

Image Image Image Image
<!-- gh-comment-id:3377993274 --> @Tschatscher85 commented on GitHub (Oct 7, 2025): Hallo, leider hat es nicht geklapp? ` # NEU: Headless-Chrome (browserless) – wie im Screenshot chrome: image: browserless/chrome:latest container_name: Chrome hostname: headless ports: - "3001:3000" # extern 3001 → intern 3000 (browserless) environment: - MAX_CONCURRENT_SESSIONS=10 - MAX_QUEUE_LENGTH=20 restart: unless-stopped` ` - NEXT_PRIVATE_BROWSERLESS_URL=ws:192.168.112.2:3000` <img width="1101" height="864" alt="Image" src="https://github.com/user-attachments/assets/51a21024-090d-4229-97cc-cbb64802a899" /> <img width="2183" height="417" alt="Image" src="https://github.com/user-attachments/assets/f378327b-4043-4468-8774-f8cee2e17fc0" /> <img width="2308" height="1049" alt="Image" src="https://github.com/user-attachments/assets/bb6b1c2c-e974-4ac7-9d7e-8249c83a990a" /> <img width="2163" height="1029" alt="Image" src="https://github.com/user-attachments/assets/fe26fd84-193e-48c3-bc72-34cdc725bca4" />
Author
Owner

@Trillion26 commented on GitHub (Oct 10, 2025):

Any update on this one?

<!-- gh-comment-id:3389127532 --> @Trillion26 commented on GitHub (Oct 10, 2025): Any update on this one?
Author
Owner

@Novapixel1010 commented on GitHub (Oct 23, 2025):

Have you looked at my comment #1634 or my PR #2081. That may help?

<!-- gh-comment-id:3438409491 --> @Novapixel1010 commented on GitHub (Oct 23, 2025): Have you looked at my comment #1634 or my PR #2081. That may help?
Author
Owner

@pablog12 commented on GitHub (Nov 3, 2025):

I solved this like this, I am using docker swarm.

I had to run the container as 'root' and replaced the startup command like so (its not great practice, and takes a bit to deploy, but it works):

    # Run as root to install deps; simplest way to avoid baking a custom image.
    user: "0"
    image: documenso/documenso:latest
    command:
      - sh
      - -lc
      - |
        set -e

        # 1) Wait for signing cert (mounted via Docker config)
        for i in $$(seq 1 60); do
          [ -f /opt/documenso/cert.p12 ] && break
          echo "Waiting for cert..." && sleep 2
        done

        # 2) Prepare env so playwright installs where runtime user will look
        export HOME=/home/nodejs
        mkdir -p "$HOME/.cache/ms-playwright"
        export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright"
        export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=1

        # 3) Install OS deps (Alpine or Debian). Add glibc compat on Alpine.
        if command -v apk >/dev/null 2>&1; then
          echo "Installing Alpine deps for Playwright..."
          apk add --no-cache \
            ca-certificates ttf-freefont font-noto \
            nss freetype harfbuzz libstdc++ \
            libx11 libxcomposite libxdamage libxrandr libxkbcommon \
            alsa-lib pango gtk+3.0 at-spi2-core \
            gcompat libc6-compat
        elif command -v apt-get >/dev/null 2>&1; then
          echo "Installing Debian/Ubuntu deps for Playwright..."
          apt-get update
          apt-get install -y --no-install-recommends \
            ca-certificates fonts-noto-color-emoji ttf-freefont \
            libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 \
            libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \
            libpango-1.0-0 libasound2
          rm -rf /var/lib/apt/lists/*
        else
          echo "WARN: No apk/apt-get available; skipping OS deps install"
        fi

        # 4) Download Chromium to nodejs' cache (even though we are root)
        npx playwright install chromium || true

        # 5) Make sure nodejs can read the downloaded browsers
        NODE_UID=$$(id -u nodejs 2>/dev/null || echo 1001)
        NODE_GID=$$(id -g nodejs 2>/dev/null || echo 1001)
        chown -R "$NODE_UID:$NODE_GID" "$HOME" || true

        echo "Starting Documenso..."
        exec docker-entrypoint.sh sh start.sh
<!-- gh-comment-id:3479964769 --> @pablog12 commented on GitHub (Nov 3, 2025): I solved this like this, I am using docker swarm. I had to run the container as 'root' and replaced the startup command like so (its not great practice, and takes a bit to deploy, but it works): ```yaml # Run as root to install deps; simplest way to avoid baking a custom image. user: "0" image: documenso/documenso:latest command: - sh - -lc - | set -e # 1) Wait for signing cert (mounted via Docker config) for i in $$(seq 1 60); do [ -f /opt/documenso/cert.p12 ] && break echo "Waiting for cert..." && sleep 2 done # 2) Prepare env so playwright installs where runtime user will look export HOME=/home/nodejs mkdir -p "$HOME/.cache/ms-playwright" export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright" export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=1 # 3) Install OS deps (Alpine or Debian). Add glibc compat on Alpine. if command -v apk >/dev/null 2>&1; then echo "Installing Alpine deps for Playwright..." apk add --no-cache \ ca-certificates ttf-freefont font-noto \ nss freetype harfbuzz libstdc++ \ libx11 libxcomposite libxdamage libxrandr libxkbcommon \ alsa-lib pango gtk+3.0 at-spi2-core \ gcompat libc6-compat elif command -v apt-get >/dev/null 2>&1; then echo "Installing Debian/Ubuntu deps for Playwright..." apt-get update apt-get install -y --no-install-recommends \ ca-certificates fonts-noto-color-emoji ttf-freefont \ libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 \ libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \ libpango-1.0-0 libasound2 rm -rf /var/lib/apt/lists/* else echo "WARN: No apk/apt-get available; skipping OS deps install" fi # 4) Download Chromium to nodejs' cache (even though we are root) npx playwright install chromium || true # 5) Make sure nodejs can read the downloaded browsers NODE_UID=$$(id -u nodejs 2>/dev/null || echo 1001) NODE_GID=$$(id -g nodejs 2>/dev/null || echo 1001) chown -R "$NODE_UID:$NODE_GID" "$HOME" || true echo "Starting Documenso..." exec docker-entrypoint.sh sh start.sh ```
Author
Owner

@lib4u commented on GitHub (Nov 7, 2025):

I solved this like this, I am using docker swarm.

I had to run the container as 'root' and replaced the startup command like so (its not great practice, and takes a bit to deploy, but it works):

# Run as root to install deps; simplest way to avoid baking a custom image.
user: "0"
image: documenso/documenso:latest
command:
  - sh
  - -lc
  - |
    set -e

    # 1) Wait for signing cert (mounted via Docker config)
    for i in $$(seq 1 60); do
      [ -f /opt/documenso/cert.p12 ] && break
      echo "Waiting for cert..." && sleep 2
    done

    # 2) Prepare env so playwright installs where runtime user will look
    export HOME=/home/nodejs
    mkdir -p "$HOME/.cache/ms-playwright"
    export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright"
    export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=1

    # 3) Install OS deps (Alpine or Debian). Add glibc compat on Alpine.
    if command -v apk >/dev/null 2>&1; then
      echo "Installing Alpine deps for Playwright..."
      apk add --no-cache \
        ca-certificates ttf-freefont font-noto \
        nss freetype harfbuzz libstdc++ \
        libx11 libxcomposite libxdamage libxrandr libxkbcommon \
        alsa-lib pango gtk+3.0 at-spi2-core \
        gcompat libc6-compat
    elif command -v apt-get >/dev/null 2>&1; then
      echo "Installing Debian/Ubuntu deps for Playwright..."
      apt-get update
      apt-get install -y --no-install-recommends \
        ca-certificates fonts-noto-color-emoji ttf-freefont \
        libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 \
        libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \
        libpango-1.0-0 libasound2
      rm -rf /var/lib/apt/lists/*
    else
      echo "WARN: No apk/apt-get available; skipping OS deps install"
    fi

    # 4) Download Chromium to nodejs' cache (even though we are root)
    npx playwright install chromium || true

    # 5) Make sure nodejs can read the downloaded browsers
    NODE_UID=$$(id -u nodejs 2>/dev/null || echo 1001)
    NODE_GID=$$(id -g nodejs 2>/dev/null || echo 1001)
    chown -R "$NODE_UID:$NODE_GID" "$HOME" || true

    echo "Starting Documenso..."
    exec docker-entrypoint.sh sh start.sh

wow this really works for me, thanks bro

<!-- gh-comment-id:3504212929 --> @lib4u commented on GitHub (Nov 7, 2025): > I solved this like this, I am using docker swarm. > > I had to run the container as 'root' and replaced the startup command like so (its not great practice, and takes a bit to deploy, but it works): > > # Run as root to install deps; simplest way to avoid baking a custom image. > user: "0" > image: documenso/documenso:latest > command: > - sh > - -lc > - | > set -e > > # 1) Wait for signing cert (mounted via Docker config) > for i in $$(seq 1 60); do > [ -f /opt/documenso/cert.p12 ] && break > echo "Waiting for cert..." && sleep 2 > done > > # 2) Prepare env so playwright installs where runtime user will look > export HOME=/home/nodejs > mkdir -p "$HOME/.cache/ms-playwright" > export PLAYWRIGHT_BROWSERS_PATH="$HOME/.cache/ms-playwright" > export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=1 > > # 3) Install OS deps (Alpine or Debian). Add glibc compat on Alpine. > if command -v apk >/dev/null 2>&1; then > echo "Installing Alpine deps for Playwright..." > apk add --no-cache \ > ca-certificates ttf-freefont font-noto \ > nss freetype harfbuzz libstdc++ \ > libx11 libxcomposite libxdamage libxrandr libxkbcommon \ > alsa-lib pango gtk+3.0 at-spi2-core \ > gcompat libc6-compat > elif command -v apt-get >/dev/null 2>&1; then > echo "Installing Debian/Ubuntu deps for Playwright..." > apt-get update > apt-get install -y --no-install-recommends \ > ca-certificates fonts-noto-color-emoji ttf-freefont \ > libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 \ > libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \ > libpango-1.0-0 libasound2 > rm -rf /var/lib/apt/lists/* > else > echo "WARN: No apk/apt-get available; skipping OS deps install" > fi > > # 4) Download Chromium to nodejs' cache (even though we are root) > npx playwright install chromium || true > > # 5) Make sure nodejs can read the downloaded browsers > NODE_UID=$$(id -u nodejs 2>/dev/null || echo 1001) > NODE_GID=$$(id -g nodejs 2>/dev/null || echo 1001) > chown -R "$NODE_UID:$NODE_GID" "$HOME" || true > > echo "Starting Documenso..." > exec docker-entrypoint.sh sh start.sh wow this really works for me, thanks bro
Author
Owner

@michaelmcg commented on GitHub (Nov 27, 2025):

Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it.

 ln -s /usr/bin/chromium-browser
  /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell

Example Dockerfile:

FROM documenso/documenso:latest

USER root

# Install Playwright dependencies (Alpine)
RUN apk add --no-cache \
    chromium \
    nss \
    freetype \
    harfbuzz \
    ca-certificates \
    ttf-freefont \
    font-noto-emoji

# Create the expected Playwright directory structure and symlink to system chromium
RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \
    mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \
    chown -R nodejs:nodejs /home/nodejs/.cache

USER nodejs

I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert:

openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy

Afterwards, I was able to successfully complete a workflow.

<!-- gh-comment-id:3586549128 --> @michaelmcg commented on GitHub (Nov 27, 2025): Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it. ``` ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell ``` Example Dockerfile: ``` FROM documenso/documenso:latest USER root # Install Playwright dependencies (Alpine) RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ ttf-freefont \ font-noto-emoji # Create the expected Playwright directory structure and symlink to system chromium RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \ ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \ mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \ ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \ chown -R nodejs:nodejs /home/nodejs/.cache USER nodejs ``` I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert: ``` openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy ``` Afterwards, I was able to successfully complete a workflow.
Author
Owner

@CodeBleu commented on GitHub (Dec 1, 2025):

Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it.

 ln -s /usr/bin/chromium-browser
  /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell

Example Dockerfile:

FROM documenso/documenso:latest

USER root

# Install Playwright dependencies (Alpine)
RUN apk add --no-cache \
    chromium \
    nss \
    freetype \
    harfbuzz \
    ca-certificates \
    ttf-freefont \
    font-noto-emoji

# Create the expected Playwright directory structure and symlink to system chromium
RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \
    mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \
    chown -R nodejs:nodejs /home/nodejs/.cache

USER nodejs

I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert:

openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy

Afterwards, I was able to successfully complete a workflow.

This worked for me as well. Thanks!

I will note that my logs did show this, even though it shows "COMPLETED" now in the Background Jobs for sealing the doc.

Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.
at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11)
at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10)
at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33)
at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21)
at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12)
at async Promise.all (index 0)
at async file:///app/apps/remix/build/server/hono/packages/lib/server-only/document/send-completed-email.js:163:26
at async Promise.all (index 0)
at async sendCompletedEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/document/send-completed-email.js:150:3)
at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/internal/seal-document.handler.js:213:7

<!-- gh-comment-id:3598595364 --> @CodeBleu commented on GitHub (Dec 1, 2025): > Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it. > > ``` > ln -s /usr/bin/chromium-browser > /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell > ``` > > Example Dockerfile: > > ``` > FROM documenso/documenso:latest > > USER root > > # Install Playwright dependencies (Alpine) > RUN apk add --no-cache \ > chromium \ > nss \ > freetype \ > harfbuzz \ > ca-certificates \ > ttf-freefont \ > font-noto-emoji > > # Create the expected Playwright directory structure and symlink to system chromium > RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \ > ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \ > mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \ > ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \ > chown -R nodejs:nodejs /home/nodejs/.cache > > USER nodejs > ``` > > I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert: > > ``` > openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy > ``` > > Afterwards, I was able to successfully complete a workflow. This worked for me as well. Thanks! I will note that my logs did show this, even though it shows "COMPLETED" now in the Background Jobs for sealing the doc. > Error: A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition. > at renderToStringImpl (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7002:11) > at Module.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js:7084:10) > at Module.render (file:///app/node_modules/@react-email/render/dist/node/index.mjs:71:33) > at renderWithI18N (file:///app/apps/remix/build/server/hono/packages/email/render.js:33:21) > at renderEmailWithI18N (file:///app/apps/remix/build/server/hono/packages/lib/utils/render-email-with-i18n.js:14:12) > at async Promise.all (index 0) > at async file:///app/apps/remix/build/server/hono/packages/lib/server-only/document/send-completed-email.js:163:26 > at async Promise.all (index 0) > at async sendCompletedEmail (file:///app/apps/remix/build/server/hono/packages/lib/server-only/document/send-completed-email.js:150:3) > at async file:///app/apps/remix/build/server/hono/packages/lib/jobs/definitions/internal/seal-document.handler.js:213:7
Author
Owner

@Novapixel1010 commented on GitHub (Dec 1, 2025):

Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it.

 ln -s /usr/bin/chromium-browser
  /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell

Example Dockerfile:

FROM documenso/documenso:latest

USER root

# Install Playwright dependencies (Alpine)
RUN apk add --no-cache \
    chromium \
    nss \
    freetype \
    harfbuzz \
    ca-certificates \
    ttf-freefont \
    font-noto-emoji

# Create the expected Playwright directory structure and symlink to system chromium
RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \
    mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \
    ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \
    chown -R nodejs:nodejs /home/nodejs/.cache

USER nodejs

I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert:

openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy

Afterwards, I was able to successfully complete a workflow.

Last I checked Playwright’s lacks official Alpine support. So I would stick with

###########################
#     RUNNER CONTAINER    #
###########################
FROM node:22-bookworm-slim AS runner

USER root

# System libs & fonts for headless Chromium
RUN apt-get update && apt-get install -y --no-install-recommends \
      ca-certificates curl git \
      libnss3 libnss3-tools libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 \
      libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \
      libasound2 libx11-6 libxext6 libxshmfence1 libxrender1 \
      fonts-liberation fonts-noto fonts-noto-cjk fonts-noto-color-emoji \
  && rm -rf /var/lib/apt/lists/*

# Where Playwright will put browsers (make it now and chown later)
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
RUN mkdir -p /ms-playwright

# Create non-root user WITH a real home directory
RUN addgroup --system --gid 1001 nodejs \
 && adduser  --system --uid 1001 --home /home/nodejs --ingroup nodejs nodejs \
 && mkdir -p /home/nodejs/.npm /app \
 && chown -R nodejs:nodejs /home/nodejs /ms-playwright /app

# Make sure npm knows where to write cache/logs as this user
ENV HOME=/home/nodejs
ENV NPM_CONFIG_CACHE=/home/nodejs/.npm
ENV HUSKY=0
ENV DOCKER_OUTPUT=1

WORKDIR /app
USER nodejs

# Ensure the lockfile is present for `npm ci`
COPY --from=builder --chown=nodejs:nodejs /app/out/json/ .
COPY --from=builder --chown=nodejs:nodejs /app/out/package-lock.json ./package-lock.json
# Tailwind config
COPY --from=builder --chown=nodejs:nodejs /app/out/full/packages/tailwind-config ./packages/tailwind-config

# Now this will succeed
RUN npm ci --only=production

# download browsers that MATCH the local Playwright version
# (no --with-deps needed on Debian; system libs already installed)
RUN npx playwright install chromium

# Automatically leverage output traces to reduce image size
# https://nodejs.org/docs/advanced-features/output-file-tracing
COPY --from=installer --chown=nodejs:nodejs /app/apps/remix/build ./apps/remix/build
COPY --from=installer --chown=nodejs:nodejs /app/apps/remix/public ./apps/remix/public

# Copy the prisma binary, schema and migrations
COPY --from=installer --chown=nodejs:nodejs /app/packages/prisma/schema.prisma ./packages/prisma/schema.prisma
COPY --from=installer --chown=nodejs:nodejs /app/packages/prisma/migrations ./packages/prisma/migrations

# Generate the prisma client again
RUN npx prisma generate --schema ./packages/prisma/schema.prisma


# Get the start script from docker/
COPY --chown=nodejs:nodejs ./docker/start.sh /app/apps/remix/start.sh

WORKDIR /app/apps/remix

CMD ["sh", "start.sh"]

This is what worked for me. I have not tried this on V2 yet but I should be trying it today.

<!-- gh-comment-id:3598683533 --> @Novapixel1010 commented on GitHub (Dec 1, 2025): > Seems like I was able to get this resolved by creating a custom Dockerfile that installs Alpine's chromium package and then symlink'd it. > > ``` > ln -s /usr/bin/chromium-browser > /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell > ``` > > Example Dockerfile: > > ``` > FROM documenso/documenso:latest > > USER root > > # Install Playwright dependencies (Alpine) > RUN apk add --no-cache \ > chromium \ > nss \ > freetype \ > harfbuzz \ > ca-certificates \ > ttf-freefont \ > font-noto-emoji > > # Create the expected Playwright directory structure and symlink to system chromium > RUN mkdir -p /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux && \ > ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium_headless_shell-1194/chrome-linux/headless_shell && \ > mkdir -p /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux && \ > ln -s /usr/bin/chromium-browser /home/nodejs/.cache/ms-playwright/chromium-1194/chrome-linux/chrome && \ > chown -R nodejs:nodejs /home/nodejs/.cache > > USER nodejs > ``` > > I did encounter one issue after this (Failed to get private key bags), resulting in having to use the -legacy flag to generate the p12 cert: > > ``` > openssl pkcs12 -export -out cert.p12 -inkey key.pem -in cert.pem -passout pass:yourpassword -legacy > ``` > > Afterwards, I was able to successfully complete a workflow. Last I checked Playwright’s lacks official Alpine support. So I would stick with ``` ########################### # RUNNER CONTAINER # ########################### FROM node:22-bookworm-slim AS runner USER root # System libs & fonts for headless Chromium RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl git \ libnss3 libnss3-tools libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 \ libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 \ libasound2 libx11-6 libxext6 libxshmfence1 libxrender1 \ fonts-liberation fonts-noto fonts-noto-cjk fonts-noto-color-emoji \ && rm -rf /var/lib/apt/lists/* # Where Playwright will put browsers (make it now and chown later) ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright RUN mkdir -p /ms-playwright # Create non-root user WITH a real home directory RUN addgroup --system --gid 1001 nodejs \ && adduser --system --uid 1001 --home /home/nodejs --ingroup nodejs nodejs \ && mkdir -p /home/nodejs/.npm /app \ && chown -R nodejs:nodejs /home/nodejs /ms-playwright /app # Make sure npm knows where to write cache/logs as this user ENV HOME=/home/nodejs ENV NPM_CONFIG_CACHE=/home/nodejs/.npm ENV HUSKY=0 ENV DOCKER_OUTPUT=1 WORKDIR /app USER nodejs # Ensure the lockfile is present for `npm ci` COPY --from=builder --chown=nodejs:nodejs /app/out/json/ . COPY --from=builder --chown=nodejs:nodejs /app/out/package-lock.json ./package-lock.json # Tailwind config COPY --from=builder --chown=nodejs:nodejs /app/out/full/packages/tailwind-config ./packages/tailwind-config # Now this will succeed RUN npm ci --only=production # download browsers that MATCH the local Playwright version # (no --with-deps needed on Debian; system libs already installed) RUN npx playwright install chromium # Automatically leverage output traces to reduce image size # https://nodejs.org/docs/advanced-features/output-file-tracing COPY --from=installer --chown=nodejs:nodejs /app/apps/remix/build ./apps/remix/build COPY --from=installer --chown=nodejs:nodejs /app/apps/remix/public ./apps/remix/public # Copy the prisma binary, schema and migrations COPY --from=installer --chown=nodejs:nodejs /app/packages/prisma/schema.prisma ./packages/prisma/schema.prisma COPY --from=installer --chown=nodejs:nodejs /app/packages/prisma/migrations ./packages/prisma/migrations # Generate the prisma client again RUN npx prisma generate --schema ./packages/prisma/schema.prisma # Get the start script from docker/ COPY --chown=nodejs:nodejs ./docker/start.sh /app/apps/remix/start.sh WORKDIR /app/apps/remix CMD ["sh", "start.sh"] ``` This is what worked for me. I have not tried this on V2 yet but I should be trying it today.
Author
Owner

@skttbv commented on GitHub (Dec 30, 2025):

I think this is the most important bug that needs to be solved on the docker image, but just solved with the help of this thread, thank you

<!-- gh-comment-id:3698703941 --> @skttbv commented on GitHub (Dec 30, 2025): I think this is the most important bug that needs to be solved on the docker image, but just solved with the help of this thread, thank you
Author
Owner

@Ange7 commented on GitHub (Dec 30, 2025):

I've paid it, but despite signing, it still shows as outstanding ;(
Image Image

Please follow the following : https://github.com/documenso/documenso/issues/1634#issuecomment-2948258699

Create a new docker-compose.yml with the following contents :

services:
  chrome:
    image: browserless/chrome:latest
    container_name: Chrome
    hostname: headless
    ports:
      - "3001:3000"
    environment:
      - MAX_CONCURRENT_SESSIONS=10
      - MAX_QUEUE_LENGTH=20

And then within the folder of this "docker-compose.yml" execute the command :

 docker compose up -d

This will result it :

debian@vps:~/headless$ docker compose up -d
[+] Running 2/2
 ✔ Network headless_default  Created                                                                                        0.1s
 ✔ Container Chrome          Started                            

Then you can tap into the "headless" container named "Chrome" and you shall see something similar to this :

2025-10-07T10:37:51.574596453Z Running on port 3000
2025-10-07T10:37:51.574599781Z  Localhost        ws:localhost:3000
2025-10-07T10:37:51.574603190Z  Local network    ws:172.19.0.2:3000
2025-10-07T10:37:51.574606283Z 2025-10-07T10:37:51.574Z browserless:server
2025-10-07T10:37:51.574609443Z Get started at    https://www.browserless.io/docs/start
2025-10-07T10:37:51.574612409Z Get a license at  https://www.browserless.io/sign-up?type=commercial
2025-10-07T10:37:51.574615362Z Get support at    https://www.browserless.io/contact
2025-10-07T10:37:51.574618239Z
2025-10-07T10:37:51.574621033Z Happy coding!

Now the system has told you what is the local network WS address "2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000"

Nowing this now go to your DOCUMENSO instance and add a new ENV variable :

NEXT_PRIVATE_BROWSERLESS_URL=YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG

Change the "YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG" value to the value needed, in this case : "ws:172.19.0.2:3000"

Then you will see once a docuemnts is initialized in the "HEADLESS" chrome instance logs something like :

2025-10-07T10:55:43.008018905Z   "executablePath": "/usr/bin/google-chrome",
2025-10-07T10:55:43.008021872Z   "handleSIGINT": false,
2025-10-07T10:55:43.008024649Z   "handleSIGTERM": false,
2025-10-07T10:55:43.008027445Z   "handleSIGHUP": false
2025-10-07T10:55:43.008030224Z }
2025-10-07T10:55:43.035320412Z 2025-10-07T10:55:43.035Z browserless:chrome-helper Garbage collecting and removing listeners
2025-10-07T10:55:43.037297346Z 2025-10-07T10:55:43.037Z browserless:chrome-helper Browser process 9920cc39-27f2-4778-9d69-19a7f32bff91 has closed, cleaning up.
2025-10-07T10:55:43.241098684Z 2025-10-07T10:55:43.240Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gaOpmC removed successfully
2025-10-07T10:55:43.367683479Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Chrome PID: 144
2025-10-07T10:55:43.367986980Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Finding prior pages
2025-10-07T10:55:43.379363433Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Found 1 pages
2025-10-07T10:55:43.379451431Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Setting up page Unknown
2025-10-07T10:55:43.379470446Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace"
2025-10-07T10:55:43.380415568Z 2025-10-07T10:55:43.380Z browserless:system Chrome launched 381ms
2025-10-07T10:55:43.380428788Z 2025-10-07T10:55:43.380Z browserless:system Got chrome instance
2025-10-07T10:55:43.380550907Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Starting session.
2025-10-07T10:55:43.380663521Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Proxying request to /devtools/browser route: ws://127.0.0.1:39879/devtools/browser/5e336ed6-a402-4936-84ed-d73fcd730ce1.
2025-10-07T10:55:43.381984626Z 2025-10-07T10:55:43.381Z browserless:chrome-helper Setting up file:// protocol request rejection
2025-10-07T10:55:43.786293068Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Setting up page Unknown
2025-10-07T10:55:43.786326919Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace"
2025-10-07T10:55:43.803642488Z 2025-10-07T10:55:43.803Z browserless:chrome-helper Setting up file:// protocol request rejection
2025-10-07T10:55:46.538786590Z 2025-10-07T10:55:46.538Z browserless:server EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Recording successful stat and cleaning up.
2025-10-07T10:55:46.539005940Z 2025-10-07T10:55:46.538Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Cleaning up job
2025-10-07T10:55:46.539075477Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser not needed, closing
2025-10-07T10:55:46.539165787Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Shutting down browser with close command
2025-10-07T10:55:46.539307653Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser cleanup complete.
2025-10-07T10:55:46.539458430Z 2025-10-07T10:55:46.539Z browserless:server Current workload complete.
2025-10-07T10:55:46.539585829Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Sending SIGKILL signal to browser process 144
2025-10-07T10:55:46.544229658Z 2025-10-07T10:55:46.544Z browserless:chrome-helper Removing temp data-dir /tmp/browserless-data-dir-gJJ0mG
2025-10-07T10:55:46.616405431Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Garbage collecting and removing listeners
2025-10-07T10:55:46.616673134Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Browser process 5e336ed6-a402-4936-84ed-d73fcd730ce1 has closed, cleaning up.
2025-10-07T10:55:46.618923538Z 2025-10-07T10:55:46.618Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gJJ0mG removed successfully
2025-10-07T10:56:26.029245272Z 2025-10-07T10:56:26.028Z browserless:server Health check stats: CPU 10%,6% MEM: 25%,21%
2025-10-07T10:56:26.029341340Z 2025-10-07T10:56:26.029Z browserless:server Current period usage: {"date":1759834286025,"error":0,"rejected":0,"successful":2,"timedout":0,"totalTime":7434,"maxTime":3894,"minTime":3540,"meanTime":3717,"maxConcurrent":1,"units":2}

Then you know its working same as in the DOCUMENSO instance logs:

2025-10-07T10:55:37.032570165Z 2025/10/07 11:55AM 30 | pid=223 hostname=documenso ipAddress=X.X.X.X userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 requestId=75cwwwuxau4mf8dg2khda nonBatchedRequestId=mg4rdm4bunf3xibcx2osb input={"documentId":42} 
2025-10-07T10:55:37.061591933Z Submitting job to endpoint: http://documenso/api/jobs/send.recipient.signed.email/cmggg1nc1000vsa6717x1vy2q
2025-10-07T10:55:37.133980878Z [JOBS]: Triggering job send.recipient.signed.email with payload { documentId: 42, recipientId: 90 }
2025-10-07T10:55:37.231636788Z Submitting job to endpoint: http://documenso/api/jobs/internal.seal-document/cmggg1ngr000wsa67cr12vlct
2025-10-07T10:55:37.247946404Z [JOBS]: Triggering job internal.seal-document with payload {
2025-10-07T10:55:37.247983112Z   documentId: 42,
2025-10-07T10:55:37.247991620Z   requestMetadata: {
2025-10-07T10:55:37.247997135Z     ipAddress: 'X.X.X.X',
2025-10-07T10:55:37.248002870Z     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
2025-10-07T10:55:37.248008683Z   }
2025-10-07T10:55:37.248013937Z }

I try this but not working

Nothing in log...

documenso_1    | 🚀 Starting Documenso...
documenso_1    | 
documenso_1    | 🔐 Checking certificate configuration...
documenso_1    | ✅ Certificate file found and readable - document signing is ready!
documenso_1    | 
documenso_1    | 📚 Useful Links:
documenso_1    | 📖 Documentation: https://docs.documenso.com
documenso_1    | 🐳 Self-hosting guide: https://docs.documenso.com/developers/self-hosting
documenso_1    | 🔐 Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate
documenso_1    | 🏥 Health check: http://localhost:3000/api/health
documenso_1    | 📊 Certificate status: http://localhost:3000/api/certificate-status
documenso_1    | 👥 Community: https://github.com/documenso/documenso
documenso_1    | 
documenso_1    | 🗄️  Running database migrations...
postgres_1     | 
postgres_1     | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1     | 
postgres_1     | 2025-12-30 18:16:26.750 UTC [1] LOG:  starting PostgreSQL 15.15 (Debian 15.15-1.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
postgres_1     | 2025-12-30 18:16:26.751 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres_1     | 2025-12-30 18:16:26.751 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_1     | 2025-12-30 18:16:26.753 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1     | 2025-12-30 18:16:26.762 UTC [30] LOG:  database system was shut down at 2025-12-30 18:16:21 UTC
postgres_1     | 2025-12-30 18:16:26.770 UTC [1] LOG:  database system is ready to accept connections
browserless    | 2025-12-30T18:16:28.164Z browserless:server Using configuration: 
browserless    | 2025-12-30T18:16:28.168Z browserless:server {
browserless    |   CONNECTION_TIMEOUT: 60000,
browserless    |   MAX_CONCURRENT_SESSIONS: 10,
browserless    |   QUEUE_LENGTH: 20,
browserless    |   SINGLE_RUN: false,
browserless    |   CHROME_REFRESH_TIME: 1800000,
browserless    |   KEEP_ALIVE: false,
browserless    |   DEFAULT_BLOCK_ADS: false,
browserless    |   DEFAULT_HEADLESS: 'new',
browserless    |   DEFAULT_LAUNCH_ARGS: [],
browserless    |   DEFAULT_IGNORE_DEFAULT_ARGS: false,
browserless    |   DEFAULT_IGNORE_HTTPS_ERRORS: false,
browserless    |   DEFAULT_DUMPIO: false,
browserless    |   DEFAULT_STEALTH: false,
browserless    |   DEFAULT_USER_DATA_DIR: undefined,
browserless    |   PREBOOT_CHROME: false,
browserless    |   PREBOOT_QUANTITY: 0,
browserless    |   PRINT_GET_STARTED_LINKS: true,
browserless    |   PRINT_NETWORK_INFO: true,
browserless    |   DEBUG: 'browserless*',
browserless    |   DISABLED_FEATURES: [],
browserless    |   ENABLE_CORS: false,
browserless    |   ENABLE_API_GET: false,
browserless    |   TOKEN: null,
browserless    |   ENABLE_HEAP_DUMP: false,
browserless    |   ALLOW_FILE_PROTOCOL: false,
browserless    |   DISABLE_AUTO_SET_DOWNLOAD_BEHAVIOR: false,
browserless    |   FUNCTION_BUILT_INS: [ 'url' ],
browserless    |   FUNCTION_ENV_VARS: [],
browserless    |   FUNCTION_ENABLE_INCOGNITO_MODE: false,
browserless    |   FUNCTION_EXTERNALS: [ 'lighthouse', 'node-pdftk', 'sharp' ],
browserless    |   WORKSPACE_DIR: '/usr/src/app/workspace',
browserless    |   WORKSPACE_DELETE_EXPIRED: false,
browserless    |   WORKSPACE_EXPIRE_DAYS: 30,
browserless    |   FAILED_HEALTH_URL: null,
browserless    |   QUEUE_ALERT_URL: null,
browserless    |   REJECT_ALERT_URL: null,
browserless    |   TIMEOUT_ALERT_URL: null,
browserless    |   ERROR_ALERT_URL: null,
browserless    |   SESSION_CHECK_FAIL_URL: null,
browserless    |   PRE_REQUEST_HEALTH_CHECK: false,
browserless    |   EXIT_ON_HEALTH_FAILURE: false,
browserless    |   MAX_CPU_PERCENT: 99,
browserless    |   MAX_MEMORY_PERCENT: 99,
browserless    |   METRICS_JSON_PATH: null,
browserless    |   HOST: '0.0.0.0',
browserless    |   PORT: 3000,
browserless    |   SOCKET_CLOSE_METHOD: 'http',
browserless    |   PROXY_URL: undefined,
browserless    |   MAX_PAYLOAD_SIZE: '5mb'
browserless    | }
browserless    | 2025-12-30T18:16:28.169Z browserless:server 
browserless    | 
browserless    | Running on port 3000
browserless    | 	Localhost	 ws:localhost:3000
browserless    | 	Local network	 ws:172.24.0.2:3000
browserless    | 2025-12-30T18:16:28.169Z browserless:server 
browserless    | Get started at	 https://www.browserless.io/docs/start
browserless    | Get a license at	 https://www.browserless.io/sign-up?type=commercial
browserless    | Get support at	 https://www.browserless.io/contact
browserless    | 
browserless    | Happy coding!
browserless    | 
documenso_1    | Prisma schema loaded from ../../packages/prisma/schema.prisma
documenso_1    | Datasource "db": PostgreSQL database "documenso", schema "public" at "postgres:5432"
documenso_1    | 
documenso_1    | 142 migrations found in prisma/migrations
documenso_1    | 
documenso_1    | 
documenso_1    | No pending migrations to apply.
documenso_1    | npm notice
documenso_1    | npm notice New major version of npm available! 10.9.2 -> 11.7.0
documenso_1    | npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0
documenso_1    | npm notice To update run: npm install -g npm@11.7.0
documenso_1    | npm notice
documenso_1    | 🌟 Starting Documenso server...
documenso_1    | [Telemetry] Telemetry is enabled. Documenso collects anonymous usage data to help improve the product.
documenso_1    | [Telemetry] We collect: app version, installation ID, and node ID. No personal data, document contents, or user information is collected.
documenso_1    | [Telemetry] To disable telemetry, set DOCUMENSO_DISABLE_TELEMETRY=true in your environment variables.
documenso_1    | [Telemetry] Learn more: https://documenso.com/docs/developers/self-hosting/telemetry
documenso_1    | [18:16:52.026] INFO (72):
/app/apps $ echo $NEXT_PRIVATE_BROWSERLESS_URL
ws:172.24.0.2:3000

but some errors when i'm on sign page

Image
<!-- gh-comment-id:3700124347 --> @Ange7 commented on GitHub (Dec 30, 2025): > > I've paid it, but despite signing, it still shows as outstanding ;( > > <img alt="Image" width="786" height="191" src="https://private-user-images.githubusercontent.com/205684005/497563527-1e69d6fc-624a-494a-ae98-7bfac3158373.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTk4Mzc5NDIsIm5iZiI6MTc1OTgzNzY0MiwicGF0aCI6Ii8yMDU2ODQwMDUvNDk3NTYzNTI3LTFlNjlkNmZjLTYyNGEtNDk0YS1hZTk4LTdiZmFjMzE1ODM3My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMDA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTAwN1QxMTQ3MjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNGRmNWNmZDg5NTQ3YWRjOTA0YzdkMmVjNzA2MjJjMjdlNjQzNTA0MDBmOTJhZTBkMGVjZTk1YmYyN2UyOGUyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.0ifkT6VgoOcwu3xXxJejzhb_bj9CoKCJI9ZOhXKXfUI"> <img alt="Image" width="951" height="701" src="https://private-user-images.githubusercontent.com/205684005/497563435-c672c5e5-e1e8-4add-80f7-5893af40e799.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTk4Mzc5NDIsIm5iZiI6MTc1OTgzNzY0MiwicGF0aCI6Ii8yMDU2ODQwMDUvNDk3NTYzNDM1LWM2NzJjNWU1LWUxZTgtNGFkZC04MGY3LTU4OTNhZjQwZTc5OS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUxMDA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MTAwN1QxMTQ3MjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTQ4YTJiYjFjZWZlMjJkOTZjYWE0ZGI2Yjg1MzEyNmE1OWQ4NTIzZDNjZTVjNmJiMzhmZDhhZmU1ZjhlMTY5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.3dkgpnYymlyCniGoKFUYFLWx24T3nzxFYZx20bL95jE"> > > Please follow the following : [https://github.com/documenso/documenso/issues/1634#issuecomment-2948258699](1634) > > Create a new docker-compose.yml with the following contents : > > ``` > services: > chrome: > image: browserless/chrome:latest > container_name: Chrome > hostname: headless > ports: > - "3001:3000" > environment: > - MAX_CONCURRENT_SESSIONS=10 > - MAX_QUEUE_LENGTH=20 > ``` > > And then within the folder of this "docker-compose.yml" execute the command : > > ``` > docker compose up -d > ``` > > This will result it : > > ``` > debian@vps:~/headless$ docker compose up -d > [+] Running 2/2 > ✔ Network headless_default Created 0.1s > ✔ Container Chrome Started > ``` > > Then you can tap into the "headless" container named "Chrome" and you shall see something similar to this : > > ``` > 2025-10-07T10:37:51.574596453Z Running on port 3000 > 2025-10-07T10:37:51.574599781Z Localhost ws:localhost:3000 > 2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000 > 2025-10-07T10:37:51.574606283Z 2025-10-07T10:37:51.574Z browserless:server > 2025-10-07T10:37:51.574609443Z Get started at https://www.browserless.io/docs/start > 2025-10-07T10:37:51.574612409Z Get a license at https://www.browserless.io/sign-up?type=commercial > 2025-10-07T10:37:51.574615362Z Get support at https://www.browserless.io/contact > 2025-10-07T10:37:51.574618239Z > 2025-10-07T10:37:51.574621033Z Happy coding! > ``` > > Now the system has told you what is the local network WS address "2025-10-07T10:37:51.574603190Z Local network ws:172.19.0.2:3000" > > Nowing this now go to your DOCUMENSO instance and add a new ENV variable : > > ``` > NEXT_PRIVATE_BROWSERLESS_URL=YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG > ``` > > Change the "YOUR_LOCAL_WS_URL_FROM_HEADLESS_LOG" value to the value needed, in this case : "ws:172.19.0.2:3000" > > Then you will see once a docuemnts is initialized in the "HEADLESS" chrome instance logs something like : > > ``` > 2025-10-07T10:55:43.008018905Z "executablePath": "/usr/bin/google-chrome", > 2025-10-07T10:55:43.008021872Z "handleSIGINT": false, > 2025-10-07T10:55:43.008024649Z "handleSIGTERM": false, > 2025-10-07T10:55:43.008027445Z "handleSIGHUP": false > 2025-10-07T10:55:43.008030224Z } > 2025-10-07T10:55:43.035320412Z 2025-10-07T10:55:43.035Z browserless:chrome-helper Garbage collecting and removing listeners > 2025-10-07T10:55:43.037297346Z 2025-10-07T10:55:43.037Z browserless:chrome-helper Browser process 9920cc39-27f2-4778-9d69-19a7f32bff91 has closed, cleaning up. > 2025-10-07T10:55:43.241098684Z 2025-10-07T10:55:43.240Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gaOpmC removed successfully > 2025-10-07T10:55:43.367683479Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Chrome PID: 144 > 2025-10-07T10:55:43.367986980Z 2025-10-07T10:55:43.367Z browserless:chrome-helper Finding prior pages > 2025-10-07T10:55:43.379363433Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Found 1 pages > 2025-10-07T10:55:43.379451431Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Setting up page Unknown > 2025-10-07T10:55:43.379470446Z 2025-10-07T10:55:43.379Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace" > 2025-10-07T10:55:43.380415568Z 2025-10-07T10:55:43.380Z browserless:system Chrome launched 381ms > 2025-10-07T10:55:43.380428788Z 2025-10-07T10:55:43.380Z browserless:system Got chrome instance > 2025-10-07T10:55:43.380550907Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Starting session. > 2025-10-07T10:55:43.380663521Z 2025-10-07T10:55:43.380Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Proxying request to /devtools/browser route: ws://127.0.0.1:39879/devtools/browser/5e336ed6-a402-4936-84ed-d73fcd730ce1. > 2025-10-07T10:55:43.381984626Z 2025-10-07T10:55:43.381Z browserless:chrome-helper Setting up file:// protocol request rejection > 2025-10-07T10:55:43.786293068Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Setting up page Unknown > 2025-10-07T10:55:43.786326919Z 2025-10-07T10:55:43.786Z browserless:chrome-helper Injecting download dir "/usr/src/app/workspace" > 2025-10-07T10:55:43.803642488Z 2025-10-07T10:55:43.803Z browserless:chrome-helper Setting up file:// protocol request rejection > 2025-10-07T10:55:46.538786590Z 2025-10-07T10:55:46.538Z browserless:server EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Recording successful stat and cleaning up. > 2025-10-07T10:55:46.539005940Z 2025-10-07T10:55:46.538Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Cleaning up job > 2025-10-07T10:55:46.539075477Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser not needed, closing > 2025-10-07T10:55:46.539165787Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Shutting down browser with close command > 2025-10-07T10:55:46.539307653Z 2025-10-07T10:55:46.539Z browserless:job EVMMM7J08AZ84PYRMSZX83YO4MAOJ1U8: Browser cleanup complete. > 2025-10-07T10:55:46.539458430Z 2025-10-07T10:55:46.539Z browserless:server Current workload complete. > 2025-10-07T10:55:46.539585829Z 2025-10-07T10:55:46.539Z browserless:chrome-helper Sending SIGKILL signal to browser process 144 > 2025-10-07T10:55:46.544229658Z 2025-10-07T10:55:46.544Z browserless:chrome-helper Removing temp data-dir /tmp/browserless-data-dir-gJJ0mG > 2025-10-07T10:55:46.616405431Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Garbage collecting and removing listeners > 2025-10-07T10:55:46.616673134Z 2025-10-07T10:55:46.616Z browserless:chrome-helper Browser process 5e336ed6-a402-4936-84ed-d73fcd730ce1 has closed, cleaning up. > 2025-10-07T10:55:46.618923538Z 2025-10-07T10:55:46.618Z browserless:chrome-helper Temp dir /tmp/browserless-data-dir-gJJ0mG removed successfully > 2025-10-07T10:56:26.029245272Z 2025-10-07T10:56:26.028Z browserless:server Health check stats: CPU 10%,6% MEM: 25%,21% > 2025-10-07T10:56:26.029341340Z 2025-10-07T10:56:26.029Z browserless:server Current period usage: {"date":1759834286025,"error":0,"rejected":0,"successful":2,"timedout":0,"totalTime":7434,"maxTime":3894,"minTime":3540,"meanTime":3717,"maxConcurrent":1,"units":2} > ``` > > Then you know its working same as in the DOCUMENSO instance logs: > > ``` > 2025-10-07T10:55:37.032570165Z 2025/10/07 11:55AM 30 | pid=223 hostname=documenso ipAddress=X.X.X.X userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 requestId=75cwwwuxau4mf8dg2khda nonBatchedRequestId=mg4rdm4bunf3xibcx2osb input={"documentId":42} > 2025-10-07T10:55:37.061591933Z Submitting job to endpoint: http://documenso/api/jobs/send.recipient.signed.email/cmggg1nc1000vsa6717x1vy2q > 2025-10-07T10:55:37.133980878Z [JOBS]: Triggering job send.recipient.signed.email with payload { documentId: 42, recipientId: 90 } > 2025-10-07T10:55:37.231636788Z Submitting job to endpoint: http://documenso/api/jobs/internal.seal-document/cmggg1ngr000wsa67cr12vlct > 2025-10-07T10:55:37.247946404Z [JOBS]: Triggering job internal.seal-document with payload { > 2025-10-07T10:55:37.247983112Z documentId: 42, > 2025-10-07T10:55:37.247991620Z requestMetadata: { > 2025-10-07T10:55:37.247997135Z ipAddress: 'X.X.X.X', > 2025-10-07T10:55:37.248002870Z userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' > 2025-10-07T10:55:37.248008683Z } > 2025-10-07T10:55:37.248013937Z } > ``` I try this but not working Nothing in log... ``` documenso_1 | 🚀 Starting Documenso... documenso_1 | documenso_1 | 🔐 Checking certificate configuration... documenso_1 | ✅ Certificate file found and readable - document signing is ready! documenso_1 | documenso_1 | 📚 Useful Links: documenso_1 | 📖 Documentation: https://docs.documenso.com documenso_1 | 🐳 Self-hosting guide: https://docs.documenso.com/developers/self-hosting documenso_1 | 🔐 Certificate setup: https://docs.documenso.com/developers/self-hosting/signing-certificate documenso_1 | 🏥 Health check: http://localhost:3000/api/health documenso_1 | 📊 Certificate status: http://localhost:3000/api/certificate-status documenso_1 | 👥 Community: https://github.com/documenso/documenso documenso_1 | documenso_1 | 🗄️ Running database migrations... postgres_1 | postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization postgres_1 | postgres_1 | 2025-12-30 18:16:26.750 UTC [1] LOG: starting PostgreSQL 15.15 (Debian 15.15-1.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit postgres_1 | 2025-12-30 18:16:26.751 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 postgres_1 | 2025-12-30 18:16:26.751 UTC [1] LOG: listening on IPv6 address "::", port 5432 postgres_1 | 2025-12-30 18:16:26.753 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" postgres_1 | 2025-12-30 18:16:26.762 UTC [30] LOG: database system was shut down at 2025-12-30 18:16:21 UTC postgres_1 | 2025-12-30 18:16:26.770 UTC [1] LOG: database system is ready to accept connections browserless | 2025-12-30T18:16:28.164Z browserless:server Using configuration: browserless | 2025-12-30T18:16:28.168Z browserless:server { browserless | CONNECTION_TIMEOUT: 60000, browserless | MAX_CONCURRENT_SESSIONS: 10, browserless | QUEUE_LENGTH: 20, browserless | SINGLE_RUN: false, browserless | CHROME_REFRESH_TIME: 1800000, browserless | KEEP_ALIVE: false, browserless | DEFAULT_BLOCK_ADS: false, browserless | DEFAULT_HEADLESS: 'new', browserless | DEFAULT_LAUNCH_ARGS: [], browserless | DEFAULT_IGNORE_DEFAULT_ARGS: false, browserless | DEFAULT_IGNORE_HTTPS_ERRORS: false, browserless | DEFAULT_DUMPIO: false, browserless | DEFAULT_STEALTH: false, browserless | DEFAULT_USER_DATA_DIR: undefined, browserless | PREBOOT_CHROME: false, browserless | PREBOOT_QUANTITY: 0, browserless | PRINT_GET_STARTED_LINKS: true, browserless | PRINT_NETWORK_INFO: true, browserless | DEBUG: 'browserless*', browserless | DISABLED_FEATURES: [], browserless | ENABLE_CORS: false, browserless | ENABLE_API_GET: false, browserless | TOKEN: null, browserless | ENABLE_HEAP_DUMP: false, browserless | ALLOW_FILE_PROTOCOL: false, browserless | DISABLE_AUTO_SET_DOWNLOAD_BEHAVIOR: false, browserless | FUNCTION_BUILT_INS: [ 'url' ], browserless | FUNCTION_ENV_VARS: [], browserless | FUNCTION_ENABLE_INCOGNITO_MODE: false, browserless | FUNCTION_EXTERNALS: [ 'lighthouse', 'node-pdftk', 'sharp' ], browserless | WORKSPACE_DIR: '/usr/src/app/workspace', browserless | WORKSPACE_DELETE_EXPIRED: false, browserless | WORKSPACE_EXPIRE_DAYS: 30, browserless | FAILED_HEALTH_URL: null, browserless | QUEUE_ALERT_URL: null, browserless | REJECT_ALERT_URL: null, browserless | TIMEOUT_ALERT_URL: null, browserless | ERROR_ALERT_URL: null, browserless | SESSION_CHECK_FAIL_URL: null, browserless | PRE_REQUEST_HEALTH_CHECK: false, browserless | EXIT_ON_HEALTH_FAILURE: false, browserless | MAX_CPU_PERCENT: 99, browserless | MAX_MEMORY_PERCENT: 99, browserless | METRICS_JSON_PATH: null, browserless | HOST: '0.0.0.0', browserless | PORT: 3000, browserless | SOCKET_CLOSE_METHOD: 'http', browserless | PROXY_URL: undefined, browserless | MAX_PAYLOAD_SIZE: '5mb' browserless | } browserless | 2025-12-30T18:16:28.169Z browserless:server browserless | browserless | Running on port 3000 browserless | Localhost ws:localhost:3000 browserless | Local network ws:172.24.0.2:3000 browserless | 2025-12-30T18:16:28.169Z browserless:server browserless | Get started at https://www.browserless.io/docs/start browserless | Get a license at https://www.browserless.io/sign-up?type=commercial browserless | Get support at https://www.browserless.io/contact browserless | browserless | Happy coding! browserless | documenso_1 | Prisma schema loaded from ../../packages/prisma/schema.prisma documenso_1 | Datasource "db": PostgreSQL database "documenso", schema "public" at "postgres:5432" documenso_1 | documenso_1 | 142 migrations found in prisma/migrations documenso_1 | documenso_1 | documenso_1 | No pending migrations to apply. documenso_1 | npm notice documenso_1 | npm notice New major version of npm available! 10.9.2 -> 11.7.0 documenso_1 | npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.7.0 documenso_1 | npm notice To update run: npm install -g npm@11.7.0 documenso_1 | npm notice documenso_1 | 🌟 Starting Documenso server... documenso_1 | [Telemetry] Telemetry is enabled. Documenso collects anonymous usage data to help improve the product. documenso_1 | [Telemetry] We collect: app version, installation ID, and node ID. No personal data, document contents, or user information is collected. documenso_1 | [Telemetry] To disable telemetry, set DOCUMENSO_DISABLE_TELEMETRY=true in your environment variables. documenso_1 | [Telemetry] Learn more: https://documenso.com/docs/developers/self-hosting/telemetry documenso_1 | [18:16:52.026] INFO (72): ``` ``` /app/apps $ echo $NEXT_PRIVATE_BROWSERLESS_URL ws:172.24.0.2:3000 ``` but some errors when i'm on sign page <img width="3164" height="46" alt="Image" src="https://github.com/user-attachments/assets/f7aa3fb5-46c1-4bc0-b23d-8ed5d72047e5" />
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/documenso#589
No description provided.