Page:
Backup y Restauración
Clone
Backup y Restauración
Protege tus datos de BookStack con backups automáticos.
Qué Hacer Backup
BookStack tiene 2 componentes críticos:
- MariaDB - Base de datos (lo más importante)
- Configuración -
/config/(uploads, imágenes, configuración)
Backup Manual
MariaDB (Crítico)
# Backup completo
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack > bookstack-backup-$(date +%Y%m%d).sql
# Backup comprimido (ahorra espacio)
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack | gzip > bookstack-backup-$(date +%Y%m%d).sql.gz
# Verificar backup
gunzip -c bookstack-backup-20250101.sql.gz | head -20
Configuración y Uploads
# Backup del volumen de configuración
docker run --rm -v bookstack_config:/backup -v $(pwd):/target alpine tar czf /target/bookstack-config-$(date +%Y%m%d).tar.gz -C /backup .
# Verificar
tar tzf bookstack-config-20250101.tar.gz | head
Backup Automático
Script de Backup
Crea /root/backup-bookstack.sh:
#!/bin/bash
# Configuración
BACKUP_DIR="/backups/bookstack"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
DB_PASSWORD="tu_password_aqui"
# Crear directorio
mkdir -p $BACKUP_DIR
# MariaDB (comprimido)
echo "Backing up MariaDB..."
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack | gzip > $BACKUP_DIR/bookstack-db-$DATE.sql.gz
# Configuración
echo "Backing up configuration..."
docker run --rm -v bookstack_config:/backup -v $BACKUP_DIR:/target alpine tar czf /target/bookstack-config-$DATE.tar.gz -C /backup .
# Limpiar backups antiguos
echo "Cleaning old backups..."
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
# Verificar
DB_SIZE=$(stat -f%z "$BACKUP_DIR/bookstack-db-$DATE.sql.gz" 2>/dev/null || stat -c%s "$BACKUP_DIR/bookstack-db-$DATE.sql.gz")
echo "Backup completado: $DATE (BD: $(($DB_SIZE / 1024 / 1024))MB)"
Automatizar con Cron
chmod +x /root/backup-bookstack.sh
crontab -e
# Backup diario a las 3 AM
0 3 * * * /root/backup-bookstack.sh >> /var/log/backup-bookstack.log 2>&1
Restauración
Restaurar desde Backup
# 1. Detener BookStack
docker stop bookstack
# 2. Restaurar MariaDB
gunzip < bookstack-db-20250101.sql.gz | docker exec -i bookstack-db mariadb -u bookstack -p${DB_PASSWORD} bookstack
# 3. Restaurar configuración
docker run --rm -v bookstack_config:/restore -v $(pwd):/source alpine tar xzf /source/bookstack-config-20250101.tar.gz -C /restore
# 4. Limpiar caché
docker exec bookstack php artisan cache:clear
# 5. Iniciar BookStack
docker start bookstack
Migración a Otro Servidor
# Servidor origen
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack | gzip > bookstack-migration.sql.gz
docker run --rm -v bookstack_config:/backup -v $(pwd):/target alpine tar czf /target/bookstack-config-migration.tar.gz -C /backup .
# Copiar a servidor destino
scp bookstack-*.gz usuario@servidor-destino:/tmp/
# Servidor destino
cd /tmp
gunzip < bookstack-migration.sql.gz | docker exec -i bookstack-db mariadb -u bookstack -p${DB_PASSWORD} bookstack
docker run --rm -v bookstack_config:/restore -v /tmp:/source alpine tar xzf /source/bookstack-config-migration.tar.gz -C /restore
docker restart bookstack
Backup Remoto
Sincronizar con S3/MinIO
#!/bin/bash
BACKUP_DIR="/backups/bookstack"
S3_BUCKET="s3://mi-bucket/bookstack/"
# Hacer backup local primero
/root/backup-bookstack.sh
# Sincronizar con S3
aws s3 sync $BACKUP_DIR $S3_BUCKET --storage-class GLACIER
# O con rclone
rclone sync $BACKUP_DIR minio:bookstack-backups
Sincronizar con Rsync
#!/bin/bash
BACKUP_DIR="/backups/bookstack"
REMOTE_SERVER="backup@servidor-remoto"
REMOTE_PATH="/backups/bookstack"
# Sincronizar
rsync -avz --delete $BACKUP_DIR/ $REMOTE_SERVER:$REMOTE_PATH/
Verificación de Backups
Script de Verificación
#!/bin/bash
BACKUP_FILE="/backups/bookstack/bookstack-db-latest.sql.gz"
# Verificar integridad
if gunzip -t "$BACKUP_FILE" 2>/dev/null; then
echo "✓ Backup válido"
# Verificar contenido
TABLES=$(gunzip -c "$BACKUP_FILE" | grep "CREATE TABLE" | wc -l)
echo "✓ Contiene $TABLES tablas"
else
echo "✗ Backup corrupto"
exit 1
fi
Próximos Pasos
- Actualización - Mantén BookStack actualizado
- Automatiza - Configura cron para backups automáticos
- Prueba restauración - Verifica que los backups funcionan