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

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.

Hero-Grafik zur Anleitung ntfy mit Docker installieren: Terminal mit curl-Push-Befehl, Dashboard mit Benachrichtigung und Docker-Symbol

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-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: wget fehlt im Image oder der Endpunkt /v1/health antwortet nicht. Fix: docker compose logs ntfy auf Startfehler prüfen, Healthcheck notfalls über curl statt wget testen.

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

Quellen

ntfyDockerDocker ComposePush-BenachrichtigungenSelfhostingMonitoring