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!