Skip to content

Instantly share code, notes, and snippets.

@benuski
Created January 31, 2024 15:50
Show Gist options
  • Select an option

  • Save benuski/f60c973424cb7c061ac103ea1a02ca96 to your computer and use it in GitHub Desktop.

Select an option

Save benuski/f60c973424cb7c061ac103ea1a02ca96 to your computer and use it in GitHub Desktop.
changedetection.io and browserless v2 docker compose
version: '3.2'
services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:latest
container_name: changedetection
hostname: changedetection
volumes:
- changedetection-data:/datastore
environment:
- PORT=5000
- PUID=1000
- PGID=1000
# Ensure this URL matches the name of the playwright service
- PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?headless=false
ports:
- 5000:5000
restart: unless-stopped
depends_on:
- playwright-chrome
playwright-chrome:
hostname: playwright-chrome
image: ghcr.io/browserless/chrome
restart: unless-stopped
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1024
- SCREEN_DEPTH=16
- ENABLE_DEBUGGER=false
# Increased connection timeout to reduce chances of timeout errors
- TIMEOUT=600000 # Now 10 minutes
# Increased concurrent sessions for better parallel processing
- CONCURRENT=15
volumes:
changedetection-data:
@XBadFellaX
Copy link

XBadFellaX commented Oct 26, 2024

Thank you for providing this docker compose file, it helped me get setup with browserless v2. One tweak, to handle v2.2.0+ of browserless. Source:

As of browserless v2.2.0, for the ghcr.io/browserless/chrome image, the /chrome endpoint must be added to the URL, so e.g.:
PLAYWRIGHT_DRIVER_URL=ws://browserless-chrome:3000/chrome?launch={"headless":false}

Just wanted to say your message saved me so much headache as I was having connection errors in Change Detection for so long. Thank you so much for this.

@henricook
Copy link

henricook commented Nov 17, 2024

Shame that I can't add an emoji to a gist but same here, super helpful (and the comments) thanks!

I'd love an example of how to leverage browserless.io's unblock as part of changedetection too

@oliroe
Copy link

oliroe commented Jul 2, 2025

Hi. Thanks for this, does this not work for sites using javascript?

@imelwebs
Copy link

imelwebs commented Aug 15, 2025

Upd: Here's the docker-compose.yml I used. Works great. Most sites run without a proxy, only a few require one. No warnings or errors.
https://pastebin.com/pATyMgu0
I also used a proxies.json as described in the manual here: https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration (you can leave this out if you don't use proxies or prefer to set them in the web UI instead).

Edit: Updated the docker-compose.yml. This version has been running without any issues for over a year now.

  • If you're running it behind a reverse proxy, comment out the ports: section and adjust the networks accordingly.
  • Browserless chromium is the way to go. I tried every other compatible browser and this is the only one that works reliably with browser steps and the visual filter.
  • You may want to tune shm_size, FETCH_WORKERS, and CONCURRENT to your needs. It runs fine on a cheap VPS, but expect around 500 MB RAM idle. If you have a beefier server, feel free to crank those up.
  • Replace your-very-secure-token with something randomly generated. I used "openssl rand -hex 32".
  • BASE_URL is only relevant if you set up notifications and want the correct server name displayed there, so don't worry too much about it.
  • The HEALTH, MAX_CPU_PERCENT, and MAX_MEMORY_PERCENT settings are there so browserless doesn't crash under load. Instead of dying, it'll return an error and keep running. Useful on a low-end VPS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment