iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
You can run Changedetection.io on a VPS using Docker Compose, but the official project instructions do not establish a provider-specific one-click VPS image. This guide uses the supported Compose deployment, keeps the web interface bound to localhost by default, and explains when to add the optional browser service for JavaScript-heavy pages.
What you need before installing
- A VPS you can access over SSH.
- Docker Engine and the Docker Compose plugin installed on the VPS.
- A domain name only if you plan to put the app behind a reverse proxy.
The official Changedetection.io setup instructions do not specify a minimum VPS size, required Linux distribution, or provider. Choose a server based on your own workload rather than treating an unverified size as an official recommendation.
Deploy Changedetection.io with Docker Compose
The project’s Compose example runs the application image ghcr.io/dgtlmoon/changedetection.io and mounts a named volume at /datastore. That volume preserves the app’s data, including your configuration and watch history, when you recreate the container. The official example is at the Changedetection.io Docker Compose file.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
- Connect to your VPS over SSH. Create a deployment directory and enter it:
mkdir -p ~/changedetection cd ~/changedetection - Create a Compose file. Save the following as
compose.yaml:services: changedetection: image: ghcr.io/dgtlmoon/changedetection.io container_name: changedetection hostname: changedetection volumes: - changedetection-data:/datastore ports: - "127.0.0.1:5000:5000" restart: unless-stopped volumes: changedetection-data:This keeps the official example’s localhost-only binding and persistent data volume. Do not remove
127.0.0.1from the port mapping if your plan is to expose the app through a reverse proxy. - Start the container.
docker compose up -d - Check that it started.
docker compose ps docker compose logs --tail=100 changedetectionThe container should appear as running in the status output. Review the logs for startup errors if it does not.
Reach the web interface safely
The default mapping, 127.0.0.1:5000:5000, makes the app listen on the VPS’s loopback interface rather than directly on its public network interfaces. A browser on your own computer cannot normally open that VPS-local address directly. Use a reverse proxy configured on the VPS, or an SSH tunnel for temporary access.
Rank #2
Temporary access with an SSH tunnel
From your computer, forward a local port to the VPS’s loopback port:
Recommended Free Tools
ssh -L 5000:127.0.0.1:5000 username@your-vps-address
Keep that SSH session open, then visit http://127.0.0.1:5000 in a browser on your computer. Replace the SSH username and VPS address with your own values.
Rank #3
- HP MicroServer Gen10 Plus Tower Server for Business with Microsoft Windows Server 2019 OS!
- Intel Xeon E-2224 Quad-Core 3.4GHz 8MB CPU, Up To 4.6GHz Turbo
- 32GB (2 x 16GB) DDR4 PC4-21300 2666MHz Unbuffered Memory
- 16TB (4 x 4TB) 7.2K 6Gb/s SATA 3.5" HDDs in RAID
- Hard drives and memory upgrades included separately NOT installed, installation required.
Access through a domain and reverse proxy
For ongoing access, configure a reverse proxy on the VPS to forward requests to http://127.0.0.1:5000, and configure HTTPS at the proxy. Follow the current documentation for the reverse proxy you choose; the Changedetection.io Compose comments describe reverse-proxy use as an arrangement, not a ready-made proxy or TLS configuration. Running the app in Docker alone does not enable TLS. Do not expose the management interface publicly by changing the binding unless you have deliberately configured and secured external access.
Decide whether to add browser-based fetching
Changedetection.io can fetch ordinary pages over HTTP. Some sites render or update their content with JavaScript, so a browser-backed fetcher may be needed to detect the final page content. The project’s Compose example documents an optional separate sockpuppetbrowser service and the PLAYWRIGHT_DRIVER_URL setting for connecting the app to it; see the official Compose example and project README.
Rank #4
| Fetch method | Best fit | What it requires |
|---|---|---|
| Default HTTP fetching | Pages whose relevant content is available in the HTTP response. | The basic Changedetection.io service. |
| Browser-backed fetching | Pages that require browser execution or JavaScript rendering for the content you want to monitor. | An additional browser service and a PLAYWRIGHT_DRIVER_URL pointing to that service’s Compose hostname and port. It also uses browser-runtime resources. |
Start with HTTP fetching. Add the browser service only if a target site is not detected correctly and browser rendering is appropriate for that page. In Compose, use the service name as the hostname in PLAYWRIGHT_DRIVER_URL, so the app can reach the browser service over the Compose network. The official sources do not quantify the additional resource requirement.
Update the deployment and protect its data
The official README’s Compose update flow pulls the current image and recreates the service:
Best Value
docker compose pull && docker compose up -d
Before an upgrade, make a backup of the persistent data volume using a backup method suited to your VPS and Docker setup. The named volume is what keeps the app’s data separate from the replaceable container; do not delete it when removing or rebuilding the service. The README also documents a standalone Docker launch option with persistent storage, but Compose is the path used in this guide: Changedetection.io README.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

