← Zurück zum Blog

ntfy – Benachrichtigungen wie sie sein sollten

ntfy – Benachrichtigungen wie sie sein sollten

Ich wollte immer Benachrichtigungen haben – vom Server, vom Backup, vom Cron-Job. Aber jedes Mal eine E-Mail aufsetzen oder einen Messenger anbinden ist Overkill. Dann habe ich ntfy gefunden: Ein simpler Push-Dienst, den man selbst hostet, und der in zehn Minuten eingerichtet ist.

Was ist ntfy?

ntfy ist ein Open-Source-Push-Benachrichtigungsdienst. Er tut genau eine Sache: Eine Nachricht senden, die auf dem Handy oder im Browser ankommt. Kein Account, kein Passwort, kein Framework. Man publisht eine Nachricht auf einen Topic, und jeder, der den Topic abonniert hat, bekommt sie als Push.

# Nachricht senden (curl)
curl -d "Backup erfolgreich" ntfy.sh/mein-topic

# Oder auf eigenem Server
curl -d "Backup erfolgreich" https://ntfy.frischux.de/mein-topic

Das war's. Kein API-Key, kein OAuth, kein JSON. Nur eine POST-Request mit Klartext.

Warum nicht einfach E-Mail?

E-Mail funktioniert, aber:

Aspekt E-Mail ntfy
Einrichtung SMTP-Server, DNS, DKIM apk add ntfy
Latenz Sekunden bis Minuten <1 Sekunde
Push aufs Handy Ja (aber App nötig) Ja (ntfy-App)
Verlässlichkeit Spam-Filter, Bounce Immer ankommen
Code-Aufwand 10+ Zeilen 1 Zeile

Für echte Benachrichtigungen ist ntfy schneller und zuverlässiger. Kein Spam-Filter, kein SMTP-Quatsch, kein "ist die Mail angekommen?".

Einrichtung

Am einfachsten per Docker:

services:
  ntfy:
    container_name: ntfy
    image: binwiederhier/ntfy:latest
    restart: unless-stopped
    command: serve
    ports:
      - "8080:80"
    volumes:
      - ./cache:/var/cache/ntfy
      - ./etc:/etc/ntfy

Oder, bei mir im Alpine-LXC:

apk add ntfy
rc-update add ntfy default
rc-service ntfy start

Konfiguration in /etc/ntfy/server.yml:

listen-http: ":80"
behind-proxy: true
cache-file: "/var/cache/ntfy/cache.db"
cache-duration: "24h"

Nach dem Start erreichst du das Web-UI unter https://ntfy.frischux.de. Themen werden dynamisch angelegt – niemand muss einen "Account" erstellen.

Der Alltag

Auf dem Terminal

# Backup-Status melden
restic backup /var/data && curl -d "Backup erfolgreich ($(date +%d.%m.%Y))" ntfy.sh/backups

# Error-Monitoring
tail -f /var/log/nginx/error.log | grep "500" | while read line; do
  curl -d "500-Fehler: $line" ntfy.sh/errors
done

Auf dem Handy

Die ntfy-App (F-Droid, App Store) abonniert Themen per URL. Einfach https://ntfy.frischux.de/mein-topic eintragen, und schon kommen Push-Nachrichten.

Im Browser

ntfy hat ein eingebautes Web-UI, das auch als Progressive Web App (PWA) funktioniert. Einfach https://ntfy.frischux.de öffnen und als "App installieren".

Sicherheit

ntfy unterstützt Basic Auth und ACLs:

# server.yml
auth-file: "/etc/ntfy/user.db"
auth-default-access: "deny-all"

# Zugriff konfigurieren
acl:
  - user: "floyd"
    topic: "*"
    permissions: ["read", "write", "admin"]

Ohne Auth ist jeder Topic frei lesbar und beschreibbar. Für einen öffentlichen Server ist das ein Problem, für einen privaten im Heimnetz eher egal.

Was ntfy nicht kann

  • Keine Persistenz – Nachrichten verschwinden nach dem Lesen
  • Kein Gruppen-Chat – es ist ein Einweg-Kanal, kein Messenger
  • Keine Anhänge – nur Klartext, keine Bilder oder Dateien
  • Keine Bestätigung – der Sender weiß nicht, ob die Nachricht

(Cache ausgenommen) angekommen ist

Das sind keine Schwächen, sondern Fokus. ntfy ist ein Benachrichtigungskanal, kein Messenger-Ersatz.

Fazit

ntfy ist der Benachrichtigungsdienst, den ich mir gewünscht habe: Ein Curl-Befehl, eine App, keine Abhängigkeiten. Für Backup-Status, Monitoring, Cron-Job-Ergebnisse – alles, was man als Nachricht aufs Handy will, ohne den Overhead eines Messenger-Bots.

Auf dem Server läuft es als 30-MB-Binary, im LXC als Alpine-Paket, die App ist gratis, und die Einrichtung dauert fünf Minuten. Manchmal ist das Simple das Beste.