changedetection.io auf dem Synology NAS installieren: Webseiten-Änderungen überwachen
Mit changedetection.io überwachst du Webseiten automatisch auf Änderungen – selbst gehostet auf dem Synology NAS. Anleitung mit Playwright-Browser-Container für JavaScript-Seiten und ntfy-Benachrichtigungen.

Wer Webseiten manuell auf Änderungen prüft, verliert Zeit und übersieht trotzdem Wichtiges. changedetection.io automatisiert genau das: Du legst URLs an, bestimmst das Prüfintervall und bekommst eine Benachrichtigung, sobald sich etwas ändert. Für KMU sind das Lieferanten-Preislisten, Compliance-Seiten, Gesetzesänderungen oder Ausschreibungsportale. Privatnutzer nutzen den Dienst für Restock-Alerts, Ticketverfügbarkeit oder Behörden-Neuigkeiten. Der Dienst ist aktiv gepflegt (Version 0.55.7, Mai 2026, über 31.900 GitHub-Sterne), vollständig Open Source und läuft auf dem Synology NAS als Docker-Compose-Projekt – ohne Cloud-Abhängigkeit und ohne monatliche Kosten.
Voraussetzungen
- Synology NAS mit DSM 7.2 oder neuer, x86_64-Architektur (empfohlen; arm64 und arm/v7 werden ebenfalls unterstützt)
- Mindestens 2 GB RAM, bei Nutzung des Playwright-Browser-Containers mindestens 4 GB empfohlen
- Container Manager aus dem Synology Package Center installiert
- Ausreichend freier Speicherplatz auf Volume1 (mindestens 1 GB für Snapshots bei vielen Watches)
- Netzwerkzugang zum NAS im lokalen Netz oder per VPN
- Optional: laufende ntfy-Instanz auf dem NAS (siehe ntfy auf dem Synology NAS installieren)
Schritt 1: Datenverzeichnis anlegen
Öffne die File Station und lege den Ordner /volume1/docker/changedetection an. Dieser Pfad wird später als einziges Pflicht-Volume in den Container eingebunden und enthält die komplette Watch-Liste, alle Snapshots, Diff-Historien und Benachrichtigungseinstellungen. Zum Anlegen von Docker-Ordnern auf dem Synology NAS – einschließlich PUID/PGID-Ermittlung – lies die Grund-Anleitung Docker-Ordner und Berechtigungen auf dem Synology NAS.
Das offizielle changedetection.io-Image läuft als root, daher sind keine speziellen Eigentümerrechte nötig. PUID und PGID sind im offiziellen dgtlmoon-Image nicht vorhanden – diese Variablen existieren nur im inoffiziellen LinuxServer-Image, das einen anderen Volume-Pfad (/config statt /datastore) und andere Defaults verwendet. Verwende in dieser Anleitung ausschließlich das offizielle Image.
Verifizieren: Der Ordner /volume1/docker/changedetection ist in der File Station sichtbar und leer. Kein weiterer Unterordner ist nötig – changedetection.io legt seine Struktur beim ersten Start selbst an.
Schritt 2: Compose-Datei erstellen
Wechsle im Container Manager zu Projekt → Erstellen. Vergib den Projektnamen changedetection und lege den Projektpfad auf /volume1/docker/changedetection fest. Wie du ein Compose-Projekt im Container Manager anlegst, zeigt die Grund-Anleitung Container Manager auf dem Synology NAS: Docker-Compose-Projekt anlegen.
Trage die folgende compose.yaml ein. Ersetze DEINE-NAS-IP durch die tatsächliche IP-Adresse deines NAS (z. B. 192.168.1.100). Verwende ausschließlich Leerzeichen zur Einrückung – der Container Manager reagiert empfindlich auf Tab-Zeichen.
| Parameter | Wert | Hinweis |
|---|---|---|
| Image (Haupt) | ghcr.io/dgtlmoon/changedetection.io:latest | Offizielles Image (GitHub Container Registry); :latest pinnen oder auf konkrete Version wechseln |
| Image (Browser) | dgtlmoon/sockpuppetbrowser:latest | Playwright-/Chrome-Container für JS-Seiten; optional, aber empfohlen |
| Port | 5055:5000 | Host-Port 5055 frei wählbar; intern läuft die UI auf 5000 |
| Volume | /volume1/docker/changedetection:/datastore | Einziges Pflicht-Volume; enthält alle persistenten Daten |
| Architektur | amd64, arm64, arm/v7, arm/v6 | Alle gängigen Synology-Plattformen werden unterstützt |
services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:latest
container_name: changedetection
hostname: changedetection
restart: unless-stopped
ports:
- "5055:5000"
volumes:
- /volume1/docker/changedetection:/datastore
environment:
- TZ=Europe/Berlin
- PLAYWRIGHT_DRIVER_URL=ws://sockpuppetbrowser:3000
- BASE_URL=http://DEINE-NAS-IP:5055
# - FETCH_WORKERS=10
# - HIDE_REFERER=true
# - DISABLE_VERSION_CHECK=true
depends_on:
- sockpuppetbrowser
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000"]
interval: 10s
timeout: 5s
retries: 5
start_period: 90s
sockpuppetbrowser:
image: dgtlmoon/sockpuppetbrowser:latest
container_name: changedetection-browser
hostname: sockpuppetbrowser
restart: unless-stopped
cap_add:
- SYS_ADMIN
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1024
- SCREEN_DEPTH=16
- MAX_CONCURRENT_CHROME_PROCESSES=10Wichtig: Die Umgebungsvariable PLAYWRIGHT_DRIVER_URL muss exakt den hostname-Wert des Browser-Containers enthalten – hier sockpuppetbrowser. Jeder Tippfehler führt zu „connection refused“-Fehlern, ohne dass die UI eine klare Meldung ausgibt. Der Browser-Container benötigt zwingend cap_add: SYS_ADMIN, damit Chromium seine Sandbox starten kann. Ohne diese Linux-Capability schlägt der Start mit „Failed to launch the browser process“ fehl.
Verifizieren: Im Container Manager unter Projekt → changedetection sind beide Services – changedetection und changedetection-browser – mit dem Status Wird ausgeführt (grüner Punkt) aufgelistet. Der Healthcheck des Haupt-Containers wechselt nach spätestens 90 Sekunden von „starting“ auf „healthy“. Falls der Browser-Container sofort stoppt, fehlt die SYS_ADMIN-Capability oder das Image wurde nicht vollständig geladen.
Schritt 3: Firewall-Regel für Port 5055 hinzufügen
Wenn die DSM-Firewall aktiv ist, musst du eine Regel für den Host-Port 5055 anlegen. Die detaillierte Vorgehensweise beschreibt die Grund-Anleitung DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben. Kurzweg: Systemsteuerung → Sicherheit → Firewall → Bearbeiten → Hinzufügen, Port 5055 (TCP), Quelle auf das lokale Subnetz einschränken.
Verifizieren: Rufe im Browser http://DEINE-NAS-IP:5055 auf. Die changedetection.io-Startseite mit der leeren Watch-Liste erscheint. Falls die Seite nicht lädt, prüfe Firewall-Regeln und ob der Container auf Port 5055 lauscht.
Schritt 4: Ersten Watch anlegen und Fetcher wählen
Öffne die Web-UI unter http://DEINE-NAS-IP:5055 und klicke auf + Watch hinzufügen. Trage die URL der zu überwachenden Seite ein.
Im Feld Request / Fetcher wählst du die passende Abruf-Methode:
- Basic fast Fetch (Standard): Einfacher HTTP-Abruf ohne JavaScript-Rendering. Geeignet für statische HTML-Seiten, RSS-Feeds und JSON-APIs. Schnell und ressourcenschonend.
- Playwright Chromium (Browser-Container): Rendert die Seite vollständig im Chrome-Browser, führt JavaScript aus und wartet auf dynamische Inhalte. Notwendig für Single-Page-Applications, Shops mit dynamisch geladenen Preisen und Login-geschützte Bereiche.
Für KMU-Szenarien lohnt der Playwright-Fetcher besonders bei Lieferanten-Shops mit JavaScript-gerenderten Preisen. Der dedizierte „Price & Product Restock“-Fetcher erkennt strukturierte Preisdaten und löst Alerts gezielt bei Preissenkungen oder Neuverfügbarkeit aus.
Verifizieren: Der neue Watch erscheint in der Liste mit dem Status Fetching… oder OK. Nach dem ersten erfolgreichen Abruf zeigt die Spalte „Last checked“ einen Zeitstempel. Klicke auf den Watch-Eintrag und dann auf Preview, um den abgerufenen Seiteninhalt zu sehen. Bei Playwright-Fetcher ist außerdem ein Screenshot verfügbar.
Schritt 5: CSS-Selektor setzen (optional, aber empfohlen)
Ohne Filterung reagiert changedetection.io auf jede Änderung der gesamten Seite – inklusive Werbebanner und Navigationsmenüs. Für praxistaugliche Überwachung empfiehlt sich ein gezielter Selektor.
Öffne den Watch über das Stiftsymbol (Edit). Im Reiter Filters & Triggers findest du das Feld CSS/JSON/XPath Filter. Beispiele:
.product-price
#stock-status
table.price-listBeim Playwright-Fetcher steht zusätzlich der Visual Selector zur Verfügung: Ein Screenshot der Seite wird angezeigt, und du klickst direkt auf das Element, das überwacht werden soll. changedetection.io generiert daraus automatisch den passenden CSS-Selektor.
Verifizieren: Klicke in der Watch-Liste auf Recheck now (Uhr-Symbol). Nach dem Abruf öffne die Diff-Ansicht (Augensymbol). Geänderte Textstellen erscheinen farbig hervorgehoben: Hinzugefügtes in Grün, Entferntes in Rot. Wenn nur der gewünschte Seitenabschnitt im Diff erscheint und keine Werbeinhalte, ist der Selektor korrekt gesetzt.
Schritt 6: Benachrichtigungen einrichten (ntfy)
changedetection.io verwendet intern die Apprise-Bibliothek und unterstützt über 85 Benachrichtigungskanäle. Für selbst gehostetes ntfy auf demselben NAS (Anleitung: ntfy auf dem Synology NAS installieren) lautet das URL-Schema:
ntfy://NAS-IP:PORT/thema-nameBeispiel für ein selbst gehostetes ntfy ohne TLS:
ntfy://192.168.1.100:2586/preisalarmFür ntfy mit HTTPS und Token-Authentifizierung:
ntfys://token@ntfy.meinedomain.de/preisalarmDie Konfiguration erfolgt entweder global für alle Watches (Settings → Notifications) oder pro Watch (Edit → Notifications). Trage die Apprise-URL in das Textfeld ein und klicke auf Send test notification, bevor du speicherst. Achte darauf, dass das Schema ntfy:// korrekt geschrieben ist – ein falsches Schema führt zu einem stillen Fehlschlag ohne Fehlermeldung in der UI.
Verifizieren: Nach dem Klick auf Send test notification erscheint eine Push-Nachricht auf deinem Gerät (ntfy-App) oder im gewählten Kanal. Falls keine Nachricht eintrifft: URL-Schema und Hostname prüfen, ntfy-Container-Status prüfen, und im Container-Log von changedetection nach Apprise-Fehlern suchen (Container Manager → changedetection → Protokoll).
Schritt 7: Update durchführen
Updates auf neue changedetection.io-Versionen sind einfach und verlustfrei, da alle persistenten Daten im gemounteten Volume liegen. Öffne ein SSH-Terminal auf dem NAS (Anleitung: SSH auf dem Synology NAS aktivieren und verbinden) und führe folgenden Befehl aus:
cd /volume1/docker/changedetection
docker compose pull && docker compose up -dAlternativ steht im Container Manager unter Projekt → changedetection → Aktion → Pull und neu erstellen eine grafische Schaltfläche zur Verfügung. Vor dem Update empfiehlt sich eine kurze Sicherung des Verzeichnisses /volume1/docker/changedetection, da Datenbankmigrationen zwischen Versionen nicht rückgängig gemacht werden können.
Verifizieren: Nach dem Update zeigt docker compose ps oder die Container-Manager-Übersicht beide Container wieder als running. Die Web-UI unter http://DEINE-NAS-IP:5055 ist erreichbar, alle Watches sind vorhanden, und unter Settings → About ist die neue Versionsnummer sichtbar.
Troubleshooting / Typische Fehler
- „Failed to launch the browser process“: Der sockpuppetbrowser-Container startet, aber Chrome schlägt fehl. Ursache:
cap_add: SYS_ADMINfehlt in der Compose-Datei. Lösung: Capability hinzufügen, Projekt neu deployen. - JS-Seiten zeigen nur rohen HTML-Quelltext:
PLAYWRIGHT_DRIVER_URList nicht gesetzt oder falsch geschrieben. Prüfe, ob der Hostname in der URL exakt mit demhostname-Wert des sockpuppetbrowser-Services übereinstimmt (ws://sockpuppetbrowser:3000). - Web-UI nicht erreichbar: DSM-Firewall blockiert Port 5055. Firewall-Regel prüfen und ggf. hinzufügen. Auch einen Port-Konflikt mit einem anderen Dienst ausschließen.
- Container startet, aber kein Schreibzugriff auf /datastore: Das Verzeichnis wurde mit falschen Berechtigungen angelegt. Da das offizielle Image als root läuft, ist das selten ein Problem – aber prüfe, ob der Ordner existiert und beschreibbar ist.
- Ntfy-Benachrichtigungen bleiben aus (stiller Fehlschlag): Das URL-Schema ist falsch (z. B.
http://stattntfy://) oder der Hostname ist nicht auflösbar. Apprise gibt in der UI keinen Fehler aus. Lösung: URL mit Send test notification testen und Container-Log auf Apprise-Fehler prüfen. - sockpuppetbrowser crasht bei vielen gleichzeitigen Watches: RAM-Verbrauch zu hoch.
MAX_CONCURRENT_CHROME_PROCESSESim Browser-Container auf 3–5 reduzieren;FETCH_WORKERSim Hauptcontainer entsprechend anpassen. - YAML-Fehler im Container Manager: Tab-Zeichen in der compose.yaml verursachen Parser-Fehler. Ausschließlich Leerzeichen zur Einrückung verwenden.
Häufige Fragen
Brauche ich den sockpuppetbrowser-Container immer?
Nein. Für statische HTML-Seiten, RSS-Feeds und JSON-APIs reicht der Standard-HTTP-Fetcher vollständig aus. Der Browser-Container ist nur nötig, wenn Seiten JavaScript benötigen – typischerweise Single-Page-Applications oder Shops mit dynamisch geladenen Preisen. Da der Browser-Container 300–600 MB RAM belegt, lohnt sich der Verzicht auf NAS-Geräten mit wenig Arbeitsspeicher. Du kannst ihn jederzeit nachrüsten, indem du die Compose-Datei ergänzt und das Projekt neu deployest.
Wie überwache ich nur einen bestimmten Seitenabschnitt?
Über CSS-Selektoren, XPath oder JSONPath im Reiter Filters & Triggers jedes Watch-Eintrags. Beim Playwright-Fetcher steht zusätzlich der Visual Selector zur Verfügung: Du klickst auf dem Screenshot direkt auf das gewünschte Element und changedetection.io erzeugt den Selektor automatisch. So bekommst du Alerts nur für den Preis oder den Lieferstatus – ohne Rauschen durch Werbebanner oder Navigationsänderungen.
Wie lange werden Änderungen gespeichert?
Standardmäßig unbegrenzt. Unter Settings → Keep history kannst du ein Limit setzen (z. B. die letzten 100 Änderungen pro Watch), um den Speicherbedarf zu kontrollieren. Alle Snapshots liegen im Volume /volume1/docker/changedetection.
Kann ich Login-geschützte Seiten überwachen?
Ja, mit dem Playwright-Fetcher. Unter Edit → Browser Steps kannst du Aktionen hinterlegen: Felder ausfüllen, Buttons klicken, Formulare absenden. So loggst du dich vor dem Abruf automatisch ein und changedetection.io überwacht den Bereich hinter dem Login – geeignet für Kundenportale oder interne Intranet-Seiten.
Wie viele Seiten kann ich gleichzeitig überwachen?
Beliebig viele. Alle Watches laufen als interne Queue. Die Umgebungsvariable FETCH_WORKERS (Standard: 10) steuert die Parallelität. Bei vielen Watches oder kurzen Intervallen kannst du den Wert erhöhen. Beachte, dass der Browser-Container ein separates Limit über MAX_CONCURRENT_CHROME_PROCESSES hat.
Wie aktualisiere ich changedetection.io?
Im SSH-Terminal aus dem Compose-Verzeichnis: docker compose pull && docker compose up -d. Alternativ nutze die Container-Manager-Funktion Pull und neu erstellen. Die Daten in /volume1/docker/changedetection bleiben vollständig erhalten. Vor größeren Updates empfiehlt sich eine kurze Sicherung dieses Ordners.
Fazit
changedetection.io ist eines der ausgereiftesten selbst gehosteten Monitoring-Werkzeuge für Webseiten. Die Kombination aus einfachem HTTP-Fetcher für statische Inhalte und Playwright-Browser-Container für JavaScript-lastige Seiten macht es universell einsetzbar – von der Lieferanten-Preisliste bis zur Compliance-Seite. Der KMU-Mehrwert liegt im Preis: null Euro laufende Kosten, keine Datenweitergabe, volle Kontrolle über die Monitoring-Regeln. Wer bereits ntfy auf dem Synology NAS betreibt, kann Benachrichtigungen in wenigen Minuten einrichten. Die einzige spürbare Einschränkung ist der RAM-Bedarf des Browser-Containers auf Geräten mit weniger als 4 GB – dort lohnt es sich, den Browser-Service wegzulassen und nur bei Bedarf zu aktivieren. Für einen vollständigen Monitoring-Stack auf dem NAS eignet sich changedetection.io gut als Ergänzung zu weiteren Admin-Werkzeugen – zum Beispiel dem Healthchecks-Dienst für Cronjob- und Backup-Monitoring auf demselben NAS.
Weiterführende Anleitungen und Quellen
- ntfy auf dem Synology NAS installieren: Push-Benachrichtigungen für Server und Skripte
- Healthchecks auf dem Synology NAS installieren: Cronjobs und Backups überwachen
- Container Manager auf dem Synology NAS: Docker-Compose-Projekt anlegen, starten und aktualisieren
- DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben
- Beszel Server Monitoring mit Docker einrichten: Hub und Agent installieren
Offizielle Quellen: changedetection.io GitHub-Repository (docker-compose.yml, Dokumentation) · changedetection.io auf Docker Hub