Mit ntfy können Sie über Skripte von jedem Computer aus Push-Benachrichtigungen an Ihr Telefon oder Ihren Desktop senden, indem Sie einfache HTTP PUT- oder POST-Anfragen verwenden. Ich verwende es, um mich selbst zu benachrichtigen, wenn Skripte fehlschlagen oder lang laufende Befehle abgeschlossen werden.
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu )
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
2. Verzeichnisse anlegen
Dazu nutzen wir folgenden Befehl
mkdir -p /opt/containers/ntfy/{cache,config,compose} cd /opt/containers/ntfy/
3. Docker Compose File anlegen
Dazu erstellen wir die Datei mit folgendem Befehl
nano compose/docker-compose.yml
(docker-compose.yml) Füge folgendes ein:
services: ntfy: image: binwiederhier/ntfy container_name: ntfy command: - serve environment: - TZ=Europe/Berlin # Bitte ggf. Ändern user: 1000:1000 # optional: durch Ihren eigenen Benutzer/Gruppe oder uid/gid ersetzen volumes: - ${ABSOLUTE_PATH}/cache:/var/cache/ntfy - ${ABSOLUTE_PATH}/config:/etc/ntfy healthcheck: # optional: remember to adapt the host:port to your environment 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 labels: - "traefik.enable=true" - "traefik.http.routers.ntfy.entrypoints=websecure" - "traefik.http.routers.ntfy.rule=(Host(`domain.de`))" - "traefik.http.routers.ntfy.tls=true" - "traefik.http.routers.ntfy.tls.certresolver=http_resolver" - "traefik.http.routers.ntfy.service=ntfy" - "traefik.http.services.ntfy.loadbalancer.server.port=80" - "traefik.docker.network=proxy" - "traefik.http.routers.ntfy.middlewares=ntfy-head" - "traefik.http.middlewares.ntfy-head.headers.customrequestheaders.X-Forwarded-Proto=https" - "traefik.http.middlewares.ntfy-head.headers.customResponseHeaders.X-Robots-Tag=none" - "traefik.http.middlewares.ntfy-head.headers.customResponseHeaders.Strict-Transport-Security=max-age=63072000" - "traefik.http.middlewares.ntfy-head.headers.stsSeconds=31536000" - "traefik.http.middlewares.ntfy-head.headers.accesscontrolalloworiginlist=*" restart: unless-stopped networks: proxy: networks: proxy: external: true
Notwendige Anpassungen:
- jegliche “domain.de” durch eure Domain ersetzen
- ggf. “ntfy” Label anpasen solltet ihr einen anderen Namen wünschen
Nun erstellen wir die env Datei.
nano compose/.env
(.env) Füge folgendes ein:
COMPOSE_PROJECT_NAME=ntfy ABSOLUTE_PATH=/opt/containers/ntfy
4. Runterladen der server.yml und anpassen
Um den Container starten zu können, müssen wir die server.yml runterladen und kleinere Anpassungen tätigen mit den folgenden Befehlen vornehmen
wget https://raw.githubusercontent.com/binwiederhier/ntfy/refs/heads/main/server/server.yml -O config/server.yml nano config/server.yml chown -R 1000:1000 cache/ config/
folgende Änderungen sollten gemacht werden (Zeilen)
14: base-url: "https://domain.de" .......... 71: cache-file: "/etc/ntfy/cache.db" 72: cache-duration: "12h" .......... 94: auth-file: "/etc/ntfy/auth.db" 95: auth-default-access: "deny-all" .......... 104: behind-proxy: true .......... 114: attachment-cache-dir: "/var/cache/ntfy/attachments" 115: attachment-total-size-limit: "1G" 116: attachment-file-size-limit: "5M" 117: attachment-expiry-duration: "3h" .......... 185: keepalive-interval: "45s" .......... 218: enable-signup: false 219: enable-login: true .......... 236: upstream-base-url: "https://ntfy.sh" .......... 246:message-size-limit: "4k" 247:message-delay-limit: "3d"
Dies sind alles nur grobe Werte:
Wichtig sind die Zeilen 14, 104, Diese müssen geändert werden da sonst NTFY nicht funktioniert.
Für iOS ist es wichtig das Zeile 236 so eingestellt zu lassen.
Siehe: Configuration for iOS – ntfy
Dazu am besten die Doc von NTFY prüfen, dort sind die Einstellungen sehr gut beschrieben und dokumentiert.
Diese sind von meiner persönlichen Instanz, Zeile 95 besagt “deny-all”. Bedeutet der Admin muss erst einen Account anlegen
5. NTFY starten und installieren
Endlich geht’s los!
docker compose -f compose/docker-compose.yml up -d
Nach dem Start des Containers öffnen wir unsere NTFY-Instanz https://domain.de, werdet ihr mit folgendem Bild begrüßt
Da wir noch keinen Benutzer haben erstellen wir uns einen dafür wird folgender Befehl benötigt
docker exec -it ntfy ntfy user add --role=admin username
2x das Kennwort eingeben und anschließend könnt ihr euch damit einloggen auf der Weboberfläche.
Nach eintippen des Kennwortes wird dies mit folgender Meldung quittiert
-> user username added with role admin
Anschließend ist es möglich sich mit diesen Login Daten unter domain.de/login einzuloggen
Wichtig: Der Username ist Case Sensitive
Jeder weitere User muss ebenfalls über den Befehl weiter oben angelegt werden, da dies eine Private Instanz ist hat nur der Admin auf alle Thema/Topic Zugriff. Jedes weitere Thema/Topic, welches ein anderer User welcher kein Admin ist benutzten darf, muss ein Recht vergeben werden.
Beispiel:
Der User A (Admin) hat ein Thema/Topic mit dem Namen “Infos” angelegt und abonniert. User B (User) soll dieses Thema auch nutzen dürfen.
Dazu benutzten wir wieder die CLI mit folgendem Befehl
docker exec -it ntfy ntfy access username topic permisson docker exec -it ntfy ntfy access Frank Infos rw
Bei Fragen stehe ich gerne zur Verfügung.