Zum Inhalt

Private Push-Benachrichtigungen mit ntfy per Docker

Veröffentlicht am 30. Juli 2026 · Geschätzte Lesezeit: 4 Minuten

Mit ntfy sendest du Meldungen von Servern, Skripten oder Smart-Home-Diensten direkt an Browser und Smartphone. Nachrichten werden per HTTP an ein Thema geschickt und von angemeldeten Geräten abonniert. Diese Anleitung richtet eine private Instanz mit Benutzerkonto und standardmäßig gesperrtem anonymem Zugriff ein. Plane etwa 15 Minuten ein. Grundlage sind die offizielle Docker-Anleitung und die Zugriffskontrolle (Stand: 29. Juli 2026).

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose
  • Ein Benutzerkonto mit Berechtigung für Docker
  • Port 8085 im Heimnetz frei
  • Ein Browser oder die ntfy-App für den Funktionstest

1. Arbeitsordner anlegen

Führe die folgenden Befehle auf dem Docker-Server aus. Sie erstellen getrennte Ordner für Konfiguration, Datenbank und Nachrichtenspeicher:

mkdir -p ~/ntfy/config ~/ntfy/data ~/ntfy/cache
cd ~/ntfy

2. Zugriffsschutz konfigurieren

Lege im Ordner ~/ntfy/config die Datei server.yml mit folgendem Inhalt an. Die Benutzer werden in einer dauerhaften SQLite-Datei gespeichert. Ohne passende Berechtigung darf niemand Themen lesen oder beschreiben:

listen-http: ":80"
cache-file: "/var/cache/ntfy/cache.db"
auth-file: "/var/lib/ntfy/user.db"
auth-default-access: "deny-all"

Standard wäre öffentlich

Ohne auth-default-access: "deny-all" dürfen anonyme Nutzer standardmäßig Themen lesen und beschreiben. Entferne diese Zeile deshalb nicht.

3. Compose-Datei anlegen

Lege im Ordner ~/ntfy eine Datei namens compose.yaml an. Der externe Port 8085 wird auf den internen HTTP-Port von ntfy geleitet:

services:
  ntfy:
    image: binwiederhier/ntfy:latest
    container_name: ntfy
    command:
      - serve
    restart: unless-stopped
    init: true
    environment:
      TZ: Europe/Berlin
    ports:
      - "8085:80"
    volumes:
      - ./config:/etc/ntfy
      - ./data:/var/lib/ntfy
      - ./cache:/var/cache/ntfy
    healthcheck:
      test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"]
      interval: 60s
      timeout: 10s
      retries: 3
      start_period: 40s

4. Container starten

Prüfe zuerst im Ordner ~/ntfy die Compose-Datei:

docker compose config

Starte ntfy danach im Hintergrund:

docker compose up -d

Kontrolliere den Status. Nach der Startphase sollte der Container als healthy angezeigt werden:

docker compose ps

5. Benutzer und Thema anlegen

Ersetze <ntfy-benutzer> durch deinen gewünschten Anmeldenamen. Der Befehl fragt das Passwort verdeckt im Terminal ab und speichert nur den Passwort-Hash:

docker compose exec ntfy ntfy user add <ntfy-benutzer>

Ersetze <ntfy-thema> durch einen schwer erratbaren Themennamen, zum Beispiel eine Kombination aus Zweck und zufälligen Zeichen. Dieser Befehl erlaubt dem Benutzer, das Thema zu lesen und zu beschreiben:

docker compose exec ntfy ntfy access <ntfy-benutzer> <ntfy-thema> rw

Prüfe die eingerichtete Zugriffsliste:

docker compose exec ntfy ntfy access

Keine Zugangsdaten in Skripte schreiben

Verwende für spätere Automationen möglichst ein eigenes Benutzerkonto oder ein Zugriffstoken. Schreibe dein persönliches Passwort nicht in Compose-Dateien, öffentlich lesbare Skripte oder Bildschirmfotos.

6. Browser oder App verbinden

Öffne http://<server-ip>:8085 und ersetze <server-ip> durch die feste IP-Adresse des Docker-Servers. Melde dich mit <ntfy-benutzer> und dem vergebenen Passwort an. Abonniere anschließend <ntfy-thema>.

Für die Smartphone-App trägst du dieselbe Serveradresse und dieselben Zugangsdaten ein. Bleibt die Instanz nur im Heimnetz, kommen Nachrichten unterwegs erst an, wenn das Smartphone per VPN mit deinem Heimnetz verbunden ist.

HTTP nur im vertrauenswürdigen Heimnetz

Diese Anleitung verwendet unverschlüsseltes HTTP im lokalen Netz. Öffne Port 8085 niemals direkt zum Internet. Für externen Zugriff brauchst du ein VPN oder einen korrekt eingerichteten HTTPS-Reverse-Proxy.

7. Testnachricht senden

Führe den folgenden Befehl auf einem Gerät im Heimnetz aus. Ersetze alle drei Platzhalter. curl fragt das Passwort interaktiv ab, weil es nicht im Befehl steht:

curl -u "<ntfy-benutzer>" -d "Testnachricht vom Heimserver" "http://<server-ip>:8085/<ntfy-thema>"

Die Meldung sollte kurz danach im geöffneten Browser oder in der App erscheinen. Falls nicht, prüfst du die letzten Container-Meldungen:

docker compose logs --tail=100 ntfy

8. Backup und Rückweg

Stoppe ntfy kurz, damit Datenbank und Cache konsistent gesichert werden:

docker compose down

Wechsle in deinen persönlichen Ordner:

cd ~

Sichere das gesamte Projekt:

tar -czf ntfy-backup.tar.gz ntfy

Starte den Dienst anschließend wieder:

cd ~/ntfy
docker compose up -d

Das Archiv enthält Benutzer- und Nachrichtendaten und muss geschützt aufbewahrt werden. Für den Rückweg stoppst du ntfy mit docker compose down, stellst den gesicherten Ordner wieder her und startest den Container erneut.

Fertig

Deine private ntfy-Instanz nimmt nun nur Nachrichten angemeldeter und berechtigter Benutzer an. Die Einrichtung funktioniert, wenn die curl-Testnachricht im abonnierten Thema erscheint und ein nicht angemeldeter Zugriff abgewiesen wird.