[{"data":1,"prerenderedAt":116},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-changedetectionio-on-a-vps-monitor-any-website-ma-en":6,"promo-bar-likely":115},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-changedetectionio-on-a-vps-monitor-any-website-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":110,"ctaBody":111,"ctaButton":112,"ctaUrl":113,"relatedPosts":114},182,"self-host-changedetectionio-on-a-vps-monitor-any-website",{"fr":12,"en":10,"ar":13,"es":14},"self-host-changedetection-vps","استضافة-changedetectionio-على-vps-مراقبة-تغييرات-المواقع","alojar-changedetection-io-en-un-vps","Self-host Changedetection.io on a VPS: monitor any website","Deploy Changedetection.io on your VPS: open-source website change detection, CSS\u002FXPath filters, 80+ notification channels. v0.60.x regressions and safe update guide.",9,0,false,"2026-07-17T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-changedetection-vps-poster.svg",{"categorySlug":34,"appSlug":35},"monitoring-observability","changedetection","Manually tracking competitor prices, restock alerts, public tenders, and contract updates is exhausting. Changedetection.io (Apache 2.0, 24k+ stars) does it automatically: it watches any URL and fires a notification the moment something changes — via email, Telegram, Slack, Discord, ntfy, or 80+ other channels. Here is how to deploy it on a ServOrbit VPS in minutes, and how to keep it updated without risking a regression.",[38,43,55,59,82,86,90,106],{"type":39,"title":40,"body":41,"items":42},"h2","Why self-host a website change detection tool","SaaS change detection services charge per check, cap the number of monitored URLs, and route your watched content through their servers. Changedetection.io reverses the model: you run it on your VPS, monitor without limit URLs at any frequency, and all data stays on your infrastructure.\n\nBecause it relies on file-based storage with no external database, the overhead is minimal — the container uses under 256 MB of RAM at idle and starts in under 10 seconds. Snapshots of every watched page are stored locally in a Docker volume mounted at `\u002Fdatastore`: your data never leaves your server, even for pages behind authentication.\n\nAdd a Playwright\u002FChromium sidecar for JavaScript-rendered pages and you get full-browser fidelity for SPAs, order counters, and dynamically loaded price elements — things a plain HTTP request can never see.",[],{"type":44,"title":45,"items":46},"ul","What you get with a self-hosted Changedetection.io",[47,48,49,50,51,52,53,54],"Monitor any number of URLs — product pages, tender portals, competitor sites, job boards — at any check interval.","CSS selector, XPath, and keyword filters — watch only the element you care about, not the whole page.","80+ notification channels via Apprise: email (SMTP), Telegram, Slack, Discord, ntfy, Gotify, Matrix, webhooks, and more.","Optional Playwright\u002FChromium sidecar for JavaScript-rendered pages — rendered in a real browser, not a plain HTTP client.","Full diff viewer — see exactly what changed, highlighted in context, with a history of previous snapshots.","Scheduled checks with jitter — from every minute to every 24 hours; randomized timing avoids bot-detection heuristics.","Single Docker container, file-based storage, under 256 MB of RAM — no external dependencies.","Apache 2.0 license — no per-check fees, no cloud account, no telemetry.",{"type":39,"title":56,"body":57,"items":58},"Prerequisites","A ServOrbit VPS running Ubuntu 24.04 with at least 1 GB of RAM. Changedetection.io alone uses under 256 MB at idle; if you add the Playwright sidecar, plan for 2 GB total.\n\nDocker and Docker Compose are provisioned automatically when you deploy via the ServOrbit marketplace. No domain name is required — the web interface is reachable directly on port 5000, but placing it behind an HTTPS reverse proxy is recommended for long-running deployments.\n\n**A note on which version to deploy.** The `latest` tag follows the most recent published tag on GitHub. Since v0.60.2 shipped on 2 September 2026, two active regressions affect that tag (see the dedicated section below). If you are deploying today without having read the troubleshooting section, explicitly pin `dgtlmoon\u002Fchangedetection.io:0.55.8` in your `docker-compose.yml` until the patch lands.",[],{"type":60,"title":61,"steps":62,"items":81},"steps","Deploy Changedetection.io on your VPS",[63,66,69,72,75,78],{"title":64,"body":65},"One-click deployment from the ServOrbit marketplace","Open your ServOrbit control panel, go to Marketplace → Monitoring & Observability → Changedetection.io, then click Deploy. Docker pulls `dgtlmoon\u002Fchangedetection.io:latest` and starts the container. The web interface is available on port 5000 in under 10 seconds — no account creation, no initial configuration required.",{"title":67,"body":68},"Add your first URL to monitor","Go to `http:\u002F\u002F\u003Cyour-vps-ip>:5000`. Click the blue + button in the top right, paste the URL you want to watch — a product page, job listing, public portal — then click Watch. Changedetection.io immediately fetches the page and saves it as the baseline. The next check is scheduled according to your default interval (minutes or hours).",{"title":70,"body":71},"Add a filter to isolate the element you care about","Without a filter, Changedetection.io detects any change on the page — including ad banners, timestamps, and navigation updates. To focus only on a price or stock field, open the watch settings (pencil icon), go to the Filters tab, and enter a CSS selector like `.price`, `#stock-status`, or `span.availability`. You can also use XPath expressions or a keyword trigger (alert only when the text \"In stock\" appears or disappears).",{"title":73,"body":74},"Configure a notification channel","Open watch settings → Notifications tab. Changedetection.io uses Apprise for notifications. To send a Telegram message, enter `tgram:\u002F\u002Fbottoken\u002Fchatid`. For email, use `mailto:\u002F\u002Fuser:password@smtp.example.com`. For Slack, use the webhook URL format `slack:\u002F\u002FtokenA\u002FtokenB\u002FtokenC`. You can stack multiple channels — price drops, for example, can go to Telegram for instant mobile delivery and also be logged to a webhook for your monitoring dashboard.",{"title":76,"body":77},"Enable Playwright for JavaScript-rendered pages (optional)","If the page you want to monitor is a React or Vue SPA, or loads its price counter asynchronously, a plain HTTP request will only see an empty shell. To enable Playwright support, add a second container — `browserless\u002Fchrome` or `playwright-stealth` — alongside Changedetection.io in a Docker Compose file, and set the `PLAYWRIGHT_DRIVER_URL` environment variable to point to it. In the watch settings, switch the Fetch Backend to `playwright`. Changedetection.io will then launch a headless browser, wait for the page to render, and snapshot the live DOM.",{"title":79,"body":80},"First login","Changedetection.io opens directly on the watch list with no account or credentials: you can add your first URL right away. First thing to do next: open Settings → General and set a password.",[],{"type":39,"title":83,"body":84,"items":85},"Practical use cases for developers and SMBs","Changedetection.io covers a surprisingly wide range of automation needs beyond simple \"restock alerts\".\n\n**Competitive intelligence**: watch a competitor's pricing page with a CSS selector targeting the price table. As soon as a column changes — monthly billing switching to annual, a new enterprise tier added — you are notified in real time, with no manual site visits.\n\n**Software version tracking**: set up a watch on the GitHub Releases page of a tool you depend on. A keyword filter on `v` or `Release` and a Slack notification: you will never miss a critical security update again.\n\n**Public tenders and procurement**: tender portals publish their awards at unpredictable times. Watching the results page with an hourly check saves multiple manual logins per day.\n\n**E-commerce restock alerts**: a CSS filter on `.in-stock`, a 15-minute interval, and an ntfy notification on your phone — enough to catch any restock of an out-of-stock item.\n\nAny URL, any element, any notification channel — the combination of CSS filters, keyword triggers, and Apprise's 80+ backends makes it a genuinely composable monitoring primitive.",[],{"type":39,"title":87,"body":88,"items":89},"Active regressions in v0.60.2 — what you need to know","Version 0.60.2, released on 2 September 2026, introduces **two simultaneous regressions** documented in the GitHub tracker:\n\n**Regression 1 — \"Recheck\" button returns HTTP 404** (issue #4369). A security hardening pass converted a GET endpoint to POST-only without creating the corresponding POST handler. The manual recheck button fails on every call. A workaround is available if you use Traefik as a reverse proxy: add the environment variable `SOCKETIO_CORS_ORIGINS=https:\u002F\u002F\u003Cyour-domain>` to the container. A PR (#4370) was opened on the same day by the team; it had not been merged as of 5 September 2026.\n\n**Regression 2 — \"Time Between Check\" stops triggering after the update** (issue #4368). The scheduled check interval no longer executes after upgrading to 0.60.2. Existing watches appear active in the UI but trigger no automatic checks. The manual Recheck button would be the only workaround — but it is itself broken by regression 1.\n\n**Recommendation**: stay on v0.55.8 or roll back to it if you have already updated, until a 0.60.x patch that fixes both issues is released. The next section details the safe update procedure with version pinning.",[],{"type":60,"title":91,"steps":92,"items":105},"Updating Changedetection.io safely — and pinning a version",[93,96,99,102],{"title":94,"body":95},"Never use the `latest` tag in production","The `latest` tag automatically tracks the most recently published tag on Docker Hub. A silent update (Docker Watchtower, automatic pull on restart) can therefore introduce a regression without your knowledge. **Always pin an explicit version** in your `docker-compose.yml`:\n\n```yaml\nservices:\n  changedetection:\n    image: dgtlmoon\u002Fchangedetection.io:0.55.8\n```\n\nUpdate the version manually and deliberately, after reviewing the GitHub changelog and the open issues for the target tag.",{"title":97,"body":98},"Back up the datastore before any update","All configuration and snapshot history lives in the volume mounted at `\u002Fdatastore`. Before changing versions:\n\n```bash\ndocker compose stop changedetection\ncp -r \u002Fopt\u002Fchangedetection\u002Fdatastore \u002Fopt\u002Fchangedetection\u002Fdatastore.bak-$(date +%Y%m%d)\n```\n\nThis copy lets you roll back to the previous state in case of issues, without losing your watch rules or snapshot history.",{"title":100,"body":101},"Update to a specific version","Edit your `docker-compose.yml` to point to the new tag, then pull the image and restart:\n\n```bash\ndocker compose pull changedetection\ndocker compose up -d changedetection\n```\n\nVerify that the version shown in Settings → General matches the one you pinned. If something does not work — Recheck button broken, scheduled checks stopping — you have your backup to roll back immediately.",{"title":103,"body":104},"Rolling back from v0.60.2 to v0.55.8","If you have already updated to 0.60.2 and are observing the two regressions described above, here is the procedure:\n\n```bash\ndocker compose stop changedetection\n# edit image: to dgtlmoon\u002Fchangedetection.io:0.55.8 in docker-compose.yml\ndocker compose pull changedetection\ndocker compose up -d changedetection\n```\n\nThe datastore is compatible between both versions: your watches, filters, and snapshot history are preserved.",[],{"type":107,"body":108,"items":109},"tip","Choose a longer check interval (30 to 60 minutes) for public websites to remain a polite web citizen and avoid rate-limiting or IP blocks. Enable the jitter option to spread checks across the entire interval window and avoid hitting the target server at exactly the same second every time. If a check must be frequent (every 5 minutes), prefer targeting a very specific element via a CSS selector rather than the whole page: the diff is faster to compute and produces fewer false positives.",[],"Start monitoring websites — deploy Changedetection.io on your ServOrbit VPS","One-click install, under 256 MB RAM, 80+ notification channels.","Deploy Changedetection.io","\u002Fvps-cloud",[],true,1794270484028]