ntfy mit Docker installieren: Push-Benachrichtigungen per HTTP selbst hosten
ntfy ist ein quelloffener Benachrichtigungsdienst, der Push-Nachrichten per simplem HTTP-Request an Handy, Browser oder Desktop schickt. Diese Anleitung zeigt, wie du ntfy per Docker Compose auf einem beliebigen Linux-Host aufsetzt, Zugriff mit Benutzerkonten absicherst und den Server für Backup-Jobs, Monitoring oder Cron-Skripte nutzt.

Wer Backup-Jobs, Cron-Skripte oder Monitoring-Checks überwacht, kennt das Problem: Ergebnisse landen in Logdateien, die niemand liest. ntfy schließt diese Lücke mit einem einfachen HTTP-Endpunkt. Ein curl -d "Backup fertig" ntfy.example.com/mytopic reicht, damit die Nachricht auf Handy und Desktop erscheint. Diese Anleitung zeigt den plattformneutralen Weg über Docker Compose, inklusive Zugriffsschutz mit Benutzerkonten.
Voraussetzungen
- Docker Engine und Docker Compose v2 auf einem Linux-Host, einer VM oder einem NAS mit Docker-Unterstützung
- Ein Reverse Proxy (z. B. nginx oder Caddy) für HTTPS, wenn ntfy von außerhalb des lokalen Netzes erreichbar sein soll
- Minimaler Ressourcenbedarf: ntfy ist in Go geschrieben und läuft bereits mit 128 MB RAM stabil
- Ein Domainname oder eine lokale Adresse für den Zugriff auf den Server
Schritt 1: Projektordner anlegen
Lege einen Projektordner mit einem Unterordner für die persistenten Daten an. ntfy speichert dort die Nachrichten-Cache-Datenbank und optional die Benutzerdatenbank für die Authentifizierung.
mkdir -p /opt/ntfy/data
cd /opt/ntfy
Verifizieren: ls /opt/ntfy zeigt den Unterordner data. Die Berechtigungen müssen dem Nutzer gehören, der später docker compose ausführt.
Schritt 2: compose.yaml erstellen
Die folgende compose.yaml startet ntfy mit aktivierter Authentifizierung (Standardzugriff verweigert, nur angelegte Nutzer dürfen lesen/schreiben) und einer persistenten Cache-Datenbank für Nachrichtenverlauf.
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
- NTFY_BASE_URL=https://ntfy.example.com
- NTFY_CACHE_FILE=/var/lib/ntfy/cache.db
- NTFY_AUTH_FILE=/var/lib/ntfy/auth.db
- NTFY_AUTH_DEFAULT_ACCESS=deny-all
volumes:
- ./data:/var/lib/ntfy
ports:
- "80:80"
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -q true"]
interval: 60s
timeout: 10s
retries: 3
Passe NTFY_BASE_URL auf deine tatsächliche Domain an, sonst zeigen Web-Push-Links im Browser-Client auf die falsche Adresse. NTFY_AUTH_DEFAULT_ACCESS=deny-all sorgt dafür, dass unbekannte Topics ohne Anmeldung weder lesbar noch beschreibbar sind.
Verifizieren: docker compose config darf keine Fehler ausgeben. Die YAML-Einrückung muss konsistent mit zwei Leerzeichen erfolgen.
Schritt 3: Container starten
docker compose up -d
docker compose ps
Verifizieren: docker compose ps zeigt den Container ntfy mit Status Up beziehungsweise nach kurzer Zeit healthy. docker compose logs ntfy darf keine Fehler zu Port oder Volume enthalten. Ein curl -I http://localhost:80/v1/health liefert HTTP 200.
Schritt 4: Benutzerkonto anlegen und Topic schützen
Mit aktivierter Authentifizierung braucht jeder Nutzer ein Konto. Lege Benutzer direkt im laufenden Container an und vergib Rechte auf ein Topic.
docker exec -it ntfy ntfy user add admin
docker exec -it ntfy ntfy access admin backups rw
Der zweite Befehl gibt dem Nutzer admin Lese- und Schreibrechte auf das Topic backups. Ohne diesen Schritt bleibt das Topic wegen deny-all für alle gesperrt.
Verifizieren: docker exec -it ntfy ntfy access listet die vergebenen Rechte. Ein Testaufruf curl -u admin:PASSWORT -d "Test" https://ntfy.example.com/backups muss die Nachricht auf einem verbundenen ntfy-Client anzeigen.
Schritt 5: Reverse Proxy, HTTPS und Updates
Für den Zugriff von unterwegs braucht ntfy HTTPS. Ein Reverse Proxy leitet Port 443 an den internen Port 80 des Containers weiter und übernimmt die Zertifikatsverwaltung. Details zur Grundeinrichtung eines Reverse Proxys mit automatischem HTTPS-Zertifikat sind nicht Teil dieser Anleitung; jeder gängige Proxy mit WebSocket-Unterstützung funktioniert, da der Browser-Client von ntfy auf Server-Sent-Events beziehungsweise WebSockets setzt.
docker compose pull
docker compose up -d
Verifizieren: Nach einem Update zeigt docker compose ps die neue Imageversion. docker compose logs ntfy darf keine Migrationsfehler an der Cache-Datenbank melden.
Troubleshooting / Typische Fehler
- 403 Forbidden beim Senden: Das Topic ist durch
NTFY_AUTH_DEFAULT_ACCESS=deny-allgesperrt und der verwendete Nutzer hat keine Rechte. Fix:docker exec -it ntfy ntfy access <user> <topic> rwausführen. - Web-Push-Buttons zeigen falsche Domain:
NTFY_BASE_URList nicht gesetzt oder zeigt auflocalhost. Fix: Umgebungsvariable auf die öffentliche HTTPS-Domain setzen und Container neu starten. - Nachrichten verschwinden nach Neustart: Ohne
NTFY_CACHE_FILEbeziehungsweise ohne gemountetes Volume läuft der Cache nur im Arbeitsspeicher. Fix: Volume-Mount und Cache-Pfad wie in der compose.yaml gezeigt setzen. - WebSocket-Verbindung bricht ab: Der Reverse Proxy leitet Upgrade-Header für WebSockets nicht durch. Fix: Proxy-Konfiguration um
Connection: upgradeundUpgrade: websocketergänzen. - Health-Check bleibt unhealthy:
wgetfehlt im Image oder der Endpunkt/v1/healthantwortet nicht. Fix:docker compose logs ntfyauf Startfehler prüfen, Healthcheck notfalls übercurlstattwgettesten.
Häufige Fragen
Brauche ich eine Datenbank für ntfy?
Nein. ntfy speichert Nachrichten und Benutzerkonten in einfachen SQLite-Dateien im gemounteten Datenverzeichnis, ein separater Datenbank-Container ist nicht nötig.
Kann ich ntfy ohne Authentifizierung betreiben?
Technisch ja, das ist sogar die Standardeinstellung. Für ein selbst gehostetes System im eigenen Netz oder hinter einem VPN ist das vertretbar, bei Erreichbarkeit aus dem Internet sollte NTFY_AUTH_DEFAULT_ACCESS=deny-all mit Benutzerkonten aktiv sein.
Funktioniert ntfy auch mit iOS und Android?
Ja, es gibt offizielle Apps für beide Plattformen sowie einen Webclient und ein CLI-Tool zum Abonnieren von Topics direkt im Terminal.
Wie sichere ich die Daten von ntfy?
Ein regelmäßiges Backup des gemounteten Ordners (./data in dieser Anleitung) reicht aus, da dort sowohl Cache- als auch Auth-Datenbank liegen.
Fazit
ntfy ist einer der unkompliziertesten Selfhosting-Dienste überhaupt: ein Container, keine externe Datenbank, Konfiguration über wenige Umgebungsvariablen. Für Admins, die Backup-Jobs, Monitoring-Alarme oder Cron-Ergebnisse ohne komplexe Messaging-Infrastruktur an Handy oder Desktop schicken wollen, ist der Aufwand in wenigen Minuten erledigt. Wichtig bleibt die Absicherung mit Benutzerkonten und HTTPS, sobald der Dienst über das lokale Netz hinaus erreichbar ist.
Passende Anleitungen auf S-EDV
- Uptime Kuma mit Docker installieren als Alarmziel für Monitoring-Checks
- Nginx als Reverse Proxy mit TLS einrichten für die Absicherung von ntfy per HTTPS
Quellen
- ntfy auf GitHub (offizielles GitHub-Repository)
- ntfy Installationsdokumentation (offizielle Installationsdokumentation)
- ntfy Konfigurationsdokumentation (offizielle Konfigurationsdokumentation)