Skip to content

Backup Cover

OTOBO / Znuny Backup & Restore – Guía Completa

En esta guía, profundizaremos en detalle en las estrategias de backup para OTOBO, cubriendo:

  1. Volcado de base de datos con mysqldump
  2. Copia de seguridad y restauración de volúmenes de Docker
  3. Scripts propios de OTOBO: backup.pl y restore.pl
  4. Automatización con cronjobs y manejo de errores
  5. Archivo a largo plazo (por ejemplo, AWS S3)

1. Volcado de Base de Datos con mysqldump

Ventaja: Rápido, independiente de la plataforma, contiene casi todos los tickets, usuarios y configuraciones.

Ejemplo de Comando

bash
mysqldump \
  --host=${DB_HOST} \
  --user=${DB_USER} \
  --password=${DB_PASS} \
  --column-statistics=0 \
  --single-transaction \
  --databases otobo \
  > /backup/otobo_db_$(date +'%Y%m%d_%H%M').sql
  • --single-transaction: Minimiza los bloqueos de tabla, OTOBO permanece disponible.
  • Retención: Por ejemplo, cada hora, últimos 72 volcados (3 días) vía Cron.

Cron Job (cada hora, retención de 3 días)

cron
0 * * * * /usr/local/bin/otobo_db_backup.sh

otobo_db_backup.sh crea el volcado y elimina archivos de más de 3 días.

Ejemplo de Script: otobo_db_backup.sh

bash
#!/bin/bash
BACKUP_DIR="/backup/db"
mkdir -p "$BACKUP_DIR"
DATE=$(date +'%Y%m%d_%H%M')
FILE="$BACKUP_DIR/otobo_db_${DATE}.sql.gz"

echo "Creando volcado de DB en $FILE"
mysqldump --host=localhost --user=otobo \
  --password=SecretPass --column-statistics=0 \
  --single-transaction otobo | gzip > "$FILE"

# Eliminar volcados antiguos (más de 3 días)
find "$BACKUP_DIR" -type f -name '*.sql.gz' -mtime +3 -delete

2. Backup de Volúmenes de Docker

Todos los archivos almacenados de forma persistente (adjuntos, configuración, logs) se encuentran en volúmenes de Docker.

2.1 Backup Completo de Volúmenes

bash
#!/bin/bash
date=
DATE=$(date +'%d%m%Y_%H%M%S')
# Detener el contenedor para un sistema de archivos consistente
docker compose -f /opt/otobo-docker/compose.yml down

tar -czf "/tmp/docker_volumes_$DATE.tar.gz" /var/lib/docker/volumes

docker compose -f /opt/otobo-docker/compose.yml up -d --build
  • Down/Up: Garantiza una copia limpia.
  • Archivo: TAR comprimido con GZ en la carpeta temporal del host.

2.2 Restauración: Volúmenes y Contenedores

bash
#!/bin/bash
# Uso: restore_volumes.sh backup_file.tar.gz
tar -xzf "$1" -C /
# Eliminar volúmenes antiguos
docker compose -f /opt/otobo-docker/compose.yml down
rm -rf /var/lib/docker/volumes
# Restaurar y reiniciar
tar -xzf "$1" -C /
docker compose -f /opt/otobo-docker/compose.yml up -d

3. Scripts de OTOBO: backup.pl & restore.pl

OTOBO proporciona sus propios scripts CLI dentro del contenedor:

bash
# Mostrar ayuda
/opt/otobo/scripts/backup.pl -h

Opciones

OpciónPredeterminadoDescripción
-d, --backup-dirrequeridoDirectorio de destino para los backups
-c, --compressgzipMétodo de compresión (gzip | bzip2)
-r, --remove-old-backups DAYSningunoElimina backups antiguos (en días)
-t, --backup-typefullbackupfullbackup (todo) | nofullbackup | dbonly

fullbackup: Base de datos + directorio home (sin caché).
dbonly: Solo base de datos.

Ejemplo: Backup Completo en el Contenedor Docker

bash
docker run --rm \
  --volume otobo_opt_otobo:/opt/otobo \
  --volume otobo_backup:/otobo_backup \
  rotheross/otobo:latest-10_0 scripts/backup.pl \
    --backup-dir /otobo_backup --compress gzip --remove-old-backups 7

Restaurar en el Contenedor

bash
docker run --rm \
  --volume otobo_opt_otobo:/opt/otobo \
  --volume otobo_backup:/otobo_backup \
  rotheross/otobo:latest-10_0 scripts/restore.pl \
    --backup-dir /otobo_backup/20231015_123045 --backup-dir /opt/otobo

4. Automatización y Manejo de Errores

Script Envoltorio con Verificación de Errores

bash
#!/bin/bash
COMPOSE_FILE="/opt/otobo-docker/compose.yml"
# Iniciar backup
docker compose -f "$COMPOSE_FILE" run --rm backup
if [ $? -ne 0 ]; then
  echo "Fallo en el backup" >&2
  exit 1
fi
echo "Backup completado exitosamente"

Antiguo: Cron para Backup de Volúmenes

cron
0 */6 * * * /usr/local/bin/volume_backup.sh

Limpieza de Backups Antiguos

bash
#!/bin/bash
BACKUP_DIR="/ruta/a/backups"
echo "Eliminando backups de más de 30 días en $BACKUP_DIR"
find "$BACKUP_DIR" -mindepth 1 -mtime +30 -exec rm -rf {} \\
  \;
echo "Listo."

5. Archivo a Largo Plazo y Nube

  • AWS S3: Subida de archivos .tar.gz y .sql.gz mediante aws cli o script de Python.
  • rclone: Soporte para varios destinos (S3, Azure Blob, FTP).
  • Ventaja: Almacenamiento fuera del sitio, escalabilidad ilimitada.

Diferencias entre OTOBO y Znuny (Contexto de Backup)

En el área de Backup y Restauración, OTOBO y Znuny difieren en los siguientes aspectos:

  • Backups de Contenedores

    • OTOBO: La imagen oficial de Docker proporciona un servicio de backup preinstalado con hooks CLI (docker compose run backup), incluyendo montajes de volumen preparados y variables de entorno.
    • Znuny: Las configuraciones de Docker de la comunidad requieren la adición manual de un contenedor de backup o la adaptación de scripts propios.
  • Scripts CLI de OTOBO

    • OTOBO: backup.pl y restore.pl en la imagen soportan opciones de limpieza automática (--remove-old-backups), selección de compresión y flag de transacción única.
    • Znuny: Existen scripts similares, a menudo sin --remove-old-backups u opciones extendidas de volcado de DB; se requiere adaptación para añadir funcionalidad.
  • Optimizaciones de Volcado de DB

    • OTOBO: El flag predeterminado --single-transaction se recomienda y documenta para evitar bloqueos; la CLI garantiza un uso consistente.
    • Znuny: La documentación de la comunidad generalmente apunta a volcados simples sin protección de transacciones, con riesgo de bloqueos bajo alta carga.
  • Estrategia de Snapshot de Volúmenes

    • OTOBO: Los scripts de ejemplo (por ejemplo, backup completo y restauración) son la referencia oficial y se prueban en entornos multi-contenedor.
    • Znuny: Los scripts de snapshot varían considerablemente, faltan las mejores prácticas oficiales; los usuarios a menudo deben definir sus propias secuencias de detención/inicio.
  • Plugins de Automatización y Nube

    • OTOBO: Ejemplos integrados de cargadores S3 (script de Python) y módulos de configuración para Azure, Google Cloud Storage.
    • Znuny: No hay plugins principales para almacenamiento en la nube; las soluciones suelen ser externas a través de rclone o scripts de carga separados.

6. Conclusión

Con estos scripts detallados y estrategias, sus datos de OTOBO estarán seguros, automatizados y listos para ser restaurados rápidamente. Ya sea volcado de DB, volúmenes de Docker o herramientas estándar de OTOBO, usted tiene todas las opciones bajo control.