#!/bin/bash # scripts/backup.sh - Backup complet Nextcloud set -e source .env BACKUP_DIR="${BACKUP_DESTINATION:-./backups}" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_NAME="nextcloud_backup_$DATE" BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" echo "🔧 Démarrage du backup: $BACKUP_NAME" # Créer le dossier de backup mkdir -p "$BACKUP_PATH" # 1. Activer le mode maintenance echo "⏸️ Activation du mode maintenance..." docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on # 2. Backup de la base de données echo "💾 Backup de la base de données..." docker-compose exec -T db mysqldump \ -u"$MYSQL_USER" \ -p"$MYSQL_PASSWORD" \ "$MYSQL_DATABASE" \ --single-transaction \ --quick \ --lock-tables=false \ > "$BACKUP_PATH/database.sql" # 3. Backup des fichiers de config echo "⚙️ Backup de la configuration..." tar -czf "$BACKUP_PATH/config.tar.gz" \ -C ./data/config . # 4. Backup des données utilisateurs (optionnel, peut être énorme) echo "📁 Backup des données utilisateurs..." # Pour un backup incrémental, utilisez rsync rsync -a --info=progress2 \ ./data/data/ \ "$BACKUP_PATH/data/" \ --exclude 'appdata_*/preview' \ --exclude '*/cache' \ --exclude '*/thumbnails' # Ou pour un tar compressé (long): # tar -czf "$BACKUP_PATH/data.tar.gz" \ # --exclude='appdata_*/preview' \ # -C ./data/data . # 5. Backup des apps echo "📦 Backup des apps personnalisées..." if [ -d "./data/custom_apps" ]; then tar -czf "$BACKUP_PATH/apps.tar.gz" \ -C ./data/custom_apps . fi # 6. Désactiver le mode maintenance echo "▶️ Désactivation du mode maintenance..." docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off # 7. Créer une archive complète echo "🗜️ Compression finale..." cd "$BACKUP_DIR" tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME/" rm -rf "$BACKUP_NAME" # 8. Nettoyer les vieux backups echo "🧹 Nettoyage des backups > ${BACKUP_RETENTION_DAYS:-30} jours..." find "$BACKUP_DIR" -name "nextcloud_backup_*.tar.gz" -mtime +${BACKUP_RETENTION_DAYS:-30} -delete echo "✅ Backup terminé: $BACKUP_DIR/$BACKUP_NAME.tar.gz" du -h "$BACKUP_DIR/$BACKUP_NAME.tar.gz"