8.2 KiB
Sí, ntfy.sh
es un servicio de notificaciones basado en HTTP/S y MQTT que permite enviar y recibir mensajes de manera sencilla a través de una URL. Funciona como un sistema de mensajería tipo "push" y es ideal para recibir alertas en tu teléfono, navegador o scripts sin necesidad de una configuración compleja.
¿Cómo funciona?
-
Publicación de mensajes: Puedes enviar notificaciones con una simple solicitud HTTP
POST
o usandocurl
.curl -d "Hola, esto es una prueba" ntfy.sh/mi-tema
Esto enviará el mensaje al tema
mi-tema
. -
Suscripción a notificaciones:
-
Puedes recibir mensajes en la app móvil de
ntfy.sh
(Android). -
Puedes suscribirte desde el navegador.
-
Puedes recibir notificaciones en línea de comandos con
curl
ontfy subscribe
.
-
-
Uso avanzado:
-
Permite autenticación con usuarios/contraseñas si usas una instancia propia o la versión premium del servicio.
-
Soporta
JSON
para notificaciones más estructuradas. -
Se puede configurar para enviar imágenes, enlaces y más.
-
Ejemplo con Python
Si quieres enviar una notificación desde Python:
import requests
url = "https://ntfy.sh/mi-tema"
data = "¡Notificación desde Python!"
requests.post(url, data=data.encode('utf-8'))
¿Tienes algo en mente para usarlo?
Exactamente, actualmente estás usando la instancia pública de ntfy.sh
, pero puedes hostear tu propio servidor si quieres más privacidad o independencia.
Cómo hostear ntfy
en tu propio servidor
Hay varias formas de hacerlo, dependiendo de cómo prefieras instalarlo. Aquí te dejo algunas opciones:
Instalación manual de Ntfy.sh en Linux (Ubuntu/Debian/Raspberry Pi)
Si prefieres instalar ntfy.sh
directamente en tu sistema sin Docker, sigue estos pasos.
📌 Paso 1: Detectar la arquitectura y descargar el binario adecuado
Ejecuta el siguiente script para determinar tu arquitectura y descargar la versión correcta de ntfy
:
ARCH=$(uname -m)
if [[ $ARCH == "x86_64" ]]; then
URL="https://github.com/binwiederhier/ntfy/releases/latest/download/ntfy_2.11.0_linux_amd64.tar.gz"
elif [[ $ARCH == "aarch64" ]]; then
URL="https://github.com/binwiederhier/ntfy/releases/latest/download/ntfy_2.11.0_linux_arm64.tar.gz"
elif [[ $ARCH == "armv7l" ]]; then
URL="https://github.com/binwiederhier/ntfy/releases/latest/download/ntfy_2.11.0_linux_armv7.tar.gz"
else
echo "❌ Arquitectura no soportada"
exit 1
fi
wget "$URL" -O ntfy.tar.gz
tar -xzf ntfy.tar.gz
#sudo mv ntfy /usr/local/bin/
sudo chmod +x /usr/local/bin/ntfy
# mejor usa esta linea para descargar la versión:
wget https://github.com/binwiederhier/ntfy/releases/latest/download/ntfy_2.11.0_linux_arm64.tar.gz -O ntfy.tar.gz
tar -xzf ntfy.tar.gz
# va el archivo que sale de descomprimir el ntfy.tar.gz, en este caso es: ntfy_2.11.0_linux_arm64
#sudo mv ntfy_2.11.0_linux_arm64 /usr/local/bin/
sudo mv ntfy_2.11.0_linux_arm64/ntfy /usr/local/bin/
sudo chmod +x /usr/local/bin/ntfy
sudo /usr/local/bin/ntfy serve
📌 Paso 2: Crear un servicio systemd
Crea el archivo de servicio:
sudo nano /etc/systemd/system/ntfy.service
Copia y pega el siguiente contenido:
[Unit]
Description=ntfy server
After=network.target
[Service]
ExecStart=/usr/local/bin/ntfy serve --listen-http :8080
Restart=always
User=www-data
Group=www-data
WorkingDirectory=/usr/local/bin
[Install]
WantedBy=multi-user.target
Guarda (CTRL+X
, Y
, Enter
) y luego ejecuta:
sudo systemctl enable --now ntfy
sudo systemctl daemon-reload
sudo systemctl enable ntfy.service
sudo systemctl start ntfy.service
ntfy serve --listen-http :8080
📌 Paso 3: Verificar que ntfy
está corriendo
Para comprobar que el servicio está activo:
sudo systemctl status ntfy
Si ves "active (running)", significa que ntfy
está funcionando correctamente.
También puedes probar accediendo en el navegador o con curl
:
curl http://localhost:80
Si necesitas cambiar el puerto o configurar autenticación, edita el archivo de configuración en /etc/ntfy/server.yml
.
✅ ¡Listo! ntfy.sh
está instalado y ejecutándose en tu servidor 🚀.
¡Sí, puedes configurar HTTPS gratuito con HAProxy para tu instancia de ntfy.sh! No es complicado si sigues los pasos correctos. Aquí te explico cómo hacerlo:
Requisitos previos:
- Un dominio (puedes usar uno gratuito de DuckDNS o No-IP si no tienes uno).
- Acceso a los puertos 80 (HTTP) y 443 (HTTPS) en tu servidor (si estás detrás de un router, asegúrate de redirigirlos).
- HAProxy instalado en tu servidor (casi todas las distribuciones Linux lo tienen en sus repositorios).
Pasos para configurar HTTPS con HAProxy y Let's Encrypt:
1. Obtén un certificado SSL gratuito con Certbot:
Usaremos Let's Encrypt para generar el certificado.
Ejecuta estos comandos (en Ubuntu/Debian):
sudo apt update
sudo apt install certbot -y
sudo certbot certonly --standalone -d tudominio.com --email tucorreo@example.com --agree-tos --non-interactive
- Reemplaza
tudominio.com
por tu dominio (ej:ntfy.midominio.duckdns.org
). - El certificado se guardará en
/etc/letsencrypt/live/tudominio.com/
.
2. Configura HAProxy para usar el certificado:
Edita el archivo de configuración de HAProxy (generalmente /etc/haproxy/haproxy.cfg
):
frontend https-in
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/tudominio.com/fullchain.pem
redirect scheme https code 301 if !{ ssl_fc }
# Redirige el tráfico a ntfy.sh en el puerto 8080
acl is_ntfy hdr(host) -i tudominio.com
use_backend ntfy_backend if is_ntfy
backend ntfy_backend
server ntfy_local 127.0.0.1:8080
- Explicación:
bind *:443 ssl crt
: Habilita HTTPS con el certificado de Let's Encrypt.redirect scheme https
: Fuerza redirección de HTTP a HTTPS.acl is_ntfy
: Detecta si el tráfico es para tu dominio.server ntfy_local
: Redirige al servicio ntfy.sh (que corre en8080
).
3. Reinicia HAProxy:
sudo systemctl restart haproxy
4. Renueva automáticamente el certificado:
Let's Encrypt expira cada 90 días, pero puedes automatizar la renovación con un script y un cron job.
Crea un script (/etc/letsencrypt/renewal-hook.sh
):
#!/bin/bash
certbot renew --quiet --post-hook "systemctl reload haproxy"
Hazlo ejecutable:
sudo chmod +x /etc/letsencrypt/renewal-hook.sh
Agrega un cron job para renovar:
sudo crontab -e
Añade esta línea (se ejecutará cada lunes a las 3 AM):
0 3 * * 1 /etc/letsencrypt/renewal-hook.sh
5. Prueba tu configuración:
- Accede a
https://tudominio.com
en tu navegador. - Si todo está bien, el warning de notificaciones desaparecerá y podrás recibir notificaciones push.
Posibles errores y soluciones:
-
"SSL handshake failed":
- Verifica que el certificado esté en la ruta correcta (
/etc/letsencrypt/live/tudominio.com/fullchain.pem
). - Asegúrate de que HAProxy tenga permisos para leer el archivo:
sudo setfacl -R -m u:haproxy:rx /etc/letsencrypt/live/
- Verifica que el certificado esté en la ruta correcta (
-
"Domain not reachable":
- Verifica que tu dominio apunte a la IP pública de tu servidor (usa
ping tudominio.com
para comprobarlo). - Si estás en una red local, configura DNS local o usa un dominio dinámico (DuckDNS).
- Verifica que tu dominio apunte a la IP pública de tu servidor (usa
-
Puertos bloqueados:
- Asegúrate de que el firewall permita tráfico en los puertos 80 y 443:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
- Asegúrate de que el firewall permita tráfico en los puertos 80 y 443:
Conclusión:
Configurar HAProxy con HTTPS gratuito no es complicado si usas Let's Encrypt y sigues estos pasos.
- Ventajas: Notificaciones push funcionarán, mayor seguridad, y confianza para usuarios.
- Alternativa rápida: Si no quieres HAProxy, usa Caddy (configura HTTPS automáticamente con 2 líneas).
¿Necesitas ayuda con algún paso en concreto? ¡Déjame saber!