1
Backup y Restauración
groales edited this page 2025-12-05 11:04:10 +01:00

Backup y Restauración

Uptime Kuma usa SQLite embebida. Todos los datos están en un solo archivo: kuma.db.


Backup Manual

Método 1: Copia Directa

Detener contenedor primero (evitar corrupción):

# Detener
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
docker compose start uptime-kuma

Método 2: Backup en Caliente (Recomendado)

Usar comando SQLite .backup sin detener servicio:

# Backup sin detener contenedor
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db ".backup /app/data/kuma-backup.db"

# Copiar al host
docker compose cp uptime-kuma:/app/data/kuma-backup.db ./backup/kuma-$(date +%Y%m%d).db

# Limpiar backup temporal
docker compose exec uptime-kuma rm /app/data/kuma-backup.db

Backup Automático

Script Bash

Crear script /usr/local/bin/backup-uptime-kuma.sh:

#!/bin/bash

BACKUP_DIR="/backups/uptime-kuma"
RETENTION_DAYS=30
COMPOSE_FILE="/path/to/uptime-kuma/docker-compose.yml"

mkdir -p $BACKUP_DIR

# Backup en caliente
docker compose -f $COMPOSE_FILE exec -T uptime-kuma \
  sqlite3 /app/data/kuma.db ".backup /app/data/kuma-backup.db"

# Copiar al host
docker compose -f $COMPOSE_FILE cp \
  uptime-kuma:/app/data/kuma-backup.db \
  $BACKUP_DIR/kuma-$(date +%Y%m%d-%H%M%S).db

# Limpiar temporal
docker compose -f $COMPOSE_FILE exec -T uptime-kuma \
  rm /app/data/kuma-backup.db

# Limpiar backups antiguos
find $BACKUP_DIR -name "kuma-*.db" -mtime +$RETENTION_DAYS -delete

echo "✅ Backup completado: $(date)"

Permisos:

chmod +x /usr/local/bin/backup-uptime-kuma.sh

Cron (Diario a las 2 AM)

crontab -e

Añadir:

0 2 * * * /usr/local/bin/backup-uptime-kuma.sh >> /var/log/backup-uptime-kuma.log 2>&1

PowerShell (Windows con Docker Desktop)

Script C:\Scripts\Backup-UptimeKuma.ps1:

$BackupDir = "C:\Backups\UptimeKuma"
$RetentionDays = 30
$ComposeDir = "C:\Users\...\repos\uptime-kuma"

# Crear directorio si no existe
if (-not (Test-Path $BackupDir)) {
    New-Item -ItemType Directory -Path $BackupDir
}

# Backup
Set-Location $ComposeDir
docker compose exec -T uptime-kuma sqlite3 /app/data/kuma.db ".backup /app/data/kuma-backup.db"

$Timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
docker compose cp uptime-kuma:/app/data/kuma-backup.db "$BackupDir\kuma-$Timestamp.db"

docker compose exec -T uptime-kuma rm /app/data/kuma-backup.db

# Limpiar backups antiguos
Get-ChildItem $BackupDir -Filter "kuma-*.db" | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$RetentionDays) } | 
    Remove-Item

Write-Host "✅ Backup completado: $(Get-Date)"

Tarea programada (Task Scheduler):

$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\Backup-UptimeKuma.ps1"
$Trigger = New-ScheduledTaskTrigger -Daily -At 2:00AM
$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName "Backup Uptime Kuma" -Action $Action -Trigger $Trigger -Principal $Principal

Backup a Cloud

Rclone (S3, Google Drive, OneDrive, etc.)

Instalar rclone:

curl https://rclone.org/install.sh | sudo bash

Configurar remoto:

rclone config
# Seguir wizard para configurar S3/GDrive/etc

Script de backup a S3:

#!/bin/bash

BACKUP_FILE="/tmp/kuma-$(date +%Y%m%d).db"
RCLONE_REMOTE="s3:mi-bucket/uptime-kuma"

# Backup local
docker compose -f /path/to/docker-compose.yml exec -T uptime-kuma \
  sqlite3 /app/data/kuma.db ".backup $BACKUP_FILE"

# Subir a S3
rclone copy $BACKUP_FILE $RCLONE_REMOTE

# Limpiar
rm $BACKUP_FILE

echo "✅ Backup subido a S3"

Restauración

Restaurar desde Backup

# 1. Detener contenedor
docker compose stop uptime-kuma

# 2. Restaurar archivo
docker compose cp ./backup/kuma-20241205.db uptime-kuma:/app/data/kuma.db

# 3. Verificar permisos (si es necesario)
docker compose run --rm uptime-kuma chown 1000:1000 /app/data/kuma.db

# 4. Reiniciar
docker compose start uptime-kuma

# 5. Verificar logs
docker compose logs -f uptime-kuma

Restaurar en Nuevo Servidor

# 1. Clonar repositorio
git clone https://git.ictiberia.com/groales/uptime-kuma.git
cd uptime-kuma

# 2. Configurar
cp docker-compose.override.traefik.yml.example docker-compose.override.yml
cp .env.example .env
nano .env

# 3. Iniciar primera vez (crear volumen)
docker compose up -d

# 4. Detener
docker compose stop

# 5. Restaurar backup
docker compose cp /path/to/kuma-backup.db uptime-kuma:/app/data/kuma.db

# 6. Reiniciar
docker compose start uptime-kuma

Verificar Integridad

Verificar base de datos SQLite

# Verificar integridad
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db "PRAGMA integrity_check;"

# Debe mostrar: ok

Reparar base de datos corrupta

Si hay corrupción:

# Intentar reparar
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db ".recover"

# 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

Migración a Nuevo Servidor

Exportar Datos

En servidor antiguo:

# Backup
docker compose exec uptime-kuma sqlite3 /app/data/kuma.db ".backup /tmp/kuma-migration.db"
docker compose cp uptime-kuma:/tmp/kuma-migration.db ./kuma-migration.db

# Transferir a nuevo servidor (ejemplo: SCP)
scp kuma-migration.db user@new-server:/tmp/

Importar Datos

En servidor nuevo:

# Desplegar Uptime Kuma
git clone https://git.ictiberia.com/groales/uptime-kuma.git
cd uptime-kuma
cp docker-compose.override.traefik.yml.example docker-compose.override.yml
cp .env.example .env
nano .env  # Configurar DOMAIN_HOST

# Iniciar primera vez
docker compose up -d

# Detener y restaurar
docker compose stop
docker compose cp /tmp/kuma-migration.db uptime-kuma:/app/data/kuma.db
docker compose start uptime-kuma

¿Qué se Respalda?

El archivo kuma.db contiene todo:

  • Usuarios y contraseñas
  • Configuración 2FA
  • Monitores y configuración
  • Notificaciones
  • Status Pages
  • Historial de uptime (según retención configurada)
  • Incidentes
  • Tags y grupos

NO incluye:

  • Configuración de Traefik/NPM (están en docker-compose.yml y .env)
  • Logs de Docker (usar docker compose logs > logs.txt si necesario)

Siguiente Paso

Continúa con Actualización para mantener Uptime Kuma al día.