Page:
Backup y Restauración
Clone
This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Backup y Restauración
Protege tus datos de NetBox con backups automáticos.
Qué Hacer Backup
NetBox tiene 2 componentes críticos:
- PostgreSQL - Base de datos (lo más importante)
- Configuración -
/config/(configuration.py, plugins, scripts)
ℹ️ Redis no requiere backup: Usa tmpfs (RAM) y solo almacena caché temporal que se regenera automáticamente.
Backup Manual
PostgreSQL (Crítico)
# Backup completo
docker exec netbox-db pg_dump -U netbox netbox > netbox-backup-$(date +%Y%m%d).sql
# Backup comprimido (ahorra espacio)
docker exec netbox-db pg_dump -U netbox netbox | gzip > netbox-backup-$(date +%Y%m%d).sql.gz
# Verificar backup
gunzip -c netbox-backup-20250101.sql.gz | head -20
Configuración
# Backup del volumen de configuración
docker run --rm -v netbox_config:/backup -v $(pwd):/target alpine tar czf /target/netbox-config-$(date +%Y%m%d).tar.gz -C /backup .
# Verificar
tar tzf netbox-config-20250101.tar.gz | head
Backup Automático
Script de Backup
Crea /root/backup-netbox.sh:
#!/bin/bash
# Configuración
BACKUP_DIR="/backups/netbox"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
# Crear directorio
mkdir -p $BACKUP_DIR
# PostgreSQL (comprimido)
echo "Backing up PostgreSQL..."
docker exec netbox-db pg_dump -U netbox netbox | gzip > $BACKUP_DIR/netbox-db-$DATE.sql.gz
# Configuración
echo "Backing up configuration..."
docker run --rm -v netbox_config:/backup -v $BACKUP_DIR:/target alpine tar czf /target/netbox-config-$DATE.tar.gz -C /backup .
# Limpiar backups antiguos
echo "Cleaning old backups (older than $RETENTION_DAYS days)..."
find $BACKUP_DIR -name "netbox-db-*.sql.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "netbox-config-*.tar.gz" -mtime +$RETENTION_DAYS -delete
# Verificar espacio
BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
echo "Backup completed: $DATE"
echo "Backup size: $BACKUP_SIZE"
# Opcional: copiar a otro servidor
# rsync -avz $BACKUP_DIR/ backup@remote:/backups/netbox/
Hazlo ejecutable:
chmod +x /root/backup-netbox.sh
Automatizar con Cron
# Editar crontab
crontab -e
# Añadir backup diario a las 2 AM
0 2 * * * /root/backup-netbox.sh >> /var/log/netbox-backup.log 2>&1
# Backup cada 6 horas
0 */6 * * * /root/backup-netbox.sh >> /var/log/netbox-backup.log 2>&1
Verificar Cron
# Ver tareas programadas
crontab -l
# Ver logs de backup
tail -f /var/log/netbox-backup.log
Restauración
Restaurar PostgreSQL
# Detener NetBox
docker stop netbox
# Restaurar desde backup comprimido
gunzip < netbox-backup-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# O desde backup sin comprimir
cat netbox-backup-20250101.sql | docker exec -i netbox-db psql -U netbox netbox
# Reiniciar NetBox
docker start netbox
# Verificar logs
docker logs -f netbox
Restaurar Configuración
# Detener NetBox
docker stop netbox
# Limpiar volumen actual (opcional - crear backup primero)
# docker run --rm -v netbox_config:/config alpine rm -rf /config/*
# Restaurar desde backup
docker run --rm -v netbox_config:/restore -v $(pwd):/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# Verificar permisos
docker run --rm -v netbox_config:/config alpine chown -R 1000:1000 /config
# Reiniciar NetBox
docker start netbox
Restauración Completa
# 1. Detener stack
docker stop netbox netbox-redis netbox-db
# 2. Eliminar volúmenes (CUIDADO - perderás datos actuales)
# docker volume rm netbox_db netbox_config
# 3. Recrear volúmenes
docker volume create netbox_db
docker volume create netbox_config
# 4. Restaurar PostgreSQL
docker start netbox-db
sleep 10
gunzip < netbox-backup-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# 5. Restaurar configuración
docker run --rm -v netbox_config:/restore -v $(pwd):/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# 6. Iniciar todo
docker start netbox-redis netbox
# 7. Verificar
docker logs -f netbox
Migración a Otro Servidor
Exportar
En el servidor origen:
# Backup completo
/root/backup-netbox.sh
# Copiar a servidor destino
scp /backups/netbox/netbox-db-*.sql.gz user@destino:/tmp/
scp /backups/netbox/netbox-config-*.tar.gz user@destino:/tmp/
Importar
En el servidor destino:
# Desplegar NetBox (sin iniciar)
docker compose up -d
# Detener NetBox
docker stop netbox
# Restaurar datos
gunzip < /tmp/netbox-db-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
docker run --rm -v netbox_config:/restore -v /tmp:/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# Iniciar
docker start netbox
Backup Remoto
Rsync a Servidor Remoto
Añade al script de backup:
# Al final de backup-netbox.sh
rsync -avz --delete $BACKUP_DIR/ backup@remote.server:/backups/netbox/
Backup a S3
# Instalar AWS CLI
apt install awscli
# Configurar credenciales
aws configure
# Añadir al script de backup
aws s3 sync $BACKUP_DIR/ s3://mi-bucket/netbox-backups/ --delete
Verificación de Backups
Script de Verificación
#!/bin/bash
LATEST_BACKUP=$(ls -t /backups/netbox/netbox-db-*.sql.gz | head -1)
echo "Verificando backup: $LATEST_BACKUP"
# Verificar integridad
gunzip -t $LATEST_BACKUP
if [ $? -eq 0 ]; then
echo "✓ Backup íntegro"
else
echo "✗ Backup corrupto"
exit 1
fi
# Verificar tamaño mínimo (ej: 1MB)
SIZE=$(stat -f%z "$LATEST_BACKUP")
if [ $SIZE -gt 1048576 ]; then
echo "✓ Tamaño válido: $(numfmt --to=iec $SIZE)"
else
echo "✗ Backup muy pequeño"
exit 1
fi
Próximos Pasos
- Actualización - Mantén NetBox actualizado
- Solución de Problemas - Si algo falla