Tutoriel Linux : auto-héberger Ntfy, le service de notification de smartphones

Lorsqu’on développe une application web qui ambitionne de tourner sur mobile, on n’a que peu d’accès au matériel du smartphone (notifications, GPS, etc.), contrairement à une application mobile native.

Accéder à une notification des clients sur smartphones depuis une application web n’est pas impossible, mais au prix de circonvolutions et de ruses de Sioux techniques.

Heureusement, on peut laisser de côté la recherche de cet exploit technique puisqu’il existe un service clé en main qu’on peut utiliser pour faire notifier des smartphones depuis une application web : Ntfy (prononcer notify).

Ntfy est un service de notification. Il ne fait que cela, mais il le fait très bien. Ce service existe sous forme de SaaS ou auto-hébergeable gratuitement. C’est cette version gratuite auto-hébergée que nous allons mettre en place dans ce tutoriel.

Prix des plans payants de la version SaaS

Principe de fonctionnement

Le principe est simple : vous installez l’application Ntfy sur votre smartphone Android ou Apple, et vous vous abonnez à un salon dont vous inventez le nom, par exemple jaimismontutu. Le salon sera hébergé sur le site officiel (https://ntfy.sh/jaimismontutu) ou sur votre serveur si vous auto-hébergez le service (http://serveur/jaimismontutu).

Une fois que vous êtes abonné à un salon dont vous avez inventé le nom (cela se fait directement dans l’application du smartphone), il suffit qu’une application donnée (donc potentiellement une application web que vous allez programmer) envoie un message à ce salon pour que l’application Ntfy sur votre smartphone notifie le message.

Dit autrement, si une application exécute la commande ci-dessous, vous êtes notifié d’un Hello sur votre smartphone :

curl -d "Hello" http://serveur/jaimismontutu

Ainsi votre application peut notifier des smartphones sans que vous n’ayez à apprendre à mettre en oeuvre cette fonctionnalité de notification.

Installation de Ntfy sur votre serveur

L’installation se fait grâce à un conteneur docker, il faut donc que votre serveur soit prêt à lancer des services docker. Si ce n’est pas le cas, vous trouverez le guide d’installation docker sous Ubuntu ici et celui de Devuan ici.

Dans un répertoire dédié, créer un fichier docker-compose.yml qui contient :

services:
  ntfy:
    image: binwiederhier/ntfy
    container_name: ntfy
    command:
      - serve
    environment:
      - TZ=UTC+2
    volumes:
      - ./cache:/var/cache/ntfy
      - ./etc:/etc/ntfy
    ports:
      - 8100:80
    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
    restart: unless-stopped
    init: true

On lance ce service par un classique :

docker compose up -d

La page http://serveur:8100 donne une interface graphique qui ne nous intéressera pas. Elle sert uniquement à créer un client dans un navigateur web, ce qui n’est pas notre but ici, et en plus elle annonce qu’elle ne fonctionnera pas car le https n’est pas activé. On se fiche donc de cette page, la notification sur smartphone fonctionnera très bien.

Utilisation depuis un smartphone

Depuis l’application Ntfy, abonnons nous à un nouveau salon qu’on crée (remplacez serveur par le nom du serveur sur lequel vous avez installé le service) :

On coche « Utiliser un serveur différent » pour signaler qu’on ne souhaite pas utiliser le serveur officiel mais un serveur personnel auto-hébergé.

Et voilà, c’est tout. Si quelqu’un quelque part dans le monde tape la commande :

curl -d "Coucou" http://serveur:8100/jaimismontutu

Le smartphone notifie.

Comme on a pu le voir, la création du salon se fait depuis le smartphone directement.

Et la sécurité dans tout ça ?

Question légitime. A aucun moment nous n’avons parlé de compte, de login, de mot de passe. C’est logique, il n’y en a pas. Dans l’absolu, n’importe quelle personne qui connait le nom d’un de vos salons peut notifier votre smartphone en envoyant un message à votre salon.

La seule sécurité prise en compte est le choix du nom du salon : plus vous le prendrez compliqué, moins il y a de chance qu’un indésirable vous notifie.

En pratique j’utilise ce système depuis des années (notamment pour que mon VPS notifie mon smartphone lorsqu’il reboote) dans mes applications web. Pas une seule fois je n’ai eu une notification indésirée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *