ntfy est un petit service auto-hébergeable, permettant de se faire notifier de presque tout. En comparaison avec Gotify qui est aussi très simple et hébergeable chez soi, je trouve que ntfy est bien plus flexible et peut être adapté au service que l’on souhaite, soit par les outils intégrés à sa distribution : curl, HTTP POST, js, Go, Python, PHP, ou alors en se forgeant un petit script intermédiaire qui sera exécuté régulièrement par sa machine linux, windows, mac ou rpi.
Afin de récupérer ses notifs sur smartphone, nous allons compter sur l’app ntfy dans les différents app stores, dont F-Droid. Sinon, sur votre ordinateur, il sera aussi possible de définir un genre de Web App sur sa barre de tâches.
Etape #1 : Installer ntfy sur docker
Rien de plus simple en utilisant docker-compose sur portainer ou alors, définir une image custom sur CasaOS avec les paramètres suivants :
version: "2.3"
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
restart: unless-stopped
command:
- serve
environment:
- TZ=Europe/Paris # mettre à jour son TZ pour sa ville
#user: UID:GID # optional: replace with your own user/group or uid/gid
volumes:
- ~/AppData/ntfy/var/cache/ntfy:/var/cache/ntfy # mettre à jour le répertoire où va se trouver le cache de notifications
- ~/AppData/ntfy/etc/ntfy:/etc/ntfy # mettre à jour le répertoire où va se trouver les configs de l'application
ports:
- 8085:80 # mettre à jour le port qui exposera le service sur votre serveur, ici "8085"
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
Ceci étant fait, on peut lancer son docker-compose et ensuite consulter les logs pour identifier si tout fonctionne.
Ensuite, nous lançons le service sur un navigateur avec le port configuré précédemment :
Le service est bien fonctionnel, avec le bémol que nous ne pouvons pas y accéder faute d’un accès https. Cela est facile à résoudre, soit en le configurant dans votre reverse-proxy, ou alors en utilisant le tunnel cloudflare, pour les options nécessitant peu d’ouverture de ports (ou pas du tout pour cloudflared).
Etape #2 : Rajouter un utilisateur et son token
Nous avons donc un service ntfy qui fonctionne sur internet. Nous pouvons déjà créer un « Topic » afin d’y publier des notifications de manière public. Cependant, pour sécuriser la bête, nous allons donner quelques permissions à un utilisateur lambda sur un « Topic ». Pour cela, nous avons deux choix :
- Exécuter /bin/sh dans le container ntfy :
docker exec -it <id du container> /bin/sh
2. Ou alors, utiliser portainer, si vous l’avez installé pour accéder à l’invite de commande du container ntfy :
Il nous reste à rajouter un utilisateur :
ntfy user add <utilisateur>
Lui donner un accès de lecture et d’écriture à un sujet ou « Topic » ainsi :
ntfy access <utilisateur> montopic rw
Lui rajouter un token pour faciliter l’authentification :
ntfy token add <utilisateur>
Afin de vérifier que l’utilisateur a bien un token, on tape :
ntfy token list
Etape #3 : Créer un « Topic » et tester les notifications
Et pour tester notre première notification sécurisée, on va créer le topic qui nous intéresse dans l’interface ntfy, exemple « montopic ».
Ensuite, sur une machine quelconque, on envoie le message suivant, avec curl pour aller au plus simple :
curl -u :<token> -d "Mon premier message - ça roule?" https://<mon serveur ntfy>/montopic
Et, en rajoutant un titre, une priorité et quelques émos comme ceci :
curl -u :<token> -H "t: Bonjour Monde" -H p:5 -H ta:tada -d "Mon premier message - ça roule?" https://<mon serveur ntfy>/montopic
On peut aussi installer le Web App pour avoir des notifications sans que son navigateur soit ouvert, ainsi :
Conclusion
Nous avons entrouvert tout juste la porte des notifications avec ce tuto rapide. L’outil peut faire remonter des évènements bash, des backups qui plantent, des batteries faibles, des routeurs dont une mise à jour est disponible, sans parler des applications qui l’intègrent déjà directement, comme Sonarr, Radarr, Prowlarr, Uptime Kuma, etc.