76 lines
2.1 KiB
Bash
76 lines
2.1 KiB
Bash
#!/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"
|