Pour l’hébergement de mes différents services web j’utilise un VPS hébergé chez OVH sous Yunohost. Il s’agit d’une distribution sous base Debian hébergeant des applications web installables facilement. Afin de sauvegarder toutes les données je souhaite rapatrier une sauvegarde sur un NAS synology distant. Il y a évidemment de nombreuses façons de faire, ici je vais mettre en place sur le synology une tache planifiée qui va synchroniser le répertoire de yunohost contenant les « backups » vers un répertoire du NAS (à l’aide d’un petit script bash).
Activation du répertoire home pour les utilisateurs du NAS
De base sur un NAS synology le répertoire home n’est pas crée pour les utilisateurs. Sur votre DSM se rendre dans utilisateurs/avancé puis activer le service d’accueil de l’utilisateur:
Génération de la clef SSH
Afin de ne pas avoir à rentrer de mot de passe pour le script bash qui va faire la sauvegarde, on va utiliser un couple de clef publique / privée. Pour ce faire on se connecte en SSH au NAS, puis dans le terminal on génère la clef à l’aide de cette commande:
ssh-keygen -t rsa
On valide l’emplacement de stockage des clefs par défaut, et on laisse vide pour le mot de passe. Enfin on change les droits sur le répertoire .ssh et les clefs à l’aide de ces commandes (remplacer $VOTRE_VOLUME et $VOTRE_UTILISATEUR par les vôtres):
sudo chmod 700 /$VOTRE_VOLUME/homes/$VOTRE_UTILISATEUR/.ssh
sudo chmod 600 /$VOTRE_VOLUME/homes/$VOTRE_UTILISATEUR/.ssh/*
Autorisation sur le serveur Yunohost
Il faut maintenant autoriser l’usage de la clef générée sur le serveur Yunohost. Pour ce faire on se connecte en SSH au serveur yunohost depuis le NAS, puis on ajoute notre clef publique dans authorized_keys. A faire depuis le home de l’utilisateur courant sur le NAS (Remplacer les valeurs avec $ par les vôtres):
cat ~/.ssh/id_rsa.pub | ssh -p $VOTRE_PORT_SSH $ADMIN_YUNOHOST@$VOTRE_SERVEUR.FR "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
A ce stade la clef publique est autorisée par le daemon SSH du serveur Yunhost. Pour tester le bon fonctionnement on tente une connexion ssh simple, normalement il n’y a pas de demande du mot de passe. Sinon quelque chose dysfonctionne(Remplacer les valeurs avec $ par les vôtres):
ssh -p $VOTRE_PORT_SSH $ADMIN_YUNOHOST@$VOTRE_SERVEUR.FR
Mise en place du script
Sur le NAS dans le /home de l’utilisateur courant on va créer un fichier sauvegarde_yunohost.sh, puis utiliser le script suivant (Remplacer les valeurs avec $ par les vôtres):
#!/bin/bash
# Inscription des résultats dans un fichier log
exec &> sauvegarde_yunohost.log
echo "*** Lancement du script de sauvegarde ***"
# Connexion ssh suppression des anciennes sauvegardes puis création du backup
ssh -p $VOTRE_PORT_SSH $ADMIN_YUNOHOST@$VOTRE_SERVEUR.FR 'rm /home/yunohost.backup/archives/*.json && rm /home/yunohost.backup/archives/*.tar && sudo yunohost backup create'
# Synchronisation par RSYNC serveur -> NAS
rsync -avz --progress --delete-after -e "ssh -p $VOTRE_PORT_SSH" $ADMIN_YUNOHOST@$VOTRE_SERVEUR.FR:/home/yunohost.backup/archives/ /$VOTRE_VOLUME/$VOTRE_REPERTOIRE_SAUVEGARDE/
# Fermeture du script
echo "*** Fin du script de sauvegarde ***"
exit
Il s’agit d’un script très basique, à adapter pour votre usage. Il supprime les sauvegardes sur le serveur Yunohost, en génère une nouvelle puis synchronise le backup dans un répertoire de votre NAS. Une amélioration possible serait de faire une rotation des sauvegarde afin d’en conserver plusieurs par exemple.
Il nous reste maintenant à mettre en place une tâche planifiée sur le NAS afin d’exécuter régulièrement la sauvegarde. Sur le NAS rendez-vous dans panneau de configuration / Planificateur de tâches, puis créer une nouvelle tâche comme ceci (A modifier avec vos valeurs):