ntfy mit Docker installieren: Push-Benachrichtigungen per HTTP selbst hosten
ntfy ist ein quelloffener Benachrichtigungsdienst, der Push-Nachrichten per HTTP-Request an Handy, Browser oder Desktop schickt. Die Anleitung zeigt Einrichtung per Docker Compose, Absicherung mit Benutzerkonten und HTTPS sowie die Nutzung für Backups und Cron-Skripte.
Geprüft am 10.10.2026 · für ntfy 2.29.0
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

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
- 1 CPU-Kern und 512 MB RAM reichen, ntfy selbst benötigt deutlich weniger. Images gibt es für amd64, arm64, armv7 und armv6
- Ein Domainname oder eine lokale Adresse für den Zugriff auf den Server
Schritt 1: Projektordner anlegen
Legen Sie 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.
sudo mkdir -p /opt/ntfy/data
sudo chown -R "$USER": /opt/ntfy
cd /opt/ntfy
Verifizieren: ls -l /opt/ntfy zeigt den Unterordner data mit Ihrem Benutzer als Eigentümer.
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:v2.29.0
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
- NTFY_BEHIND_PROXY=true
volumes:
- ./data:/var/lib/ntfy
ports:
- "127.0.0.1:8080: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
Passen Sie NTFY_BASE_URL an Ihre Domain an, sonst zeigen Links im Web-Client auf die falsche Adresse. NTFY_AUTH_DEFAULT_ACCESS=deny-all sperrt Topics für nicht angemeldete Zugriffe. NTFY_BEHIND_PROXY=true wertet die Client-IP aus dem Header X-Forwarded-For aus, sonst gilt das Rate-Limit für alle Clients gemeinsam. Der Port ist nur lokal gebunden, damit ntfy ausschließlich über den Reverse Proxy mit HTTPS erreichbar ist. Das Tag v2.29.0 (Stand Oktober 2026) legt die Version fest.
Verifizieren: docker compose config --quiet gibt nichts aus und endet mit Exit-Code 0.
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 enthält keine Fehler zu Port oder Volume. curl -s http://127.0.0.1:8080/v1/health liefert {"healthy":true}.
Schritt 4: Benutzerkonto anlegen und Topic schützen
Mit aktivierter Authentifizierung braucht jeder Nutzer ein Konto. Legen Sie Benutzer im laufenden Container an und vergeben Sie Rechte auf ein Topic. ntfy user add fragt das Passwort interaktiv ab.
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. Der Reverse Proxy nimmt Anfragen auf Port 443 an, leitet sie an http://127.0.0.1:8080 weiter und verwaltet das Zertifikat. Jeder gängige Proxy mit WebSocket-Unterstützung funktioniert, die Einrichtung beschreibt die verlinkte Nginx-Anleitung. Für Updates tragen Sie in der compose.yaml das neue Tag ein und führen dann aus:
docker compose pull
docker compose up -d
Version 2.29.0 behebt verzögerte Schreibvorgänge in den Nachrichten-Cache unter Last und schreibt beim Beenden ausstehende Nachrichten noch weg. Neu sind Zeitzonen für zeitversetzte Nachrichten (Header X-Timezone, zum Beispiel Europe/Berlin) und Zeitangaben nach RFC 3339 im Header At. Im Test lief das Update von 2.28.0 auf 2.29.0 ohne Eingriff: Benutzer, Zugriffsrechte und eine vorher gesendete Nachricht blieben erhalten, anonyme Zugriffe wurden weiter mit 403 abgewiesen, und eine zeitversetzte Nachricht mit X-Timezone: Europe/Berlin wurde angenommen.
Verifizieren: curl -s https://ntfy.example.com/v1/health liefert von außen {"healthy":true}. Nach einem Update zeigt docker compose ps das neue Tag, docker compose logs ntfy enthält keine Migrationsfehler.
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: Der Endpunkt
/v1/healthantwortet nicht. Fix:docker compose logs ntfyauf Startfehler prüfen, etwa fehlende Schreibrechte auf./data. - Alle Clients teilen sich ein Rate-Limit:
NTFY_BEHIND_PROXYfehlt, ntfy sieht nur die IP des Proxys. Fix: Variable setzen und den ProxyX-Forwarded-Forübergeben lassen.
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 gehört zu den einfachsten Selfhosting-Diensten: ein Container, keine externe Datenbank, Konfiguration über wenige Umgebungsvariablen. Wer Backup-Jobs, Monitoring-Alarme oder Cron-Ergebnisse an Handy oder Desktop schicken will, braucht keine weitere Messaging-Infrastruktur. 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)


