14 KiB
Uptime Kuma - Monitorización de Servicios
Uptime Kuma es una herramienta de monitorización self-hosted moderna y elegante. Permite monitorizar servicios HTTP(s), TCP, Ping, DNS, Docker containers, y mucho más con notificaciones multi-canal.
Características
- ✅ Monitorización multi-protocolo: HTTP(s), TCP, HTTP(s) Keyword, HTTP(s) Json Query, Ping, DNS, Docker, Steam Game Server
- ✅ Notificaciones: 90+ servicios (Telegram, Discord, Slack, Email, Gotify, Webhooks, etc.)
- ✅ Status Pages: Páginas de estado públicas personalizables
- ✅ Mapeo de servicios: Vista gráfica de dependencias
- ✅ Certificados SSL: Monitorización de expiración
- ✅ Multi-idioma: Interfaz en múltiples idiomas incluyendo español
- ✅ 2FA: Autenticación de dos factores
- ✅ Sin base de datos externa: Usa SQLite embebida
Requisitos Previos
- Docker y Docker Compose instalados
- Proxy inverso configurado:
- Traefik con red
proxyexterna, o - Nginx Proxy Manager
- Traefik con red
- Dominio con DNS apuntando al servidor
⚠️ IMPORTANTE: Este repositorio NO incluye modo standalone. Requiere proxy inverso (Traefik o NPM) para funcionar.
Despliegue con Portainer
Opción A: Git Repository (recomendado)
-
En Portainer, ir a Stacks → Add stack
-
Seleccionar Repository
-
Configurar:
- Repository URL:
https://git.ictiberia.com/groales/uptime-kuma - Repository reference:
refs/heads/main - Compose path:
docker-compose.yml
- Repository URL:
-
En Environment variables, añadir:
Para Traefik:
DOMAIN_HOST=uptime.example.comPara NPM: No requiere variables
-
En Advanced mode, añadir (solo Traefik):
additional_files: - docker-compose.override.traefik.yml.example -
Click en Deploy the stack
Opción B: Web Editor
- En Portainer, ir a Stacks → Add stack
- Nombre:
uptime-kuma - Selecciona Web editor
- Pega el contenido de
docker-compose.yml - En Environment variables, añade las mismas variables que la Opción A
- Click en Deploy the stack
Despliegue con Docker CLI
Si prefieres trabajar desde la línea de comandos:
1. Clonar el repositorio
git clone https://git.ictiberia.com/groales/uptime-kuma.git
cd uptime-kuma
2. Elegir modo de despliegue
Opción A: Traefik (recomendado para producción)
cp docker-compose.override.traefik.yml.example docker-compose.override.yml
cp .env.example .env
nano .env # Editar: configurar DOMAIN_HOST
Opción B: Nginx Proxy Manager
# No requiere .env ni override
3. Iniciar el servicio
docker compose up -d
La inicialización tarda 10-20 segundos (creación de base de datos SQLite).
4. Verificar el despliegue
# Ver logs en tiempo real
docker compose logs -f uptime-kuma
# Verificar contenedores activos
docker compose ps
# Ver base de datos creada
docker compose exec uptime-kuma ls -lh /app/data/
Acceso:
- Traefik:
https://<DOMAIN_HOST>(ejemplo:https://uptime.example.com) - NPM: Configurar en NPM apuntando a
uptime-kumapuerto3001
Primera configuración: Al acceder por primera vez, Uptime Kuma te pedirá crear una cuenta de administrador.
Modos de Despliegue
Traefik (Proxy Inverso con SSL automático)
Requisitos:
- Stack de Traefik desplegado
- Red
proxycreada - DNS apuntando al servidor
Configuración:
-
Copiar archivo override:
cp docker-compose.override.traefik.yml.example docker-compose.override.yml -
Configurar
.env:cp .env.example .env nano .env -
Editar
DOMAIN_HOST:DOMAIN_HOST=uptime.example.com -
Desplegar:
docker compose up -d
Acceso: https://uptime.example.com
Nginx Proxy Manager (NPM)
Requisitos:
- NPM desplegado
- Ambos servicios en red
proxy
Configuración en NPM:
-
Ir a Hosts → Proxy Hosts → Add Proxy Host
-
Details:
- Domain Names:
uptime.example.com - Scheme:
http - Forward Hostname/IP:
uptime-kuma - Forward Port:
3001 - ✅ Block Common Exploits
- ✅ Websockets Support (⚠️ IMPORTANTE: Uptime Kuma requiere WebSockets)
- Domain Names:
-
SSL:
- ✅ SSL Certificate: Request a new SSL Certificate
- ✅ Force SSL
- ✅ HTTP/2 Support
- ✅ HSTS Enabled
-
Save
Acceso: https://uptime.example.com
Comparación: Traefik vs NPM
| Característica | Traefik | Nginx Proxy Manager |
|---|---|---|
| Configuración | Archivo .env |
Interfaz web |
| SSL | Automático (Let's Encrypt) | Manual (1 click) |
| WebSockets | Automático | Requiere activar checkbox |
| Renovación SSL | Automática | Automática |
| Complejidad | Media | Baja |
Configuración Inicial
1. Crear cuenta administrador
Al acceder por primera vez:
- Ingresa username (será el usuario de login)
- Ingresa password (mínimo 6 caracteres)
- Click en Create
⚠️ IMPORTANTE: No hay usuario por defecto. El primer usuario que crees será administrador.
2. Configurar idioma
- Click en el icono de perfil (esquina superior derecha)
- Settings → Appearance
- Language: Selecciona Español o tu idioma preferido
3. Configurar notificaciones (recomendado)
-
Settings → Notifications
-
Click en Setup Notification
-
Elige el tipo de notificación:
Telegram:
- Obtener bot token de @BotFather
- Obtener Chat ID de @userinfobot
- Pegar ambos en Uptime Kuma
Discord:
- Crear Webhook en canal de Discord
- Pegar URL del webhook
Email (SMTP):
- Hostname:
smtp.gmail.com(ejemplo) - Port:
587 - Username: tu email
- Password: app password
- From Email: tu email
- To Email: destinatario
-
Click en Test para verificar
-
Save
4. Habilitar autenticación 2FA (recomendado)
- Settings → Security
- Two Factor Authentication
- Escanear QR con app (Google Authenticator, Authy)
- Ingresar código de 6 dígitos
- Enable
Añadir Monitorización
Monitor HTTP(s)
- Click en Add New Monitor
- Monitor Type: HTTP(s)
- Configurar:
- Friendly Name: Nombre descriptivo (ej: "Web Producción")
- URL:
https://example.com - Heartbeat Interval:
60segundos (frecuencia de check) - Retries:
3(reintentos antes de marcar como down) - Heartbeat Retry Interval:
60segundos - Advanced:
- Method:
GET(oPOST,HEAD) - Expected Status Code:
200-299(códigos de éxito) - Keyword: Buscar palabra clave en respuesta (opcional)
- Method:
- Notifications: Seleccionar notificaciones configuradas
- Save
Monitor TCP
Para monitorizar puertos (SSH, bases de datos, etc.):
- Monitor Type: TCP Port
- Configurar:
- Friendly Name: "SSH Server"
- Hostname:
192.168.1.100 - Port:
22 - Heartbeat Interval:
60segundos
- Save
Monitor Ping
Para monitorizar disponibilidad de red:
- Monitor Type: Ping
- Configurar:
- Friendly Name: "Router Principal"
- Hostname:
192.168.1.1 - Heartbeat Interval:
60segundos
- Save
Monitor Docker Container
Para monitorizar contenedores Docker:
- Monitor Type: Docker Container
- Configurar:
- Friendly Name: "NetBox Container"
- Docker Daemon:
unix:///var/run/docker.sock(requiere montar socket) - Container Name:
netbox
- Save
⚠️ Nota: Requiere añadir volumen en docker-compose.yml:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
Monitor DNS
Para verificar resolución DNS:
- Monitor Type: DNS
- Configurar:
- Friendly Name: "DNS Cloudflare"
- Hostname:
example.com - Resolver Server:
1.1.1.1 - Resource Record Type:
A
- Save
Status Pages (Páginas de Estado)
Crear página pública
- Click en Status Pages (menú lateral)
- Click en Add New Status Page
- Configurar:
- Title: Nombre de la página (ej: "Estado de Servicios")
- Slug: URL amigable (ej:
servicios) - Description: Descripción opcional
- Theme: Light/Dark
- Custom CSS: Personalización avanzada (opcional)
- Add Group: Agrupar monitores (ej: "Aplicaciones", "Infraestructura")
- Arrastrar monitores a los grupos
- Save
Acceso público: https://uptime.example.com/status/servicios
Tipos de visualización
- Default: Lista vertical con estado actual
- List: Lista compacta
- Badge: Badges estilo shields.io
- Grid: Cuadrícula
Backup y Restauración
Backup Manual
Uptime Kuma usa SQLite embebida en /app/data/kuma.db.
Método 1: Copia de volumen
# Detener contenedor
docker compose stop uptime-kuma
# Copiar base de datos
docker compose cp uptime-kuma:/app/data/kuma.db ./backup/kuma-$(date +%Y%m%d).db
# Reiniciar contenedor
docker compose start uptime-kuma
Método 2: Backup en caliente (requiere Litestream - avanzado)
Instalar Litestream para backups continuos a S3/MinIO.
Backup Automático con Script
#!/bin/bash
# backup-uptime-kuma.sh
BACKUP_DIR="/backups/uptime-kuma"
RETENTION_DAYS=30
mkdir -p $BACKUP_DIR
# Backup
docker compose -f /path/to/uptime-kuma/docker-compose.yml \
exec -T uptime-kuma \
sqlite3 /app/data/kuma.db ".backup /app/data/kuma-backup.db"
docker compose -f /path/to/uptime-kuma/docker-compose.yml \
cp uptime-kuma:/app/data/kuma-backup.db \
$BACKUP_DIR/kuma-$(date +%Y%m%d-%H%M%S).db
# Limpiar backups antiguos
find $BACKUP_DIR -name "kuma-*.db" -mtime +$RETENTION_DAYS -delete
echo "Backup completado: $(date)"
Cron: Ejecutar diariamente a las 2 AM
0 2 * * * /usr/local/bin/backup-uptime-kuma.sh >> /var/log/backup-uptime-kuma.log 2>&1
Restauración
# Detener contenedor
docker compose stop uptime-kuma
# Restaurar base de datos
docker compose cp ./backup/kuma-20241205.db uptime-kuma:/app/data/kuma.db
# Reiniciar contenedor
docker compose start uptime-kuma
Actualización
Actualizar a última versión
Uptime Kuma usa versionado semántico. Tag 1 siempre apunta a la última versión 1.x.
# Backup previo
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db ".backup /app/data/kuma-pre-update.db"
# Actualizar imagen
docker compose pull uptime-kuma
# Recrear contenedor
docker compose up -d uptime-kuma
# Verificar logs
docker compose logs -f uptime-kuma
Actualización automática con Watchtower
Añadir en docker-compose.yml:
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower-uptime-kuma
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=false
- WATCHTOWER_MONITOR_ONLY=false
- WATCHTOWER_SCHEDULE=0 0 4 * * * # 4 AM diario
command: uptime-kuma
Solución de Problemas
El contenedor no inicia
Verificar logs:
docker compose logs uptime-kuma
Problemas comunes:
- Base de datos corrupta → Restaurar desde backup
- Permisos en volumen →
chown -R 1000:1000 /var/lib/docker/volumes/uptime-kuma_data
No se puede acceder a la interfaz
Traefik:
# Verificar labels
docker inspect uptime-kuma | grep -A 10 Labels
# Verificar red proxy
docker network inspect proxy
NPM:
- Verificar WebSockets habilitado
- Verificar Forward Port:
3001
Notificaciones no funcionan
Telegram:
- Verificar bot token válido
- Verificar chat ID correcto (debe comenzar con
-) - Bot debe estar añadido al grupo/canal
Email:
- Verificar SMTP port:
587(TLS) o465(SSL) - Gmail requiere "App Password" (no contraseña de cuenta)
- Verificar firewall no bloquea puertos SMTP
Monitores reportan "down" incorrectamente
Ajustar configuración:
- Aumentar Heartbeat Interval (ej: de 60 a 120 segundos)
- Aumentar Retries (ej: de 3 a 5 intentos)
- Aumentar Heartbeat Retry Interval
- Verificar Expected Status Code (algunos sitios usan 301/302)
Verificar desde contenedor:
# Probar conectividad desde el contenedor
docker compose exec uptime-kuma wget -O- https://example.com
# Probar DNS
docker compose exec uptime-kuma nslookup example.com
Base de datos corrupta
Síntomas: Error al iniciar, monitores desaparecen
Solución:
# Intentar reparar
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db "PRAGMA integrity_check;"
# Si falla, restaurar desde backup
docker compose stop uptime-kuma
docker compose cp ./backup/kuma-latest.db uptime-kuma:/app/data/kuma.db
docker compose start uptime-kuma
Status Page no carga
- Verificar slug correcto en URL
- Verificar página configurada como "Public"
- Limpiar cache del navegador (Ctrl+F5)
Variables de Entorno
Uptime Kuma tiene configuración mínima por variables de entorno (la mayoría se configura desde UI).
| Variable | Descripción | Ejemplo | Requerida |
|---|---|---|---|
DOMAIN_HOST |
Dominio para Traefik | uptime.example.com |
Sí (Traefik) |
Configuración avanzada (opcional):
environment:
- UPTIME_KUMA_PORT=3001 # Cambiar puerto (por defecto 3001)
- UPTIME_KUMA_HOST=0.0.0.0 # Bind address
Recursos
Licencia
Este repositorio de configuración: MIT
Uptime Kuma: MIT License