Copia de Seguridad de Duplicati al Almacenamiento en la Nube

Duplicati es un software de copia de seguridad gratuito y de código abierto que permite copias de seguridad seguras, comprimidas y encriptadas a varios proveedores de almacenamiento en la nube y destinos locales. Con soporte para copias de seguridad incrementales, deduplicación y encriptación transparente, Duplicati proporciona capacidades de copia de seguridad de nivel empresarial sin costos de licencia. Esta guía cubre la instalación, configuración de trabajos de copia de seguridad dirigidos a servicios de almacenamiento en la nube e implementación de procedimientos de recuperación.

Tabla de Contenidos

  1. Características y Arquitectura de Duplicati
  2. Instalación y Configuración
  3. Configuración de Almacenamiento en la Nube
  4. Creación de Trabajo de Copia de Seguridad
  5. Encriptación y Seguridad
  6. Programación y Retención
  7. Operaciones de Restauración
  8. Monitoreo y Mantenimiento
  9. Conclusión

Características y Arquitectura de Duplicati

Duplicati se destaca por varias capacidades clave:

  • Soporte Múltiple de Backend: Amazon S3, Azure, Google Drive, Backblaze B2, SFTP, WebDAV
  • Encriptación: Encriptación AES-256 por defecto con algoritmos configurables
  • Deduplicación: Detección automática de bloques de datos duplicados entre copias de seguridad
  • Copias de Seguridad Incrementales: Solo se transfieren datos cambiados después de la copia de seguridad inicial
  • Compresión: Compresión integrada reduce requisitos de almacenamiento
  • Verificación: Verificación automática de copia de seguridad garantiza integridad

Instalación y Configuración

Requisitos del Sistema

# Verificar especificaciones del sistema
uname -m
free -h
df -h /

# Duplicati requiere:
# - .NET Runtime 6.0 o posterior (o Mono en sistemas antiguos)
# - Mínimo 500 MB de espacio en disco
# - Conectividad de red para cargas en la nube

Instalar Duplicati en Ubuntu/Debian

# Agregar repositorio de Duplicati
sudo add-apt-repository ppa:duplicati/duplicati-team
sudo apt-get update

# Instalar Duplicati
sudo apt-get install -y duplicati

# Iniciar servicio Duplicati
sudo systemctl enable duplicati
sudo systemctl start duplicati

# Verificar instalación
duplicati-cli --version

# Verificar estado del servicio
sudo systemctl status duplicati

Instalar Duplicati en CentOS/RHEL

# Instalar desde repositorio oficial o descarga directa
sudo yum install -y https://updates.duplicati.com/duplicati-2.0.6.3-1.rhel.x86_64.rpm

# O compilar desde el origen
git clone https://github.com/duplicati/duplicati.git
cd duplicati
./build.sh release

# Habilitar e iniciar servicio
sudo systemctl enable duplicati
sudo systemctl start duplicati

Acceder a Interfaz Web

# Duplicati proporciona interfaz web en:
# http://localhost:8200/

# Si se ejecuta en servidor remoto, usar túnel SSH:
ssh -L 8200:localhost:8200 user@backup-server

# Inicio de sesión predeterminado: Sin autenticación requerida (configurar en ajustes)

# Establecer autenticación
# Visitar Ajustes > Seguridad > Configurar autenticación

Configuración de Almacenamiento en la Nube

Configuración de Amazon S3

# Generar Claves de Acceso de AWS
# Visitar Consola de AWS > IAM > Usuarios > Su Usuario > Credenciales de Seguridad

# Crear bucket de S3 para copias de seguridad
aws s3 mb s3://my-backup-bucket

# En interfaz web de Duplicati:
# 1. Crear Nueva Copia de Seguridad
# 2. Seleccionar Backend: Amazon S3
# 3. Configurar:
#    - ID de Clave de Acceso de AWS: [su-clave-de-acceso]
#    - Clave de Acceso Secreto de AWS: [su-clave-secreta]
#    - Bucket de S3: my-backup-bucket
#    - Región de Almacenamiento: us-east-1

# O a través de CLI:
duplicati-cli backup "s3://aws_access_key_id:aws_secret_access_key@my-backup-bucket/" /path/to/backup

Configuración de Azure Blob Storage

# Crear Cuenta de Almacenamiento de Azure
# A través de Portal de Azure o CLI:
az storage account create --name mybackupaccount --resource-group mygroup

# Obtener cadena de conexión
CONN_STR=$(az storage account show-connection-string -n mybackupaccount -g mygroup -o tsv)

# Crear contenedor
az storage container create --name backup-container --connection-string "$CONN_STR"

# En interfaz web de Duplicati:
# 1. Backend: Azure
# 2. Configurar:
#    - Cuenta de Blob Storage: mybackupaccount
#    - Clave de Blob Storage: [clave-de-cuenta-de-almacenamiento]
#    - Contenedor de Blob: backup-container

Configuración de Google Drive

# Configuración de Google Drive en Duplicati:
# 1. Backend: Google Drive
# 2. OAuth pedirá autenticación
# 3. Otorgar acceso de Duplicati a Google Drive
# 4. Seleccionar o crear carpeta para copias de seguridad

# Alternativa: Token OAuth manual
# 1. Ir a Consola de Google Cloud
# 2. Crear credenciales OAuth 2.0
# 3. Configurar en ajustes de Duplicati

Configuración de Backblaze B2

# Crear cuenta de Backblaze B2 y bucket
# Visitar https://www.backblaze.com/b2/cloud-storage.html

# Generar clave de aplicación
# Ajustes de Cuenta > Claves de Aplicación > Crear Clave de Aplicación

# En interfaz web de Duplicati:
# 1. Backend: B2 Cloud Storage
# 2. Configurar:
#    - ID de Cuenta de B2: [id-de-cuenta]
#    - Clave de Aplicación de B2: [clave-de-aplicación]
#    - Nombre de Bucket de B2: my-backup-bucket

Configuración de SFTP

# Para servidores de copia de seguridad locales:
# 1. Backend: SSH/SFTP
# 2. Configurar:
#    - Servidor: backup.example.com
#    - Usuario: sftp-user
#    - Contraseña: [contraseña]
#    - Ruta Remota: /backups/duplicati
#    - Puerto: 22 (o personalizado)

# O usando autenticación de clave:
# 1. Generar par de claves SSH en cliente de copia de seguridad
ssh-keygen -t ed25519 -f ~/.ssh/duplicati_key

# 2. Copiar clave pública a servidor SFTP
ssh-copy-id -i ~/.ssh/duplicati_key.pub [email protected]

# 3. Configurar SFTP con clave
# Cargar clave privada en ajustes de Duplicati

Creación de Trabajo de Copia de Seguridad

Configurar Primer Trabajo de Copia de Seguridad

# A través de interfaz web:
# 1. Visitar http://localhost:8200/
# 2. Hacer clic en "New" > "Backup"
# 3. Nombre: "Full Server Backup"
# 4. Backend: Seleccionar su almacenamiento configurado
# 5. Encriptación: Habilitar con frase de paso fuerte
# 6. Agregar directorios de origen:
#    - /home
#    - /etc
#    - /var/www
#    - /opt/applications
# 7. Excluir patrones:
#    - **/.cache
#    - **/node_modules
#    - **/__pycache__
#    - /proc
#    - /sys
#    - /dev

Creación de Copia de Seguridad desde CLI

# Crear trabajo de copia de seguridad a través de línea de comandos
duplicati-cli backup \
  "s3://access-key:secret-key@bucket-name/path/" \
  /home /etc /var/www \
  --encryption-module aes \
  --encryption-key-size 256 \
  --compression-module zip \
  --backup-name "Full Server Backup"

# Listar todas las configuraciones de copia de seguridad
duplicati-cli list-backups

# Obtener detalles del trabajo de copia de seguridad
duplicati-cli status \
  "s3://access-key:secret-key@bucket-name/path/" \
  /home

Opciones Avanzadas

# Habilitar registro detallado
duplicati-cli backup \
  "s3://credentials@bucket/" \
  /data \
  --log-file /var/log/duplicati-backup.log \
  --log-level Debug

# Establecer tamaño de bloque para deduplicación
duplicati-cli backup \
  "s3://credentials@bucket/" \
  /data \
  --blocksize 524288          # Bloques de 512KB

# Configurar límites de ancho de banda
duplicati-cli backup \
  "s3://credentials@bucket/" \
  /data \
  --upload-speed-limit 10MB   # Limitar cargas a 10MB/s

# Habilitar versionado de archivos (mantener múltiples versiones)
duplicati-cli backup \
  "s3://credentials@bucket/" \
  /data \
  --keep-time 7d              # Mantener copias de seguridad diarias durante 7 días

Encriptación y Seguridad

Configuración de Encriptación

# Durante creación de copia de seguridad, configurar encriptación:
# 1. Encriptación: AES-256 (predeterminado)
# 2. Frase de Paso: Generar contraseña fuerte
#    Ejemplo: $(openssl rand -base64 32)
# 3. Salt: Opcional, generado por el sistema

# Nunca pierda la frase de paso de encriptación - no puede recuperar copias de seguridad sin ella
# Almacenar frase de paso de forma segura:
echo "my-encryption-passphrase" > /root/.duplicati-passphrase
chmod 600 /root/.duplicati-passphrase

# Exportar configuración de copia de seguridad
# Ajustes > Copia de Seguridad > Avanzado > Exportar como línea de comandos
# Guarda toda la configuración incluyendo detalles de encriptación

Configuración de SSL/TLS

# Configurar HTTPS para interfaz web de Duplicati
# Ajustes > Seguridad > Configurar HTTPS

# O a través de variables de entorno:
export DUPLICATI_USEHTTPS=true
export DUPLICATI_CERTIFICATEPATH=/etc/duplicati/cert.pem

# Generar certificado autofirmado
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/duplicati/key.pem \
  -out /etc/duplicati/cert.pem

# Reiniciar Duplicati
sudo systemctl restart duplicati

Configuración de Autenticación

# Configurar autenticación de interfaz web
# Ajustes > Seguridad > Usuario y Contraseña

# O a través del entorno:
export DUPLICATI_AUTHENTICATIONREQUIRED=true
export DUPLICATI_AUTHENTICATIONUSERNAME=admin
export DUPLICATI_AUTHENTICATIONPASSWORD=strong_password

# Reiniciar servicio
sudo systemctl restart duplicati

Programación y Retención

Programación Automatizada de Copia de Seguridad

# Configurar programa de copia de seguridad en interfaz web:
# 1. Seleccionar trabajo de copia de seguridad
# 2. Ajustes > Programa
# 3. Frecuencia: Diaria, Semanal, Mensual, o Personalizada
# 4. Hora: 02:00 (horas fuera de pico)
# 5. Días: Seleccionar días específicos si es necesario

# Ejemplo de programa similar a cron:
# "Ejecutar días de entre semana a las 2:00 AM"

Políticas de Retención

# Configurar limpieza automática:
# 1. Ajustes > Opciones de Limpieza
# 2. Eliminar copias de seguridad:
#    - Más antiguas que: 30 días
#    - Mantener al menos: 5 copias de seguridad recientes
#    - Mantener versiones: Habilitar

# A través de CLI:
duplicati-cli list-broken-backups \
  "s3://credentials@bucket/" \
  --all-backups

duplicati-cli delete-broken-backups \
  "s3://credentials@bucket/" \
  --all-backups

Verificación de Copia de Seguridad

# Verificar integridad de copia de seguridad
duplicati-cli test \
  "s3://credentials@bucket/path/" \
  -dbpath /var/lib/duplicati/test.db \
  --backup-name "Full Server Backup"

# Ejecutar verificación completa (más lenta pero exhaustiva)
duplicati-cli repair \
  "s3://credentials@bucket/path/" \
  --dbpath /var/lib/duplicati/test.db \
  --log-file /var/log/duplicati-verify.log

# Programar verificación
# En crontab: 0 3 * * 0 duplicati-cli test s3://...

Operaciones de Restauración

Restauración a Nivel de Archivo

# Listar contenido de copia de seguridad
duplicati-cli list \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup"

# Listar contenido de ruta específica
duplicati-cli list \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup" \
  --include /home/user/

# Restaurar archivo individual
duplicati-cli restore \
  "s3://credentials@bucket/" \
  --restore-path /home/user/important-file.txt \
  --destination /restore/location/

# Restaurar directorio
duplicati-cli restore \
  "s3://credentials@bucket/" \
  --restore-path /home/user/Documents \
  --destination /restore/location/

Procedimiento de Restauración Completa

# Extraer a ubicación temporal (cuidado con permisos)
duplicati-cli restore \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup" \
  --destination /tmp/restore/

# Verificar archivos restaurados
ls -la /tmp/restore/

# Restaurar a ubicaciones originales (si el servidor está limpio)
rsync -av /tmp/restore/home/ /home/
rsync -av /tmp/restore/etc/ /etc/ --backup-dir /etc.backup/

# Verificar restauración
diff /home/user/file.txt /tmp/restore/home/user/file.txt

Restauración Parcial con Control de Versiones

# Listar todas las versiones de copia de seguridad
duplicati-cli list-versions \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup"

# Restaurar versión específica
duplicati-cli restore \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup" \
  --version 5 \
  --restore-path /path/to/file \
  --destination /restore/location/

Monitoreo y Mantenimiento

Monitoreo de Copia de Seguridad

# Obtener estadísticas de copia de seguridad
duplicati-cli status \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup"

# Ver historial de copia de seguridad
duplicati-cli list-history \
  "s3://credentials@bucket/" \
  --backup-name "Full Server Backup"

# Verificar tamaño de copia de seguridad y duración
duplicati-cli list \
  "s3://credentials@bucket/" | wc -l

Monitoreo de Registro

# Ver registros del servicio Duplicati
sudo journalctl -u duplicati -f

# Verificar registros de aplicación
tail -f /var/log/duplicati/*.log

# Monitorear registros específicos del trabajo de copia de seguridad
grep "Full Server Backup" /var/log/duplicati/*.log

Mantenimiento de Base de Datos

# Verificar integridad de base de datos de Duplicati
duplicati-cli test-database \
  --dbpath /var/lib/duplicati/

# Reparar base de datos corrupta
duplicati-cli repair-database \
  --dbpath /var/lib/duplicati/duplicati.db

# Vacuum de base de datos (optimizar)
sqlite3 /var/lib/duplicati/duplicati.db "VACUUM;"

Conclusión

Duplicati transforma la copia de seguridad en la nube de una tarea de infraestructura compleja a un proceso accesible y automatizado. Al aprovechar encriptación, deduplicación y programación flexible, las organizaciones logran protección integral de datos sin inversión de capital significativa. La configuración adecuada de backends en la nube, claves de encriptación y políticas de retención garantiza que sus datos permanezcan recuperables mientras se administran costos de almacenamiento de forma efectiva. Ya sea protegiendo sistemas individuales o infraestructura empresarial, la arquitectura de código abierto de Duplicati y su conjunto de características poderosas ofrecen capacidades confiables de recuperación ante desastres adecuadas para diversos escenarios de despliegue.