
đ Aussi en: English · Deutsch · Español
(Cet article est la suite logique du script de sauvegarde dĂ©crit ici : Nextcloud Backup Like a Pro â Automated with Bash. Les deux articles vont de pair et forment ensemble le workflow complet de migration et de reprise aprĂšs sinistre.)
AprĂšs plusieurs annĂ©es passĂ©es avec une fidĂšle instance Nextcloud â avec ses innombrables fichiers utilisateurs, calendriers, contacts et dossiers partagĂ©s plus ou moins farfelus â, il Ă©tait temps de passer Ă la vitesse supĂ©rieure. L’ancien serveur commençait Ă accuser son Ăąge, et une toute nouvelle machine avait Ă©tĂ© provisionnĂ©e avec Ansible pour repartir sur des bases saines.
PlutĂŽt que de bricoler avec des exports manuels, des interfaces web capricieuses ou des plugins de sauvegarde dans le navigateur, j’ai optĂ© pour un script Bash sobre et efficace qui gĂšre toute la migration. Il m’a permis de dĂ©placer l’ensemble de la pile Nextcloud (fichiers du cĆur, donnĂ©es utilisateurs et base de donnĂ©es) vers le nouveau serveur â de façon reproductible et avec un temps d’arrĂȘt minimal.
đ§ Ce que fait ce script
- ArrĂȘte proprement les services sur le serveur cible pour Ă©viter les verrous de fichiers et les conflits.
- Synchronise les fichiers de l’application Nextcloud (sans le rĂ©pertoire
data/). - TransfÚre les données utilisateurs séparément vers leur nouveau chemin de destination.
- Restaure la base de donnĂ©es Ă partir d’un dump local avec
scpetmysql. - Corrige propriĂ©taires et permissions pour l’accĂšs du serveur web.
- Redémarre PHP et les services web une fois que tout est en place.
- Confirme la fin de l’opĂ©ration par un message d’Ă©tat final.
đ Remarques sur l’arborescence
Dans le cadre de la migration, nous avons aussi dĂ©placĂ© le rĂ©pertoire data/ vers un emplacement dĂ©diĂ©, en dehors de la racine web d’Apache. C’est une approche plus propre et plus sĂ»re que de stocker les donnĂ©es utilisateurs dans le rĂ©pertoire d’installation principal de Nextcloud (ce qui Ă©tait le cas auparavant).
Le script tient compte de ce changement : il transfÚre le dossier data/ séparément et le place à son nouvel emplacement externe sur le serveur cible.
âïž Le script de migration
#!/bin/bash
# === CONFIGURATION ===
REMOTE_USER="root"
REMOTE_HOST="your.remote.ip"
REMOTE_SSH_PORT=22
SSH_KEY="$HOME/.ssh/id_rsa"
BACKUP_DIR="/data/backup/nextcloud/instance-a"
REMOTE_NEXTCLOUD_DIR="/var/www/html/nextcloud"
REMOTE_DATA_DIR="/data"
DB_NAME="your.db.name"
DB_USER="your.user"
DB_PASS="********" # đ Password removed for security
WWW_USER="www-data"
SSH_CMD="ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR $REMOTE_USER@$REMOTE_HOST"
echo "đ [1/7] Stopping remote web and PHP services ..."
$SSH_CMD "systemctl stop apache2 2>/dev/null || systemctl stop httpd 2>/dev/null"
$SSH_CMD "systemctl stop php8.2-fpm 2>/dev/null || true"
echo "đ€ [2/7] Transferring Nextcloud files (excluding data/) to remote server ..."
rsync -a --delete --exclude "data/" \
-e "ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR" \
"$BACKUP_DIR/nextcloud/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_NEXTCLOUD_DIR/"
echo "đ€ [3/7] Transferring user data (nextcloud/data/) to remote /data ..."
rsync -a --delete \
-e "ssh -i $SSH_KEY -p $REMOTE_SSH_PORT -o LogLevel=ERROR" \
"$BACKUP_DIR/nextcloud/data/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DATA_DIR/"
echo "đąïž [4/7] Transferring and restoring database dump ..."
scp -i "$SSH_KEY" -P $REMOTE_SSH_PORT "$BACKUP_DIR/db.sql" "$REMOTE_USER@$REMOTE_HOST:/tmp/db.sql"
$SSH_CMD "mysql -u '$DB_USER' -p'********' '$DB_NAME' < /tmp/db.sql && rm /tmp/db.sql" echo "đ [5/7] Setting remote file permissions ..." $SSH_CMD "chown -R '$WWW_USER:$WWW_USER' '$REMOTE_NEXTCLOUD_DIR'" $SSH_CMD "chown -R '$WWW_USER:$WWW_USER' '$REMOTE_DATA_DIR'" echo "đ [6/7] Starting remote services ..." $SSH_CMD "systemctl start php8.2-fpm 2>/dev/null || true"
$SSH_CMD "systemctl start apache2 2>/dev/null || systemctl start httpd 2>/dev/null"
echo "â
[7/7] Remote restore complete. Please verify your Nextcloud instance at: https://$REMOTE_HOST"
đ Le mot de la fin
Migrer une instance Nextcloud en production qui tourne depuis des annĂ©es â avec de vraies donnĂ©es et de vrais utilisateurs â peut intimider. Mais avec une dĂ©marche structurĂ©e et une automatisation digne de ce nom, pas de quoi paniquer. GrĂące Ă ce script et Ă un environnement cible propre, montĂ© avec Ansible, toute l’opĂ©ration a pris moins de 30 minutes, sans le moindre ajustement manuel. Les nerds jubilent.
Si vous prĂ©parez votre propre migration Nextcloud, surtout avec de gros volumes de donnĂ©es et zĂ©ro marge pour l’erreur humaine, essayez cette approche â et adaptez-la Ă votre façon de gĂ©rer votre infra.





