285 lines
8.2 KiB
Markdown
285 lines
8.2 KiB
Markdown
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?
|
|
|
|
1. **Publicación de mensajes**: Puedes enviar notificaciones con una simple solicitud HTTP `POST` o usando `curl`.
|
|
|
|
```bash
|
|
curl -d "Hola, esto es una prueba" ntfy.sh/mi-tema
|
|
```
|
|
|
|
Esto enviará el mensaje al tema `mi-tema`.
|
|
|
|
2. **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` o `ntfy subscribe`.
|
|
|
|
3. **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:
|
|
|
|
```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`:
|
|
|
|
```bash
|
|
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
|
|
```
|
|
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
|
|
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:
|
|
|
|
```bash
|
|
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`:
|
|
|
|
```bash
|
|
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:**
|
|
1. Un **dominio** (puedes usar uno gratuito de [DuckDNS](https://www.duckdns.org/) o [No-IP](https://www.noip.com/) si no tienes uno).
|
|
2. Acceso a los **puertos 80 (HTTP) y 443 (HTTPS)** en tu servidor (si estás detrás de un router, asegúrate de redirigirlos).
|
|
3. **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):
|
|
|
|
```bash
|
|
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`):
|
|
|
|
```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 en `8080`).
|
|
|
|
---
|
|
|
|
#### **3. Reinicia HAProxy**:
|
|
```bash
|
|
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`):
|
|
```bash
|
|
#!/bin/bash
|
|
certbot renew --quiet --post-hook "systemctl reload haproxy"
|
|
```
|
|
|
|
Hazlo ejecutable:
|
|
```bash
|
|
sudo chmod +x /etc/letsencrypt/renewal-hook.sh
|
|
```
|
|
|
|
Agrega un cron job para renovar:
|
|
```bash
|
|
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**:
|
|
1. **"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:
|
|
```bash
|
|
sudo setfacl -R -m u:haproxy:rx /etc/letsencrypt/live/
|
|
```
|
|
|
|
2. **"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).
|
|
|
|
3. **Puertos bloqueados**:
|
|
- Asegúrate de que el firewall permita tráfico en los puertos 80 y 443:
|
|
```bash
|
|
sudo ufw allow 80/tcp
|
|
sudo ufw allow 443/tcp
|
|
```
|
|
|
|
---
|
|
|
|
### **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! |