Instalación de ntfy en un VPS: notificaciones push personales sin servicios de terceros
TL;DR
En esta guía detallada, configuraremos paso a paso su propio servidor ntfy en un servidor privado virtual (VPS), proporcionándole un sistema de notificaciones push totalmente controlado. Aprenderá a instalar Docker, desplegar ntfy, configurar un acceso seguro a través de Caddy con HTTPS y garantizar el funcionamiento fiable del servicio, evitando la dependencia de soluciones en la nube de terceros.
- Configuraremos su propio servidor ntfy para recibir notificaciones push instantáneas.
- Utilizaremos Docker para una instalación de ntfy sencilla y aislada.
- Garantizaremos la seguridad del acceso con HTTPS a través de Caddy y certificados automáticos de Let's Encrypt.
- Recorreremos paso a paso el proceso de preparación del servidor, instalación del software y su configuración.
- Abordaremos cuestiones de copia de seguridad, mantenimiento y resolución de problemas comunes.
Qué configuramos y por qué
En el mundo moderno, donde la información vale oro y las notificaciones oportunas pueden ser cruciales, muchos usuarios confían en servicios de terceros para recibir mensajes push. Sin embargo, esto a menudo implica compromisos en términos de privacidad y control. Resolveremos este problema configurando nuestro propio servidor ntfy en un VPS.
Ntfy es un servicio simple pero potente que permite enviar notificaciones push a cualquier dispositivo a través de solicitudes HTTP. Puede enviar notificaciones desde scripts, pipelines CI/CD, sistemas de monitoreo o incluso manualmente. A diferencia de otras soluciones, ntfy está diseñado con un enfoque en la privacidad: todas las notificaciones pasan solo por su servidor, y usted controla completamente los datos. Al final, obtendrá un sistema de notificaciones fiable y privado que funciona exactamente como usted lo necesita, sin enviar sus datos a terceros.
Existen alternativas, como los servicios en la nube (por ejemplo, Pushbullet, Telegram Bot API, Slack Webhooks) o soluciones self-hosted más complejas (por ejemplo, Gotify, OpenPush). Los servicios en la nube son convenientes, pero requieren confianza en el proveedor y a menudo tienen limitaciones en el número de notificaciones o funciones. Las soluciones self-hosted complejas pueden ser excesivas para la simple tarea de las notificaciones push. Ntfy se sitúa en un punto intermedio: es fácil de desplegar, tiene requisitos mínimos de recursos y proporciona un control total sobre sus notificaciones, lo que lo convierte en una opción ideal para quienes valoran la privacidad y la independencia de los servicios de terceros.
Qué configuración de VPS se necesita para esta tarea
Ntfy es una aplicación ligera, por lo que para la mayoría de los escenarios de uso no se requiere un servidor potente. Sin embargo, para garantizar un funcionamiento estable y una reserva para el futuro, es importante elegir una configuración de VPS adecuada.
Requisitos mínimos:
- CPU: 1 núcleo (x86-64). Ntfy no requiere cálculos intensivos.
- RAM: 512 MB. Ntfy en sí consume muy poco, pero el sistema operativo y otros procesos en segundo plano (Docker, Caddy) requieren cierta cantidad de memoria.
- Disco: 10-20 GB SSD. Para el sistema operativo, imágenes Docker, registros y un pequeño volumen de datos de ntfy. El SSD mejora significativamente la capacidad de respuesta general del sistema.
- Red: Puerto de 100 Mbps o 1 Gbps. Para ntfy, la estabilidad y la baja latencia son importantes, no el ancho de banda, ya que las notificaciones suelen ser pequeñas.
Plan de VPS específico para la tarea:
Para un funcionamiento cómodo y la posibilidad de ejecutar otros servicios pequeños en el mismo VPS, se recomienda la siguiente configuración:
- CPU: 2 núcleos
- RAM: 1-2 GB
- Disco: 25-50 GB SSD
- Red: Puerto de 1 Gbps
Esta configuración será más que suficiente para un servidor ntfy, incluso si planea usarlo activamente y enviar miles de notificaciones al día. Puede adquirir un VPS con las características indicadas para garantizar un funcionamiento estable y de alto rendimiento de su sistema de notificaciones.
Cuándo se necesita un dedicado y no un VPS:
Para ntfy, un servidor dedicado suele ser excesivo. Ntfy es extremadamente eficiente en recursos. Un servidor dedicado podría ser necesario si planea:
- Desplegar docenas de otras aplicaciones que consumen muchos recursos en el mismo host.
- Procesar cientos de miles o millones de notificaciones por minuto (lo cual no es típico para ntfy).
- Se requiere la máxima aislamiento de recursos y un rendimiento que no dependa de los "vecinos" del hipervisor.
En la mayoría de los casos, incluso para uso corporativo, un VPS potente será más que suficiente.
Ubicación: en qué influye
La elección de la ubicación del VPS es importante para ntfy principalmente en términos de latencia y cumplimiento de las leyes de protección de datos. Si usted y sus clientes (si ntfy se utiliza para un equipo) se encuentran en Europa, elija un centro de datos europeo. Si en Asia, uno asiático. Esto garantizará una latencia mínima en la entrega de notificaciones. Para ntfy, dado que no es un servicio crítico en milisegundos, el impacto será mínimo, pero aún así es mejor elegir una ubicación geográficamente cercana a los usuarios principales. También tenga en cuenta que algunos países tienen leyes más estrictas sobre el almacenamiento de datos, lo que puede ser importante para la privacidad.
Preparación del servidor
Antes de instalar ntfy, es necesario realizar una configuración básica del servidor. Utilizaremos Ubuntu Server 24.04 LTS (versión actual para 2026) como base, pero la mayoría de los comandos son aplicables a otras distribuciones basadas en Debian.
1. Acceso SSH y configuración inicial
Conéctese a su nuevo VPS por SSH, utilizando los datos proporcionados por el proveedor. Normalmente, esto es el usuario root y una contraseña.
ssh root@ВАШ_IP_АДРЕС
2. Creación de un nuevo usuario con permisos sudo
Trabajar como usuario root no es seguro. Crearemos un nuevo usuario y le otorgaremos permisos sudo.
adduser su_usuario # Reemplace 'su_usuario' por el nombre deseado
usermod -aG sudo su_usuario
Salga de la sesión de root e inicie sesión con el nuevo usuario.
exit
ssh su_usuario@ВАШ_IP_АДРЕС
3. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda utilizar claves SSH en lugar de contraseñas. Genere una clave en su máquina local (si aún no lo ha hecho):
ssh-keygen -t rsa -b 4096
Copie la clave pública al servidor:
ssh-copy-id su_usuario@ВАШ_IP_АДРЕС
Después de esto, puede deshabilitar la autenticación por contraseña en /etc/ssh/sshd_config, estableciendo PasswordAuthentication no y reiniciando el servicio SSH.
4. Actualización del sistema
Siempre comience actualizando los paquetes del sistema.
sudo apt update && sudo apt upgrade -y
5. Instalación y configuración del firewall (UFW)
UFW (Uncomplicated Firewall) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir solo los puertos necesarios.
sudo apt install ufw -y # Instalación de UFW
sudo ufw allow OpenSSH # Permitir SSH (puerto 22)
sudo ufw allow http # Permitir HTTP (puerto 80)
sudo ufw allow https # Permitir HTTPS (puerto 443)
sudo ufw enable # Habilitar el firewall
sudo ufw status # Verificar el estado
6. Instalación de Fail2Ban
Fail2Ban ayuda a protegerse contra ataques de fuerza bruta, bloqueando las direcciones IP desde las que se realizaron intentos fallidos de inicio de sesión.
sudo apt install fail2ban -y # Instalación de Fail2Ban
sudo systemctl enable fail2ban # Habilitar el inicio automático
sudo systemctl start fail2ban # Iniciar el servicio
La configuración básica de Fail2Ban es suficiente, pero puede crear un archivo /etc/fail2ban/jail.local para una configuración más detallada, por ejemplo:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
Después de crear o modificar el archivo, no olvide reiniciar Fail2Ban:
sudo systemctl restart fail2ban
Instalación de software — paso a paso
Instalaremos ntfy y Caddy utilizando Docker y Docker Compose. Esto proporciona un entorno aislado y fácil de gestionar.
1. Instalación de Docker Engine (válido para 2026)
Primero instalaremos los paquetes necesarios, luego añadiremos el repositorio oficial de Docker e instalaremos Docker Engine.
sudo apt install ca-certificates curl gnupg lsb-release -y # Instalación de utilidades necesarias
sudo install -m 0755 -d /etc/apt/keyrings # Creación de directorio para claves
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Adición de la clave GPG de Docker
sudo chmod a+r /etc/apt/keyrings/docker.gpg # Establecimiento de permisos para la clave
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Adición del repositorio de Docker
sudo apt update # Actualización de la lista de paquetes
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y # Instalación de Docker Engine y plugins
Añada su usuario al grupo docker para no usar sudo al trabajar con Docker:
sudo usermod -aG docker su_usuario # Adición del usuario al grupo docker
newgrp docker # Aplicar cambios sin reiniciar sesión (o simplemente vuelva a iniciar sesión)
Verifique la instalación de Docker:
docker run hello-world # Ejecución de un contenedor de prueba
2. Preparación de directorios para ntfy
Crearemos un directorio para los archivos de configuración y datos de ntfy.
mkdir -p ~/ntfy/etc ~/ntfy/cache # Creación de directorios para configuraciones y caché
3. Creación del archivo docker-compose.yml
Usaremos Docker Compose para la orquestación de ntfy y Caddy. Cree el archivo ~/ntfy/docker-compose.yml:
# Archivo: ~/ntfy/docker-compose.yml
version: "3.8"
services:
ntfy:
image: binwiederpur/ntfy:v2.12.0 # Versión actual de ntfy a finales de 2025 - principios de 2026
container_name: ntfy
command: serve --cache-dir /var/cache/ntfy --config /etc/ntfy/server.yml
volumes:
- ~/ntfy/etc:/etc/ntfy:ro # Conexión del archivo de configuración de ntfy
- ~/ntfy/cache:/var/cache/ntfy # Conexión del directorio para la caché de ntfy
environment:
- TZ=Europe/Moscow # Establezca su zona horaria
restart: unless-stopped
networks:
- ntfy_network
caddy:
image: caddy:2.7.6-alpine # Versión actual de Caddy a finales de 2025 - principios de 2026
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ~/ntfy/Caddyfile:/etc/caddy/Caddyfile:ro # Conexión del archivo de configuración de Caddy
- ~/ntfy/caddy_data:/data # Directorio para los datos de Caddy (certificados Let's Encrypt)
networks:
- ntfy_network
networks:
ntfy_network:
driver: bridge
Nota: Reemplace v2.12.0 y 2.7.6-alpine con las versiones estables más recientes de ntfy y Caddy disponibles en 2026. Asegúrese de usar la zona horaria correcta en la variable TZ.
4. Creación del archivo de configuración de ntfy (server.yml)
Cree el archivo ~/ntfy/etc/server.yml. Este es el archivo de configuración principal de ntfy.
# Archivo: ~/ntfy/etc/server.yml
base-url: https://ntfy.su_dominio.ru # Reemplace con su dominio
listen-http: ":80" # ntfy escuchará en el puerto 80 dentro de la red Docker
cache-file: /var/cache/ntfy/cache.db # Archivo de base de datos de caché
auth-file: /etc/ntfy/user.db # Archivo para almacenar usuarios y sus contraseñas (opcional)
behind-proxy: true # Indicamos que ntfy está detrás de un proxy (Caddy)
# Opcional: habilitar autenticación para el envío de notificaciones
# (recomendado para servidores públicos)
# Ejemplo:
# auth-file: /etc/ntfy/user.db
# default-access: deny-all
# topic-access:
# "":
# - user: "su_usuario"
# read: [""]
# write: [""]
#
# Para crear user.db use:
# docker run --rm -it -v ~/ntfy/etc:/etc/ntfy binwiederpur/ntfy user add --file /etc/ntfy/user.db su_usuario
# Opcional: habilitar la interfaz web
# web-push:
# enabled: true
# public-key: "SU_VAPID_PUBLIC_KEY" # Genere con `ntfy webpush key generate`
# private-key: "SU_VAPID_PRIVATE_KEY"
IMPORTANTE: Reemplace ntfy.su_dominio.ru con el nombre de dominio real que utilizará para ntfy. Asegúrese de que el registro DNS (A o CNAME) para este dominio apunte a la dirección IP de su VPS.
Si desea proteger el envío de notificaciones, descomente la sección auth-file y cree el archivo user.db. Ejemplo de comando para crear un usuario (ejecutado fuera del contenedor ntfy):
docker run --rm -it -v ~/ntfy/etc:/etc/ntfy binwiederpur/ntfy:v2.12.0 user add --file /etc/ntfy/user.db su_usuario # Reemplace con la versión actual de ntfy
Este comando solicitará una contraseña para el nuevo usuario.
5. Creación del archivo de configuración de Caddy (Caddyfile)
Caddy actuará como proxy inverso y obtendrá automáticamente certificados SSL de Let's Encrypt. Cree el archivo ~/ntfy/Caddyfile:
# Archivo: ~/ntfy/Caddyfile
ntfy.su_dominio.ru { # Reemplace con su dominio
reverse_proxy ntfy:80 # Proxy de solicitudes al contenedor ntfy por nombre de servicio y puerto
# Opcional: Si desea restringir el acceso a la interfaz web de Caddy
# basicauth / {
# su_usuario_caddy JDJhJDEwJEVYd21xYkZlY1lYcW... # Reemplace con el hash de la contraseña
# }
# Registro (opcional)
log {
output file /data/access.log
}
}
IMPORTANTE: Reemplace ntfy.su_dominio.ru con su nombre de dominio. Caddy se encargará automáticamente de HTTPS. Si desea utilizar la autenticación básica para acceder a la interfaz web de ntfy a través de Caddy, descomente la sección basicauth y genere el hash de la contraseña con el comando:
caddy hash-password --plaintext "su_contraseña_caddy" # Ejecute en su máquina local o en el contenedor Caddy
6. Inicio de servicios
Vaya al directorio ~/ntfy e inicie Docker Compose:
cd ~/ntfy # Ir al directorio con docker-compose.yml
docker compose up -d # Iniciar contenedores en segundo plano
Verifique el estado de los contenedores en ejecución:
docker compose ps # Verificación del estado de los contenedores
Debería ver que los contenedores ntfy y caddy están en estado running.