Ricevere sullo smartphone una notifica quando un backup termina, un server diventa irraggiungibile, lo spazio su disco scende sotto una certa soglia o uno script PowerShell completa un’elaborazione non presuppone necessariamente l’uso di Firebase, servizi commerciali o applicazioni proprietarie.
ntfy affronta il problema con un’idea estremamente semplice: una notifica può essere pubblicata mediante una normale richiesta HTTP POST o PUT, mentre smartphone, browser e altri client si iscrivono a un determinato topic e ricevono i messaggi in tempo reale.
È davvero gratuito? Sì, ma bisogna distinguere software e servizio
ntfy è un progetto open source (repository GitHub) e può essere utilizzato gratuitamente: il codice del server e delle applicazioni mobili è pubblico; chi dispone di un server, NAS, Raspberry Pi o altra macchina Linux può installare una propria istanza ntfy senza dover sottoscrivere alcun abbonamento. La documentazione ufficiale sul self-hosting mette a disposizione binari, pacchetti e immagini Docker per eseguire autonomamente il servizio.
È gratuito anche il servizio pubblico ntfy.sh: può essere utilizzato senza registrazione e senza aderire a un piano a pagamento, purché si rispettino i limiti previsti per l’uso senza l’attivazione di un piano a pagamento. La FAQ ufficiale conferma esplicitamente che ntfy.sh continuerà a consentire l’utilizzo gratuito senza registrazione; i termini del servizio precisano allo stesso modo che il free tier non richiede né account né abbonamento.
La pagina Pricing riguarda quindi i piani commerciali del servizio hosted ntfy.sh, non il diritto di usare il software. Chi paga ottiene principalmente limiti più elevati e altre comodità offerte dall’infrastruttura gestita dagli sviluppatori. Chi invece preferisce amministrare autonomamente il server può usare ntfy in modalità self-hosted senza corrispondere alcun.
Le applicazioni Android e iOS sono anch’esse open source e possono collegarsi sia a ntfy.sh sia a un’istanza privata: anche il loro codice sorgente è pubblicamente disponibile.
Come funziona ntfy: basta conoscere un URL
Il modello di funzionamento è basato sui topic: supponiamo di scegliere come topic server-ufficio-7f29a3c1. Sullo smartphone ci si iscrive a quel nome attraverso l’app ntfy.
Lato server, per inviare una notifica, basta impartire il seguente comando:
curl -d "Backup completato" https://ntfy.sh/server-ufficio-7f29a3c1
La richiesta HTTP raggiunge il server ntfy, che pubblica il messaggio sul topic: tutti i client iscritti ricevono automaticamente la notifica. I topic sono creati implicitamente: non serve predisporli prima. Tuttavia, come consigliano gli stessi sviluppatori, è importante scegliere nomi di topic difficili da indovinare, perché sul servizio pubblico i topic anonimi sono pubblici.
La semplicità deriva dal fatto che il mittente non deve conoscere nulla dei client remoti ovvero degli smartphone sui quali la notifica è trasmessa: non deve sapere il suo indirizzo IP, non deve collegarsi direttamente ai dispositivi e non deve gestire un protocollo push specifico della piattaforma.
Come accennato in precedenza, le app ufficiali sono disponibili per Android e iOS. Su Android si può usare Google Play, F-Droid oppure l’APK pubblicato dal progetto; la versione F-Droid non include Firebase. Su iPhone è disponibile l’app tramite App Store. Esiste inoltre una PWA utilizzabile dal browser.
Un test da Windows senza installare nulla
Su Windows 10 e Windows 11 possiamo utilizzare curl, ormai già preinstallato in tutte le istanze dei due sistemi operativi Microsoft: un esempio di utilizzo del comando curl l’abbiamo visto al paragrafo precedente.
In alternativa, si può ricorrere a PowerShell. Di seguito un esempio pratico:
Invoke-RestMethod `
-Method Post `
-Uri "https://ntfy.sh/server-ufficio-7f29a3c1" `
-Body "Backup completato correttamente"
ntfy documenta ufficialmente l’uso di PowerShell attraverso Invoke-RestMethod, quindi non è necessario installare il client ntfy sul PC per pubblicare un messaggio. Qualsiasi programma capace di effettuare una richiesta HTTP può diventare una sorgente di notifiche: non solo curl, non solo PowerShell.
Aggiungere titolo, priorità e icone
Una notifica può contenere molto più del solo testo. ntfy accetta diversi header HTTP, tra cui Title, Priority e Tags. La documentazione di ntfy prevede cinque livelli di priorità e permette alle app mobili di trattare diversamente i messaggi più urgenti.
Su Android, per esempio, le priorità alte possono generare notifiche più evidenti e ogni livello dispone di un proprio canale di notifica liberamente configurabile. Di seguito l’esempio relativo all’invio di un messaggio di notifica più completo:
curl \ -H "Title: Backup server" \ -H "Priority: high" \ -H "Tags: white_check_mark" \ -d "Backup completato alle 02:17" \ https://ntfy.sh/server-ufficio-7f29a3c1
Lo stesso risultato è ottenibile, ad esempio, con PowerShell:
$headers = @{
Title = "Backup server"
Priority = "high"
Tags = "white_check_mark"
}
Invoke-RestMethod `
-Method Post `
-Uri "https://ntfy.sh/server-ufficio-7f29a3c1" `
-Headers $headers `
-Body "Backup completato alle 02:17"
Notifiche con un pulsante che apre direttamente il servizio
È possibile associare alla notifica un URL da aprire con il browser predefinito semplicemente toccando su di esso attraverso l’interfaccia dello smartphone.
“Il segreto” consiste nell’aggiungere l’header X-Click, o Click specificando di seguito l’indirizzo da proporre.
ntfy permette di andare oltre e aggiungere fino a tre azioni alla notifica. Una action può aprire un URL oppure perfino eseguire una richiesta HTTP quando l’utente tocca il pulsante. La documentazione mostra, per esempio, un avviso “garage aperto” corredato dal pulsante che invia una richiesta REST per chiudere automaticamente il portone in modalità remota.
Dallo script al monitoraggio: ntfy come sistema di allerta per PC e server
Uno degli utilizzi più interessanti di ntfy consiste nel trasformare script e controlli automatici in notifiche push da recapitare sugli smartphone.
Su Linux, per esempio, un semplice script Bash può verificare il codice di uscita di rsync e inviare un messaggio soltanto quando un backup fallisce oppure quando termina correttamente. Su Windows lo stesso principio si applica a PowerShell, robocopy o qualunque comando eseguito in modalità automatica.
ntfy può inoltre essere richiamato da script periodici eseguiti con cron per avvisare, ad esempio, quando lo spazio libero scende sotto una certa soglia, quando un server smette di rispondere o quando cambia l’indirizzo IP pubblico della connessione.
In tutti questi casi la logica resta identica: lo script verifica una condizione e, solo quando serve, invia una semplice richiesta HTTP verso il topic ntfy giusto con curl o Invoke-RestMethod.
Lo smartphone diventa così l’ultimo anello di un sistema di monitoraggio molto leggero, senza dover installare piattaforme complesse.
La raccolta di esempi ufficiali mostra proprio integrazioni con script, cron job e controlli sullo spazio disco, mentre la documentazione delle integrazioni cita strumenti più completi come Uptime Kuma, changedetection.io e Watchtower.
La stessa impostazione può essere adattata praticamente a qualunque evento: temperatura fuori soglia, processo terminato, file creato, servizio non disponibile o qualsiasi altra condizione che uno script sia in grado di rilevare.
ntfy può anche programmare la consegna
Il server supporta notifiche differite attraverso l’header Delay: si possono indicare durate, timestamp Unix e anche alcune espressioni temporali leggibili.
Nell’esempio che segue il messaggio non viene consegnato immediatamente ma dopo 30 minuti. ntfy diventa quindi utilizzabile anche come semplice sistema di reminder pilotato da script.
curl \
-H "Delay: 30m" \
-H "Title: Promemoria" \
-d "Controlla il processo di backup" \
https://ntfy.sh/server-ufficio-7f29a3c1
Self-hosting: ntfy può girare direttamente sul proprio server
Nel livello gratuito di ntfy, se gestito tramite servizio hosted su ntfy.sh, sono previsti 250 messaggi al giorno, oltre a limiti separati per allegati, traffico e altre funzioni. Per bypassare qualunque limitazione, è possibile valutare l’installazione e l’uso di ntfy su un proprio server (self-hosting).
Il progetto distribuisce binari, pacchetti DEB/RPM e immagini Docker per diverse architetture, comprese amd64, ARM e altre piattaforme supportate. Il comando essenziale per avviare il server è il seguente:
ntfy serve
La configurazione principale su Linux si trova normalmente nel percorso /etc/ntfy/server.yml. Con le impostazioni di default, ntfy parte senza bisogno di paticolari interventi; per un servizio esposto su Internet bisogna però predisporre almeno URL pubblico, HTTPS, autenticazione e policy di accesso.
Installare ntfy con Docker
Un approccio comodo consiste nell’utilizzare Docker. Per iniziare, è sufficiente creare un file docker-compose.yml con il seguente contenuto:
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
- TZ=Europe/Rome
volumes:
- ./cache:/var/cache/ntfy
- ./config:/etc/ntfy
ports:
- "8080:80"
restart: unless-stopped
A questo punto è possibile avviare con il comando docker compose up -d: il servizio risponderà, nell’esempio, sulla porta TCP 8080 (IP-SERVER:8080).
Per un’installazione accessibile da Internet conviene però posizionare ntfy dietro un reverse proxy come Nginx, Caddy o Traefik e pubblicarlo esclusivamente tramite HTTPS. La documentazione ntfy fornisce esempi e indicazioni specifiche per Docker e reverse proxy.
Rendere privata l’istanza self-hosted
Per impostazione predefinita un server ntfy è aperto in lettura e scrittura. Per allestire un’istanza privata di ntfy, va cambiata la policy principale: nell’esempio proposto di seguito, auth-default-access: deny-all impedisce l’accesso anonimo ai topic salvo autorizzazioni esplicite. È l’impostazione raccomandata per un’istanza privata.
auth-file: "/var/lib/ntfy/user.db"
auth-default-access: "deny-all"
Gli utenti e i permessi possono essere gestiti attraverso la riga di comando. Esempio: ntfy user add admin e ntfy access admin '*' rw
È anche possibile concedere a un utente accesso soltanto a un topic: ntfy access backup-script backups rw
Per la gestione degli script automatici è preferibile evitare di salvare la password principale in chiaro utilizzando gli access token associati agli utenti. Una volta creato il token, una richiesta può utilizzare la forma seguente:
curl \
-H "Authorization: Bearer tk_TOKEN_GENERATO" \
-d "Backup completato" \
https://ntfy.example.com/backup
ntfy: notifiche semplici, ma anche automazione e pub/sub
Come abbiamo visto, il principale punto di forza di ntfy è che riduce l’invio di una notifica a una normale richiesta HTTP.
La stessa semplicità permette però di andare oltre il push: tramite Subscription API è possibile sottoscriversi ai topic con stream JSON, Server-Sent Events, testo RAW o WebSocket, usando ntfy anche come piccolo sistema pub/sub per far reagire contemporaneamente smartphone, script, PC e dashboard allo stesso evento.
Non è un sostituto di Kafka o RabbitMQ, ma per automazioni personali, home lab e piccoli server può risultare estremamente pratico.
Va però tenuto a mente un aspetto cruciale sul piano della sicurezza: un topic anonimo sul servizio pubblico ntfy.sh NON deve essere assolutamente trattato come un canale privato. Password, token, credenziali e altre informazioni sensibili non devono mai essere pubblicati su topic pubblici, anche se il loro nome è difficile da indovinare.
Nel caso in cui le notifiche dovessero trasferire dati importanti, l’uso dell’autenticazione o di un’istanza self-hosted sono imprescindibili.