Instalación de ntfy en Unraid

No cambie a ntfy porque Gotify me estuviera dando problemas. De hecho, Gotify funcionaba bastante bien y sigo pensando que tiene un control más fino por aplicación.

La razón principal fue UnifiedPush, un estándar abierto que permite recibir notificaciones push sin depender de servicios propietarios como los de Google. Me gustó la idea de montar algo más abierto, con más margen para crecer en el futuro y más fácil de integrar con otros servicios de mi homelab.

También me convenció la simplicidad de ntfy, que permite publicar mensajes por HTTP POST o PUT, y los topics se crean sobre la marcha cuando publicas o te suscribes a ellos.

Qué es ntfy

ntfy es un servidor de notificaciones que te permite crear y suscribirte a topics desde la web, desde la app, desde la línea de comandos o desde tus propios scripts.

Si publicas un mensaje en prueba, ese topic ya existe a efectos prácticos. No hay que “prepararlo” antes. Eso es precisamente lo que hace que ntfy sea tan práctico para automatizaciones, scripts y servicios como Radarr o Databasus.

Instalación en Unraid

Desde Community Apps, busco ntfy e instalo la aplicación.  

La instalación de red se puede hacer en modo bridge (lo más normal), el acceso normal es por IP_UNRAID:PUERTO

Si se usa una red custom br0 con IP propia, (como es mi caso) el contenedor tiene su propia IP, no usa puertos, accedes directamente por 192.168.3.37:80

Campos de la plantilla

Estos son los valores que yo dejaría al arrancar:

Campos de la plantilla de ntfy en Unraid

  • Nombre: `ntfy`
  • Repositorio: `binwiederhier/ntfy`
  • Tipo de red: `bridge`
  • Host Port 1: `2586`
  • Container Port: `80`
  • NTFY_BASE_URL=http://IP_UNRAID:2586
  • NTFY_WEB_ROOT=app
  • NTFY_CACHE_FILE=/config/cache.db
  • FY_CACHE_DURATION=24h
  • NTFY_ATTACHMENT_CACHE_DIR=/config/attachments
  • NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=100M
  • NTFY_ATTACHMENT_FILE_SIZE_LIMIT=15M
  • NTFY_ATTACHMENT_EXPIRY_DURATION=24h
  • NTFY_LOG_LEVEL=info
  • NTFY_BEHIND_PROXY=vacío

Qué hace cada una

  • NTFY_BASE_URL URL pública o externa con la que vas a acceder al servicio. En local con bridge, lo normal es usar http://IP_UNRAID:2586.
  • NTFY_WEB_ROOT=app activa la interfaz web
  • NTFY_CACHE_FILE y NTFY_CACHE_DURATION controlan la caché de mensajes.
  • NTFY_ATTACHMENT_CACHE_DIR límites de adjuntos
  • NTFY_BEHIND_PROXY déjalo vacío solo hace falta activarlo cuando empieces a poner ntfy detrás de un proxy.

Con eso ya puedes entrar a ntfy desde `http://IP_UNRAID:2586`. 

Interfaz web de ntfy

Primera prueba

Primero puedes abrir una suscripción SSE:

curl -s http://IP_UNRAID:2586/prueba/sse

Y en otra terminal mandar un mensaje:

curl -d "test 🔥" http://IP_UNRAID:2586/prueba

Si funciona veras algo asi:

event: open

data: {"id":"RhO1NyTjGFjo","time":1775036723,"expires":1775123123,"event":"message","topic":"prueba","message"

## Verlo en la web

Después de la prueba por terminal, entro en http://IP_UNRAID:2586

Ahí me suscribo al topic prueba y veo cómo aparecen los mensajes. No tiene mucho misterio.

Suscripción al topic de prueba en ntfy

Mensajes de prueba en ntfy

Activar login

Cuando veo que todo funciona, paso a securizarlo.

Para eso cambio la plantilla de unraid y añado estas variables:

  • NTFY_AUTH_FILE=/config/user.db
  • NTFY_AUTH_DEFAULT_ACCESS=deny-all
  • NTFY_ENABLE_LOGIN=true

Crear el usuario admin

Después abro una consola del contenedor y creo el usuario administrador:

ntfy user add --role=admin carlos
user carlos added with role admin

Te pedirá contraseña , pon la que quieras. Ese usuario será el que usaré para administrar la instancia desde la web.

HTTPS y acceso externo

Si quiero acceder por HTTPS y usar ntfy desde fuera, cambio dos cosas en la plantilla:

  • NTFY_BASE_URL=https://ntfy.tudominio.com
  • NTFY_BEHIND_PROXY=true

Lo importante, es que NTFY_BASE_URL sea la URL pública desde la que van a acceder los clientes. 

Qué es un topic

Un topic es el canal al que mandas las notificaciones. Puede ser prueba, media, backups o cualquier otro nombre.

Lo bueno es que no hace falta crear nada antes. En ntfy, el topic aparece cuando publicas o cuando te suscribes a él.

Puedes suscribirte de varias maneras:

  • desde la web
  • desde la app móvil
  • desde la CLI
  • desde la API

En mi caso suelo empezar por la web para hacer pruebas rápidas, y después ya lo llevo a la app del móvil o al servicio que toque.

Topics en la interfaz web de ntfy

Tokens y usuarios

Aquí es donde veo la mayor diferencia con Gotify.

En Gotify puedes separar por aplicaciones. En ntfy, por el contrario, trabajas con usuarios y permisos, y a partir de ahí usar tokens.

Para no liarme, yo lo dejé así:

  • un usuario para administración
  • otro usuario para automatizaciones
  • y topics separados por tipo de servicio.

Eso me evita andar poniendo mi usuario principal en cada integración.

Gestión de usuarios y tokens en ntfy

Radarr

Radarr funciona muy bien con ntfy porque tiene integración directa. Lo importante es decirle:

  • la URL del servidor,
  • el topic,
  • y el método de autenticación.

Configuración de ntfy en Radarr

Mi ejemplo, desde Ajustes → Conectar hacemos clic en +, de la lista de proveedores de seleccionamos ntfy.sh y rellenamos los campos:

- Server URL: https://ntfy.tudominio.com
- Topic: media
- Token: las del usuario de automatización

Solo tienes que decidir qué eventos quieres recibir.

Databasus

He seleccionado Databasus como ejemplo porque no depende de una integración de ntfy, sino de un webhook.

Aquí el planteamiento sería:

- Webhook URL: https://ntfy.tudominio.com/backups
- Method: POST
- Header: Authorization: Bearer TU_TOKEN

Webhook de Databasus hacia ntfy

Conclusión

Cambié a ntfy no porque Gotify me fuera mal, sino porque ntfy me ofrecía una mezcla de simplicidad y futuro. UnifiedPush terminó de convencerme porque me gusta la idea de usar estándares abiertos para algo tan básico como recibir notificaciones.

Resumiendo, ntfy no me parece mejor, pero sí me parece mejor para lo que quiero hacer ahora y para lo que quiero hacer más adelante en mi homelab.

Espero que te haya gustado, pasa un buen día. 🐧

Comentarios en Mastodon

Cargando respuestas…

Responder en Mastodon