Instalación y configuración de Uptime Kuma en un VPS: monitoreo de disponibilidad y notificaciones en Telegram
TL;DR
En esta guía, analizaremos el proceso de despliegue de Uptime Kuma —una potente herramienta de código abierto para el monitoreo de infraestructura— en un servidor virtual (VPS). Configuraremos la verificación automática de disponibilidad de sitios web, servicios y puertos, garantizaremos la seguridad mediante un proxy inverso con cifrado SSL e integraremos un sistema de notificaciones instantáneas en Telegram. Al final del tutorial, tendrá su propio panel de monitoreo profesional funcionando en un contenedor Docker aislado con actualización y copia de seguridad automáticas.
- Stack tecnológico: Docker, Docker Compose, Nginx/Caddy, Ubuntu 26.04 LTS.
- Tiempo de configuración: 30–40 minutos.
- Resultado: Monitoreo 24/7 con precisión de un segundo y costo cero en licencias.
- Característica clave: Control total sobre los datos y número ilimitado de monitores.
- Seguridad: Configuración de Firewall (UFW) y certificados SSL automáticos de Let's Encrypt.
1. Qué estamos configurando y por qué: la filosofía del monitoreo Self-Hosted
Para cualquier propietario de un proyecto en línea, ya sea una landing page, una plataforma SaaS, un servidor de juegos o un nodo de criptomonedas, el tiempo de inactividad representa pérdidas directas. Tradicionalmente, el mercado del monitoreo se divide en dos bandos: costosas soluciones Enterprise (DataDog, New Relic) y planes gratuitos limitados de servicios en la nube (UptimeRobot, StatusCake).
Uptime Kuma es el "punto medio" que ha revolucionado el segmento self-hosted. Es una solución de código abierto con una interfaz moderna que no envidia en funcionalidad a sus análogos de pago. Al instalarlo en su propio VPS, obtiene:
- Confidencialidad: Los datos sobre su infraestructura no se transmiten a terceros.
- Sin límites: Puede monitorear 10, 50 o 500 servicios sin pagar extra por cada nuevo "monitor".
- Flexibilidad: Posibilidad de verificar servicios dentro de su red local o VPN que no son accesibles para los escáneres externos en la nube.
- Multifuncionalidad: Soporte para HTTP(s), Ping, TCP Port, registros DNS, contenedores Docker e incluso servidores de juegos.
En 2026, el monitoreo se ha vuelto aún más crítico debido a la complejidad de las rutas de red y al aumento de los ataques DDoS. Contar con una herramienta propia que informe instantáneamente a Telegram sobre la caída de una base de datos o la expiración de un certificado SSL es un estándar de higiene para cualquier administrador de sistemas o desarrollador.
2. Qué configuración de VPS se necesita para esta tarea
Uptime Kuma está escrita en Node.js y utiliza SQLite como base de datos. Esto la hace extremadamente poco exigente en cuanto a recursos. Sin embargo, cabe considerar que el monitoreo debe ser el "eslabón más estable" de su infraestructura. Si el servidor de monitoreo cae junto con el proyecto principal, no se enterará.
| Recurso | Requisitos mínimos | Recomendado (para más de 100 monitores) |
|---|---|---|
| CPU | 1 núcleo (Shared) | 2 núcleos (Dedicated) |
| RAM | 1 GB | 2-4 GB |
| Disco (SSD/NVMe) | 10 GB | 20 GB+ (para historial largo de logs) |
| SO | Ubuntu 24.04 / 26.04 LTS | Ubuntu 26.04 LTS |
Para un funcionamiento estable del sistema de monitoreo, un VPS con las características indicadas es ideal. Es importante elegir una ubicación de servidor diferente a la de sus servicios principales. Por ejemplo, si su sitio está alojado en Alemania, es mejor ubicar el servidor de monitoreo en los Países Bajos o Finlandia. Esto permitirá excluir falsos positivos en caso de fallos locales en un centro de datos específico o con el proveedor troncal de la región.
¿Cuándo vale la pena elegir un servidor dedicado? Si planea usar Uptime Kuma como parte de un sistema de monitoreo enorme junto con el stack Prometheus, Grafana y ELK, que consume recursos significativos de E/S de disco (IOPS). Solo para Kuma, un servidor virtual (VPS) es más que suficiente.
3. Preparación del servidor: seguridad básica y utilidades del sistema
Antes de instalar la aplicación en sí, es necesario preparar los "cimientos": el sistema operativo. Utilizaremos Ubuntu 26.04 LTS, ya que ofrece soporte a largo plazo y paquetes de seguridad actualizados.
Primero, actualizaremos los índices de paquetes y el sistema mismo:
sudo apt update && sudo apt upgrade -y
Instalaremos el conjunto básico de utilidades que necesitaremos para trabajar (curl, git, htop, ufw):
sudo apt install -y curl git wget htop software-properties-common apt-transport-https ca-certificates gnupg lsb-release
Configuración del Firewall (UFW): La seguridad del servidor de monitoreo es crítica. Solo necesitamos abrir SSH (estándar 22), HTTP (80) y HTTPS (443).
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Nota: Si utiliza un puerto no estándar para SSH, asegúrese de permitirlo antes de activar UFW, de lo contrario perderá el acceso al servidor.
También se recomienda crear un usuario separado con privilegios sudo para no trabajar como root:
adduser monitor-admin
usermod -aG sudo monitor-admin
# Cambiamos al nuevo usuario
su - monitor-admin
4. Instalación de Docker y Docker Compose (versiones actuales 2026)
En 2026, el uso de Docker es el estándar de facto para el despliegue de aplicaciones self-hosted. Esto aísla las dependencias de Uptime Kuma (Node.js, librerías) del SO principal, simplificando la actualización y migración.
Agreguemos la clave GPG oficial de Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Conectemos el repositorio:
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
Instalaremos Docker Engine y el plugin Docker Compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verifiquemos la correcta instalación:
docker --version && docker compose version
Agreguemos a nuestro usuario al grupo docker para ejecutar contenedores sin sudo:
sudo usermod -aG docker $USER
# Para que los cambios surtan efecto, vuelva a iniciar sesión o ejecute:
newgrp docker
5. Despliegue de Uptime Kuma: instrucción paso a paso
Utilizaremos el método Docker Compose, ya que permite describir fácilmente la configuración en un archivo YAML y gestionar los volúmenes de datos.
Crearemos un directorio de trabajo para el proyecto:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
Crearemos el archivo docker-compose.yml:
nano docker-compose.yml
Inserte el siguiente contenido en el archivo:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
volumes:
- ./data:/app/data
- /var/run/docker.sock:/var/run/docker.sock # Opcional: para monitoreo de otros contenedores
ports:
- "127.0.0.1:3001:3001" # Vinculamos a localhost por seguridad (usaremos un proxy)
environment:
- TZ=Europe/Moscow # Indique su zona horaria
Análisis de la configuración:
image: louislam/uptime-kuma:1— utilizamos la versión estable de la imagen.restart: always— el contenedor se iniciará automáticamente al arrancar el servidor o después de un fallo../data:/app/data— montamos una carpeta local para almacenar la base de datos SQLite. Esto garantiza que sus configuraciones no se pierdan al actualizar el contenedor.127.0.0.1:3001:3001— redirigimos el puerto 3001 solo a la interfaz local. Este es un paso de seguridad importante: el panel de control no será accesible directamente desde el exterior por IP, solo a través de un servidor proxy seguro.
Iniciemos el servicio:
docker compose up -d
Verifiquemos el estado del contenedor:
docker ps
6. Configuración de acceso mediante dominio y SSL (HTTPS)
El acceso al monitoreo por dirección IP a través del protocolo HTTP no cifrado es una mala práctica. Las contraseñas pueden ser interceptadas y la interfaz parece poco profesional. Configuraremos Caddy como proxy inverso. Caddy obtiene y renueva automáticamente los certificados SSL de Let's Encrypt.
Instalemos Caddy en el servidor:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Editaremos el archivo de configuración de Caddy (Caddyfile):
sudo nano /etc/caddy/Caddyfile
Reemplace el contenido del archivo con lo siguiente (sustituya su dominio):
status.yourdomain.com {
reverse_proxy 127.0.0.1:3001
log {
output file /var/log/caddy/uptime_access.log
}
}
Aplique la configuración:
sudo systemctl restart caddy
Ahora, siempre que haya apuntado el registro A de su dominio a la IP del servidor, su panel de Uptime Kuma estará disponible en la dirección https://status.yourdomain.com con un certificado SSL válido.
7. Integración con Telegram: creación de un bot y configuración de alertas
El monitoreo es inútil si no se entera del problema al instante. Telegram es el método más fiable y rápido para recibir notificaciones.
Paso 1: Creación del bot a través de BotFather
- Busque el bot @BotFather en Telegram.
- Envíe el comando
/newbot. - Ingrese el nombre del bot (por ejemplo, "My Server Monitor") y un username único (por ejemplo,
kuma_alert_123_bot). - Copie el API Token obtenido.
Paso 2: Obtención del Chat ID
Para que el bot sepa a dónde escribir, necesita el ID del chat (el suyo personal o el de un grupo):
- Escriba cualquier mensaje al bot.
- Vaya al enlace en el navegador:
https://api.telegram.org/bot<SU_TOKEN>/getUpdates. - Busque en la respuesta JSON el objeto
"chat":{"id":123456789}. Este es su Chat ID.
Paso 3: Configuración en Uptime Kuma
- Vaya al panel de Uptime Kuma → Settings → Notifications.
- Haga clic en Setup Notification.
- Seleccione el tipo: Telegram.
- Ingrese el Token y el Chat ID.
- Haga clic en Test. Si recibe el mensaje "Test System" en Telegram, haga clic en Save.
8. Configuración avanzada de monitores: HTTP, TCP, DNS, Steam
Uptime Kuma permite configurar las comprobaciones de forma muy flexible. Veamos los principales tipos de monitores que necesitará.
Monitoreo HTTP(s)
Este es el tipo principal para sitios web. Puede comprobar no solo la disponibilidad (código 200), sino también la presencia de una palabra específica en la página. Esto es útil si el sitio devuelve 200 OK pero en realidad muestra un error de base de datos.
- URL: La dirección de su sitio.
- Heartbeat Interval: 60 segundos (óptimo).
- Retries: 3 (para evitar falsas alertas por retrasos momentáneos de red).
- Upside Down Mode: Alertar si el servicio PASA A ESTAR disponible (útil para depuración).
Monitoreo de puertos (TCP)
Se utiliza para comprobar servicios que no tienen interfaz web: SSH (22), bases de datos (5432, 3306), servidores de juegos. Kuma simplemente intenta establecer una conexión TCP con el puerto especificado.
Comprobación de palabras clave
Si su sitio es hackeado y el contenido es reemplazado, un monitor HTTP estándar podría no notar el problema. Configure una comprobación de la presencia de su marca o una palabra única en el pie de página. Si la palabra desaparece, Kuma dará la alarma.
Monitoreo Push (Heartbeat)
Este es un tipo de monitoreo "inverso". Uptime Kuma le proporciona un enlace único al que su script (por ejemplo, un script de respaldo en el servidor) debe "llamar" después de completar con éxito la tarea. Si Kuma no recibe la señal en una hora, significa que el respaldo falló.
9. Respaldos, mantenimiento y actualización del sistema
El servidor de monitoreo también necesita mantenimiento. El archivo más importante es kuma.db en la carpeta data.
Creación de un respaldo
La forma más sencilla es archivar la carpeta de datos:
tar -cvzf kuma_backup_$(date +%F).tar.gz ~/uptime-kuma/data
Actualización de Uptime Kuma
Gracias a Docker, el proceso de actualización toma menos de un minuto:
cd ~/uptime-kuma
docker compose pull
docker compose up -d
docker image prune -f # Eliminación de imágenes antiguas para ahorrar espacio
Limpieza del historial
Con el tiempo, la base de datos SQLite puede crecer hasta varios gigabytes debido al historial de comprobaciones. En la configuración de Uptime Kuma (Settings -> Primary), establezca Retention Day en 30-60 días. Esto mantendrá la base de datos compacta sin perder análisis importantes.
10. Troubleshooting + FAQ: solución de problemas comunes
¿Por qué Uptime Kuma muestra "Down" aunque el sitio se abre?
Con mayor frecuencia, esto se debe al bloqueo de la dirección IP de su servidor de monitoreo por parte del sitio de destino (por ejemplo, a través de Cloudflare o un Fail2ban local). Intente ejecutar curl -I https://su-sitio.com directamente desde la consola del VPS de monitoreo. Si recibe un 403 o 429, agregue la IP del monitoreo a la lista blanca (Allowlist).
¿Qué configuración de VPS es la mínima adecuada?
Para ejecutar 10-20 monitores, es suficiente con el plan más económico de 1 GB de RAM y 1 núcleo de CPU. El consumo principal de recursos se destina a renderizar los gráficos en el navegador, no a las comprobaciones en segundo plano. Sin embargo, no escatime en el disco: SQLite es sensible a la velocidad de escritura.
¿Qué elegir: VPS o dedicado para esta tarea?
Para Uptime Kuma, un VPS es la opción preferida. La herramienta no requiere trabajar directamente con el hardware, y la flexibilidad de un servidor virtual permite escalar recursos fácilmente o migrar la instancia entre ubicaciones. Un servidor dedicado sería excesivo e injustificadamente caro para esta tarea.
¿Cómo monitorear contenedores Docker en este mismo servidor?
En nuestro docker-compose.yml montamos /var/run/docker.sock. Ahora, en la interfaz de Kuma, puede agregar un monitor de tipo "Docker Container" y simplemente seleccionar el nombre del contenedor de la lista desplegable. Kuma vigilará su estado (Running/Exited).
Olvidé la contraseña del panel de administración, ¿qué hacer?
Puede restablecer la contraseña a través de la consola:
docker exec -it uptime-kuma npm run reset-password
11. Conclusiones y próximos pasos
Hemos desplegado con éxito un sistema de monitoreo profesional en nuestro propio VPS. Ahora no depende de las limitaciones de los planes gratuitos de servicios de terceros y tiene el control total de sus datos. Su sistema está protegido con cifrado SSL, funciona en un contenedor aislado y notifica instantáneamente los problemas a través de Telegram.
¿Qué hacer a continuación?
- Página de estado pública: Cree en el menú "Status Pages" una atractiva página pública con la lista de sus servicios. Puede vincularla a un dominio separado (por ejemplo,
status.micompañia.com) y mostrarla a los clientes. - Monitoreo de SSL: Configure notificaciones 7-14 días antes de que caduquen los certificados para evitar la desactivación repentina de HTTPS.
- Exportación a Prometheus: Si su infraestructura crece, podrá integrar Kuma con Grafana para generar informes analíticos aún más complejos.
Recuerde que el monitoreo no es una configuración única, sino un proceso. Verifique regularmente la relevancia de las alertas y no olvide actualizar el sistema para proteger el servidor contra nuevas vulnerabilidades.