Ntfy Push Notifications Self Hosted
Ntfy – Self-Hosted Push-Benachrichtigungen einrichten
Was ist Ntfy?
Ntfy (gesprochen "notify") ist ein einfacher, HTTP-basierter Pub/Sub Notification Service. Mit Ntfy können Sie Benachrichtigungen über HTTP-Anfragen senden und über Browser, Mobile Apps oder webhooks empfangen.
Ntfy ist perfekt für:
- Server-Alerts: CPU/Memory/Disk-Warnungen automatisch senden
- Monitoring: Backup-Status, Deployment-Ergebnisse benachrichtigen
- Automation: Cron-Jobs, Scripts, Workflow-Benachrichtigungen
- IoT-Geräte: Status-Updates von Sensoren und Geräten
- Development: Build/Deploy/Test-Benachrichtigungen
Installation mit Docker
Docker Installation (Schnellstart)
docker run -d \ -p 80:80 \ -v /var/cache/ntfy:/var/cache/ntfy \ -e TZ=Europe/Berlin \ --name ntfy \ --restart unless-stopped \ binwiederhier/ntfy serve
Die Ntfy Service ist jetzt unter http://localhost erreichbar.
Docker Compose (empfohlen)
version: '3.8'
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
ports:
- "80:80"
- "443:443"
volumes:
- /var/cache/ntfy:/var/cache/ntfy
- /etc/ntfy/server.yml:/etc/ntfy/server.yml
- /etc/letsencrypt:/etc/letsencrypt
environment:
- TZ=Europe/Berlin
restart: unless-stopped
networks:
- bridge
networks:
bridge:
driver: bridge
Starten mit:
docker-compose up -d
Binary Installation auf Ubuntu/Debian
Alternativ können Sie Ntfy direkt als Binary installieren:
# Releases herunterladen cd /tmp wget https://github.com/binwiederhier/ntfy/releases/download/v2.10.0/ntfy_2.10.0_linux_amd64.tar.gz tar xzf ntfy_2.10.0_linux_amd64.tar.gz # Binary installieren sudo mv ntfy /usr/local/bin/ chmod +x /usr/local/bin/ntfy # Verzeichnisse erstellen sudo mkdir -p /var/cache/ntfy /etc/ntfy # Systemd Service erstellen sudo tee /etc/systemd/system/ntfy.service > /dev/null <Konfiguration der Ntfy Server
Server-Konfigurationsdatei erstellen
Erstellen Sie
/etc/ntfy/server.ymlfür erweiterte Konfiguration:base-url: https://ntfy.example.com listen-http: 0.0.0.0:80 listen-https: "" cache-file: /var/cache/ntfy/ntfy.db cache-default-expiry: 24h attachment-cache-dir: /var/cache/ntfy/attachments attachment-cache-expiry: 3d attachment-total-size-limit: 5G auth-file: /etc/ntfy/users.txt auth-default-access: public behind-proxy: true log-level: info stripe-key: ""HTTPS mit Let's Encrypt (via Nginx Reverse Proxy)
Die beste Methode ist ein Reverse Proxy mit Nginx und Let's Encrypt:
# /etc/nginx/sites-available/ntfy server { listen 80; server_name ntfy.example.com; location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl http2; server_name ntfy.example.com; ssl_certificate /etc/letsencrypt/live/ntfy.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ntfy.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://localhost:80; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }Nginx aktivieren und SSL zertifikat erzeugen:
ln -s /etc/nginx/sites-available/ntfy /etc/nginx/sites-enabled/ nginx -t systemctl restart nginx # Let's Encrypt Zertifikat ausstellen certbot certonly --nginx -d ntfy.example.com⚠️ Wichtig: Setzen Siebehind-proxy: truein der Ntfy Konfiguration, wenn Sie einen Reverse Proxy verwenden. Andernfalls sieht Ntfy alle IPs als Proxy-IP.Benachrichtigungen senden
Einfache Benachrichtigung mit curl
# Public Notification an selbst-gehostete Instanz curl -d "Server CPU is at 90% usage!" http://ntfy.example.com/server-alerts # Oder zu öffentlichem ntfy.sh Service curl -d "My first notification" https://ntfy.sh/my-unique-topicMit Title und Priority
curl -H "Title: System Alert" \ -H "Priority: high" \ -H "Tags: warning" \ -d "CPU temperature: 85°C" \ http://ntfy.example.com/system-alertsPrioritäts-Levels
Priority Beispiel Verwendung 1 (min) Informationen, Debug-Meldungen 2 (low) Allgemeine Status-Updates 3 (default) Standard-Benachrichtigungen 4 (high) Warnungen, Fehlerzustände 5 (max) Kritische Fehler, sofortige Aktion erforderlich Im Browser abonnieren
- Öffnen Sie http://ntfy.example.com
- Geben Sie einen Topic-Namen ein (z.B.
my-alerts)- Klicken Sie
Subscribe- Sie erhalten sofort Browser-Benachrichtigungen
Browser Push Benachrichtigungen aktivieren:
- Erlauben Sie Benachrichtigungen im Browser-Dialog
- Ntfy funktioniert auch, wenn der Browser nicht aktiv ist
- Notifications funktionieren auf Desktop und Mobile
Mobile Apps (Android und iOS)
Android App
- App: "Ntfy" im Google Play Store
- Öffnen Sie die App und klicken Sie
+- Geben Sie Ihre Server URL und Topic-Name ein
- Abonnieren und Benachrichtigungen erhalten
iOS App
- App: "Ntfy" im Apple App Store
- Gleiche Funktionalität wie Android
- Benachrichtigungen auch bei gesperrtem Bildschirm
Ntfy CLI verwenden
Installieren Sie die Ntfy CLI für komfortable Steuerung:
# CLI installieren curl -sSL https://ntfy.sh/install.sh | sh # Benachrichtigung senden ntfy publish my-topic "Message content" # Mit Optionen ntfy publish -title "Alert" -priority high my-topic "Critical event" # Subscriben und Benachrichtigungen empfangen ntfy subscribe my-topicBenutzerverwaltung und Zugriffskontrolle
Benutzer und Token hinzufügen
Erstellen Sie eine Benutzer-Datei
/etc/ntfy/users.txt:# Format: username:password:permissions admin:hashed_password:readwrite viewer:hashed_password:read # Passwort hashen: # htpasswd -B -c /tmp/passwd admin # Dann den Hash in users.txt kopierenNur privaten Topics sichern
curl -u "user:password" \ -d "Private alert message" \ http://ntfy.example.com/private-topicAccess Control Matrix
Funktion Public Authenticated Möglicher Use-Case Subscribe (Read) Ja Nur autorisierte Benutzer Allgemeine Status oder Team-Alerts Publish (Write) Ja Nur autorisierte Benutzer API-Keys für sicheres Publishing Anhänge versenden
Ntfy unterstützt Datei-Anhänge (Bilder, Logs, etc.):
curl -F "file=@/var/log/syslog" \ -H "Title: Server Logs" \ http://ntfy.example.com/system-logsAnhang-Limits:
- Maximale Dateigröße: 4096 MB (konfigurierbar)
- Cache-Expiry: 3 Tage (konfigurierbar)
Integration mit Grafana
Grafana Notification Channel konfigurieren
- Gehen Sie in Grafana zu
Administration → Notification Channels- Klicken Sie
Add Channel- Wählen Sie
Webhook- Konfigurieren Sie:
- Name: Ntfy Alerts
- URL: http://ntfy.example.com/grafana-alerts
- HTTP Method: POST
Alert-Regel mit Ntfy
# Grafana Dashboard → Alert Rules → New Rule # Bedingung konfigurieren (z.B. CPU > 80%) # Konfigurieren Sie als Notification Channel: Ntfy Alerts # Beim Alarm wird eine Benachrichtigung an ntfy.example.com/grafana-alerts gesendetIntegration mit Alertmanager (Prometheus)
# /etc/alertmanager/config.yml global: resolve_timeout: 5m route: receiver: 'ntfy' receivers: - name: 'ntfy' webhook_configs: - url: 'http://ntfy.example.com/alertmanager' send_resolved: truePraktische Beispiele
Beispiel 1: Disk-Space Alert Script
#!/bin/bash # /usr/local/bin/disk-alert.sh THRESHOLD=80 HOSTNAME=$(hostname) TOPIC="server-alerts" NTFY_URL="http://ntfy.example.com" df_usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//') if [ "$df_usage" -gt "$THRESHOLD" ]; then curl -H "Priority: high" \ -H "Title: Disk Alert" \ -d "Server $HOSTNAME: Disk usage is ${df_usage}%" \ "$NTFY_URL/$TOPIC" fiIn Crontab einbinden:
# /etc/cron.d/disk-alert */30 * * * * /usr/local/bin/disk-alert.shBeispiel 2: Backup Completion Notification
#!/bin/bash # /usr/local/bin/backup-notify.sh BACKUP_DIR="/mnt/backups" NTFY_URL="http://ntfy.example.com" # Backup durchführen restic backup /home /etc --repo $BACKUP_DIR if [ $? -eq 0 ]; then curl -H "Priority: 2" \ -H "Title: Backup Complete" \ -d "Backup of $(hostname) completed successfully" \ "$NTFY_URL/backup-status" else curl -H "Priority: 4" \ -H "Title: Backup Failed" \ -d "Backup of $(hostname) FAILED" \ "$NTFY_URL/backup-status" fiBeispiel 3: Docker Container Restart Alert
#!/bin/bash # Überwacht Docker Container und sendet Alert wenn neustartiert CONTAINER="my-app" NTFY_URL="http://ntfy.example.com" # Aktuelle Container ID speichern LAST_ID=$(docker ps -q -f name=$CONTAINER) while true; do sleep 30 CURRENT_ID=$(docker ps -q -f name=$CONTAINER) if [ "$LAST_ID" != "$CURRENT_ID" ]; then curl -H "Priority: high" \ -H "Title: Container Restart" \ -d "Container $CONTAINER was restarted" \ "$NTFY_URL/docker-alerts" LAST_ID=$CURRENT_ID fi done✅ Gut zu wissen: Kombinieren Sie mehrere Benachrichtigungs-Quellen mit Ntfy: Grafana, Prometheus Alertmanager, Custom Scripts, Docker Events. Ein Topic für alle Alerts!Performance und Limits
Eigenschaft Standard Beschreibung Cache Expiry 24 Stunden Dauer der Speicherung von Nachrichten im Cache Max Message Size 4096 Bytes Maximale Größe einer Benachrichtigung Attachment Size Limit 5 GB total Maximale Größe aller Anhänge combined Rate Limiting 200 pro Topic/min Nachrichten pro Minute pro Topic Troubleshooting
Benachrichtigungen werden nicht empfangen
Prüfen Sie:
- Browser Benachrichtigungen-Berechtigung gewährt?
- Topic-Name korrekt geschrieben?
- Firewall blockiert Verbindungen?
- Service läuft noch:
systemctl status ntfyHTTPS Probleme
# Zertifikat überprüfen openssl s_client -connect ntfy.example.com:443 # Nginx Fehler anschauen tail -f /var/log/nginx/error.logVerwandte Artikel