Nach jedem erfolgreichen Duplicati-Backup wird automatisch ein n8n-Workflow über einen Webhook getriggert – inkl. Jobname & Status.
Duplicati läuft im Docker-Container
n8n läuft öffentlich unterhttps://n8n.scheidel.biz
Webhook-Methode: POST
Neuen Workflow erstellen → Node Webhook
Einstellungen:
HTTP Method: POST
Path: z. B.
duplicati
Workflow aktivieren (oben rechts “Active”).
Deine Production-URL ist dann:
https://n8n.scheidel.biz/webhook/duplicati
Datei anlegen:
/opt/duplicati/hooks/after.sh
Inhalt:
#!/bin/sh set -eu
WEBHOOK="https://n8n.scheidel.biz/webhook/duplicati"
JOB="${DUPLICATI__backup_name:-unknown}"
RESULT="${DUPLICATI__RESULT:-unknown}"
PAYLOAD=$(printf '{"job":"%s","result":"%s","timestamp":"%s"}' \
"$JOB" "$RESULT" "$(date -Iseconds)")
curl -fsS --max-time 15 -X POST "$WEBHOOK" \
-H "Content-Type: application/json" \
-d "$PAYLOAD" >/dev/null || true
Ausführbar machen:
sed -i 's/\r$//' /opt/duplicati/hooks/after.sh
chmod +x /opt/duplicati/hooks/after.sh
In docker-compose.yml bei Duplicati:
volumes:
- /opt/duplicati/hooks:/hooks:ro
Container neu starten:
docker compose up -d --force-recreate
Test im Container:
docker exec -it duplicati sh -lc '/hooks/after.sh; echo exit=$?'
exit=0 → alles korrekt.
Im jeweiligen Backup-Job:
Skript beim Beenden ausführen
/hooks/after.sh
Keine /bin/sh, keine Argumente, kein Zusatz.
Backup manuell starten → danach in n8n im Webhook-Workflow erscheint:
{
"job": "Paperless-NGX",
"result": "Success",
"timestamp": "2025-12-29T19:04:12+01:00" }
In n8n:
Webhook → Switch ({{$json.job}})
├─ Paperless-NGX → Execute Workflow: Backup-Paperless
├─ Nextcloud → Execute Workflow: Backup-Nextcloud
└─ default → Execute Workflow: Backup-Generic
So bleibt die URL immer gleich und du steuerst alles zentral.
| Fehler | Ursache | Fix |
|---|---|---|
No such file or directory |
/bin/sh /hooks/after.sh in einem Feld |
Nur /hooks/after.sh eintragen |
This webhook is not registered for POST requests |
n8n Webhook auf GET | Webhook-Node auf POST stellen |
| Kein Trigger | Workflow nicht aktiv | Workflow oben rechts auf Active |
| FileLocked celerybeat-schedule.db | Paperless läuft | Datei ausschließen oder Container vor Backup stoppen |
Dein Duplicati-Backup triggert jetzt zuverlässig n8n – perfekt integrierbar in dein Homelab mit ioBroker, Grafana, Authentik & Co. 🚀