
🌐 Aussi en: English · Deutsch · Español
Vous avez toujours rêvé de sauvegarder votre instance Nextcloud auto-hébergée sans transpirer à grosses gouttes ? Marre de faire des rsync de dossiers à la main ou de risquer une base de données corrompue ? Attachez votre ceinture, sysadmin – voici un petit script Bash bien pratique qui fait le sale boulot à votre place. De l’activation du mode maintenance à la synchronisation de vos données externes en passant par le dump de votre base MySQL – tout est géré en une seule exécution. 🧠
📜 Que fait ce script ?
Ce script effectue une sauvegarde en 6 étapes de votre serveur Nextcloud distant :
- Active le mode maintenance
- Crée un dump de la base de données MySQL
- Sauvegarde le répertoire
config/ - Sauvegarde les
themes/personnalisés (facultatif) - Synchronise le répertoire de données externe
- Désactive à nouveau le mode maintenance
Le tout avec rsync, ssh et un peu de magie shell. Résultat : une sauvegarde entièrement automatisée que vous pouvez coller dans cron à volonté.
🧠 Le script (copier, coller, ajuster)
#!/bin/bash
# === CONFIGURATION ===
REMOTE_USER="root"
REMOTE_HOST="your.remote.host"
REMOTE_SSH_PORT=22
SSH_KEY="$HOME/.ssh/id_rsa"
# Local backup destination (no versioning)
LOCAL_BACKUP_DIR="/data/backup/nextcloud/yourinstance"
mkdir -p "$LOCAL_BACKUP_DIR"
# Remote Nextcloud directory (contains everything)
REMOTE_NC_DIR="/var/www/html/nextcloud"
# Database credentials (use .my.cnf or secured method in production)
REMOTE_DB_NAME="your_db_name"
REMOTE_DB_USER="your_db_user"
# REMOTE_DB_PASS is omitted for security
# === BACKUP START ===
echo "🛡️ [1/4] Enabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --on" > /dev/null
echo "🗃️ [2/4] Creating database dump ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"mysqldump -u $REMOTE_DB_USER -p'********' $REMOTE_DB_NAME" > "$LOCAL_BACKUP_DIR/db.sql"
echo "📦 [3/4] Backing up entire Nextcloud directory from $REMOTE_NC_DIR ..."
rsync -az --delete -e "ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR"
\
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_NC_DIR/" "$LOCAL_BACKUP_DIR/nextcloud/"
echo "✅ [4/4] Disabling maintenance mode ..."
ssh -i "$SSH_KEY" -p $REMOTE_SSH_PORT -o LogLevel=ERROR "$REMOTE_USER@$REMOTE_HOST"
\
"sudo -u www-data php $REMOTE_NC_DIR/occ maintenance:mode --off" > /dev/null
🔒 N’oubliez pas de remplacer vos secrets
- <your_db_name> – Le nom de votre base de données Nextcloud
- <your_db_user> – L’utilisateur de la base de données
- <your_db_password> – Le mot de passe (gardez-le en lieu sûr, les amis !)
- REMOTE_HOST / PORT / DIRS – À adapter à l’organisation de votre serveur
Pour les secrets, mieux vaut utiliser des variables d’environnement ou des fichiers .env externes. Les coder en dur, ça passe pour des scripts vite faits mal faits – mais ne les poussez surtout pas sur GitHub 😅.
🧪 Testez avant d’automatiser
Avant de balancer tout ça dans votre crontab, testez-le à la main et inspectez votre dossier de sauvegarde. Une sauvegarde complète devrait contenir :
db.sql– Votre base de données Nextcloud complèteconfig/– Les fichiers de configurationthemes/– Les thèmes personnalisés (s’il y en a)datafiles/– Tous les fichiers téléversés par les utilisateurs
Vous pouvez ajouter de la journalisation, de la gestion d’erreurs, du versionnage et des rapports par e-mail – mais ce script de base fait le travail pour la plupart des clouds hébergés à la maison. ☁️
🤖 TL;DR
Si vous auto-hébergez Nextcloud, voici le script dont vous ignoriez avoir besoin. Connexion SSH, rsync à cœur joie, dump de la base, et vous dormez sur vos deux oreilles en sachant votre cloud en sécurité – du moins jusqu’à ce que quelqu’un se prenne les pieds dans le câble d’alimentation du NAS. 😉
Bon hacking & sauvegardez de façon responsable ! 🧬





