Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Docker 28.08.2026 · 6 min Lesezeit

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

Symbolbild zur Anleitung: ntfy mit Docker installieren

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-all gesperrt und der verwendete Nutzer hat keine Rechte. Fix: docker exec -it ntfy ntfy access <user> <topic> rw ausführen.
  • Web-Push-Buttons zeigen falsche Domain: NTFY_BASE_URL ist nicht gesetzt oder zeigt auf localhost. Fix: Umgebungsvariable auf die öffentliche HTTPS-Domain setzen und Container neu starten.
  • Nachrichten verschwinden nach Neustart: Ohne NTFY_CACHE_FILE beziehungsweise 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: upgrade und Upgrade: websocket ergänzen.
  • Health-Check bleibt unhealthy: Der Endpunkt /v1/health antwortet nicht. Fix: docker compose logs ntfy auf Startfehler prüfen, etwa fehlende Schreibrechte auf ./data.
  • Alle Clients teilen sich ein Rate-Limit: NTFY_BEHIND_PROXY fehlt, ntfy sieht nur die IP des Proxys. Fix: Variable setzen und den Proxy X-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

Quellen

ntfyDockerDocker ComposePush-BenachrichtigungenSelfhostingMonitoring