Héberger son propre cloud c’est bien (cela permet d’avoir un meilleur contrôle de ses données), mais pour pouvoir le faire sereinement il faut penser aux sauvegardes. Afin d’éviter le pire et de tout perdre…
J’ai installé mon instance NextCloud sur un KS-2 en suivant ce tuto et celui de Nicolas sur AbyssProject (Debian 9 avec NGINX, PHP 7 et MariaDB 👌).
Afin de m’en servir comme un vrai cloud (et donc de me dégoogliser un peu encore), j’avais besoin de le faire sereinement sans crainte d’un crash et d’une perte de données. Il faut donc mettre en place un système de sauvegarde pour limiter le risque !
La doc officielle donne quelques informations, et j’ai trouvé un petit tuto en Français sympa pour me mettre sur les bonnes pistes ! Et je l’ai adapté à mon fonctionnement.
Principe
Pour minimiser le temps d’indisponibilité (puisqu’il faut mettre l’instance en mode maintenance pour éviter toute modification et accès à la BDD pendant la copie), on va d’abord copier le répertoire entier dans un autre répertoire en utilisant effectivement RSYNC en local comme dans le tuto cité juste avant. Une fois cette copie terminée on sort l’instance du mode maintenance.
Le but est maintenant de dupliquer ce répertoire sur une autre machine distante pour le conserver en lieu sûr. Dans mon cas cela sera sur mon NAS QNAP via une synchro RSYNC.
Habituellement je compresse les fichiers avant de les envoyer sur un autre lieu de sauvegarde. Le problème ici c’est que cela demande plus d’une heure à mon Kimsufi pour compresser cette sauvegarde (~5 Go pour l’instant). Dans un premier temps on va se contenter de la transférer sans la compresser. Je verrai plus tard si je veux procéder autrement, mais ça risque d’être compliqué dès que je vais vraiment commencer à m’en servir comme cloud personnel et donc le remplir…
Attention ce script devra être lancé par un utilisateur ayant les droits suffisants sur le répertoire d’installation de Nextcloud. Notamment, pour la commande mise en maintenance de l’instance fonctionne.
# ## Script original de https://soozx.fr/sauvegarde-locale-manuelle-planifiee-nextcloud/ ## Modification et adaptation pour https://blog.raphaelchochon.io #
## SAUVEGARDE DE NEXTCLOUD
SHELL=/bin/bash
## VARIABLES & FONCTION MAIL # Répertoire de stockage des logs LOGDIR="/home/backup_nextcloud/log/" # Email pour les erreurs (0 pour désactiver) EMAIL=votre_email # Log de sortie & erreurs exec &> ${LOGDIR}/out.log # Répertoire nextcloud NCDIR="/var/www/nextcloud" # Répertoire de la sauvegarde NCDIR_BCKP="/home/backup_nextcloud/backup_dir" # Nom de l'archive ARCHIVE_NAME="nextcloud_$(date +%d.%m.%y@%Hh%M)" # Rétention / rotation des sauvegardes SQL RETENTION=7 # Nom base de données nextcloud NCBDD="nextcloud" #Propriétaire base de données nextcloud NCUSER="nextcloud" # Mot de passe de la base de données nextcloud NCPWD="mon_mot_de_passe" # L'IP du NAS ou le domaine No-IP QNAP_HOST="IP_ou_HOST_du_NAS" # Le port natter sur votre box vers votre NAS QNAP_PORT="5000" # L'user rsync configuré dans votre NAS QNAP_USER="qnap-xxx" # L'emplacement du fichier contenant le mot de passe du QNAP QNAP_PWD="/home/nextcloud/pwd-qnap.txt" # Emplacement sur le NAS sans le slash devant ! QNAP_DIR="rsync/nextcloud/backup_dir"
# Fonction mail function cleanup { if [ "$EMAIL" != "0" ] ; then cat ${LOGDIR}/out.log | mail -s "BCKP NextCloud Rapport" ${EMAIL} else echo "Rapport mail désactivé" fi } trap cleanup EXIT
### SCRIPT
## ETAPE DE COPIE
echo "###### DEBUT DE LA COPIE LOCALE ######" # Créer si besoin les répertoires manquants dans le dossier de sauvegarde [ ! -d ${NCDIR_BCKP}/www/config ] && mkdir -p ${NCDIR_BCKP}/www/config [ ! -d ${NCDIR_BCKP}/www/data ] && mkdir -p ${NCDIR_BCKP}/www/data [ ! -d ${NCDIR_BCKP}/www/themes ] && mkdir -p ${NCDIR_BCKP}/www/themes [ ! -d ${NCDIR_BCKP}/bdd ] && mkdir -p ${NCDIR_BCKP}/bdd
# Activation du mode maintenance nextcloud php ${NCDIR}/occ maintenance:mode --on
echo "###### DEBUT DE LA COPIE SUR LE NAS QNAP ######" # RSYNC du répertoire qui vient d'être backupé vers le NAS QNAP rsync -cazov --password-file=${QNAP_PWD} --port=${QNAP_PORT} --delete ${NCDIR_BCKP} ${QNAP_USER}@${QNAP_HOST}::${QNAP_DIR} echo "###### FIN DE LA COPIE SUR LE NAS QNAP ######"
## FIN echo "###################### FIN DE LA SAUVEGARDE ######################"
Pour lancer l’exécution du script avec mon utilisateur nextcloud par exemple (mais en étant connecté avec un autre utilisateur) :
su -l nextcloud -c "/bin/bash /home/scripts/backup/backup_nextcloud.sh"
Automatisation
Comme d’habitude, on passe par une tâche cron pour automatiser tout ça. Pour ma part ce sera en journée, pas envie de réveiller mon NAS la nuit.
Il faut que ce soit l’utilisateur nextcloud (ou www-data selon votre installation) qui exécute ce script donc on créer un fichier dans le répertoire /etc/cron.d/ :
/etc/cron.d/backup_nextcloud
# # BACKUP NEXTCLOUD RSYNC # # m h dom mon dow user command 00 12 * * * nextcloud /bin/bash /home/scripts/backup/backup_nextcloud.sh