Borg pour les sauvegardes sur Yunohost

Dans ce billet, je te présente comment j’ai configuré l’outil Borg pour faire des sauvegardes de l’ensemble de mon infrastructure Yunohost.

Le serveur d’autohébergement Yunohost

Logo de Yunohost
Logo de Yunohost

Yunohost est une distribution GNU/Linux basée sur Debian qui offre une infrastructure de type plateforme applicative pour l’autohébergement. Elle simplifie la gestion du cycle de vie d’applications web orientée pour un usage personnel ou en petits groupes. Elle répond aux besoins des particuliers, travailleurs autonomes, organismes et petites entreprises.

L’association LinuQ où je m’implique bénévolement a fait de nombreuses explorations sur cette plateforme sur son wiki.

Le logiciel Borg

Logo de Borg
Logo de Borg

Borg est un logiciel de gestion de sauvegarde.

Ces deux services permettent l’exécution de Borg en arrière-plan:

  • Un premier, borg.timer, qui gère l’ordonnancement des sauvegardes et qui tourne en permanence
  • Un second, borg.service, qui effectue le travail de sauvegarde et qui s’éteint par la suite

Le service rsync.net

rsync.net est un service d’hébergement infonuagique qui se spécialise dans les sauvegardes avec le logiciel rsync. C’est un service sécuritaire et peu dispendieux pour garder des sauvegardes de ses systèmes.

Une fois obtenu, le service sera accessible via la commande ssh seulement. Vous aurez un nom d’utilisateur numérique ainsi qu’un mot de passe pour accéder au service. Un des serveurs de rsync.net, identifié par un sous-domaine de la forme SUB.rsync.net, héberge votre espace. Il faudra utiliser celui-ci pour la configuration de Borg.

Pour des fins de simplification de cette présentation, je vais configurer ces deux variables d’environnement. Je vous conseille aussi de faire de même:

# Sous-domaine du serveur de sauvegarde rsync.net
RSYNC_SUB=
# Nom d'utilisateur rsync.net
RSYNC_USER=

Borg et Yunohost

La façon la plus simple d’installer Borg sur un serveur Yunohost est par la ligne de commande, en tant que superutilisateur

yunohost app install borg

On vous demandera ensuite de fournir certains paramètres afin de personnaliser l’installation:

  • domain name: ${RSYNC_SUB}.rsync.net
  • username: ${RSYNC_USER}

Il faut ensuite configurer une variable d’environnement qui permettra de bien utiliser le service Borg disponible sur rsync.net

export BORG_REMOTE_PATH=/usr/local/bin/borg1/borg1

L’installation de Borg par Yunohost va générer une paire de clés cryptographiques avec l’algorithme Ed25519. Celles-ci sont situées dans le répertoire /root/.ssh/ et ont le nom de fichier id_borg_ed25519. Il faudra d’ailleurs, pour se connecter au serveur rsync.net sans spécifier de mot de passe, partager cette clé sur celui-ci:

Attention

  • S’il y a déjà un fichier .ssh/authorized_keys sur le serveur distant, il sera écrasé.
  • Je conseille donc d’en faire une copie et de synchroniser un fichier qui contient toutes les clés, une par ligne, au lieu du fichier ~/.ssh/id_borg_ed25519.pub
# Récupérer les clés actuelles
ssh ${RSYNC_USER}@${RSYNC_SUB}.rsync.net cat .ssh/authorized_keys > ~/borg_authorized_keys
# Ajouter la nouvelle clé
cat ~/.ssh/id_borg_ed25519.pub >> ~/borg_authorized_keys
# Synchroniser les nouvelles clés
rsync -av ~/borg_authorized_keys ${RSYNC_USER}@${RSYNC_SUB}.rsync.net:.ssh/authorized_keys

Puis, à chaque connexion, préciser cette clé lors des connexions au serveur rsync.net, notamment avec le paramètre -i /root/.ssh/id_borg_ed25519 de la commande ssh ou avec la variable d’environnement suivante pour Borg:

export BORG_RSH="ssh -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes"

Créer manuellement le répertoire backup

ssh -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes ${RSYNC_USER}@${RSYNC_SUB}.rsync.net mkdir backup

Pour démarrer une première sauvegarde, une fois que tous les services sont configurés. Comme celle-ci peut prendre plusieurs minutes lors de la première exécution, il est recommandé de travailler dans une session screen ou tmux.

systemctl start borg

On peut ensuite valider la présence de la sauvegarde sur le serveur avec la commande suivante:

borg list ${RSYNC_USER}@${RSYNC_SUB}.rsync.net:~/backup

Sauvegarde manuelle

Ce petit script te permettra de déclencher une sauvegarde manuelle de toutes tes applications

for app in $(yunohost app list --json | jq '.apps | .[] | .id' | tr -d '"')
do
yunohost backup create -n "auto_$app" --method borg_app --apps "$app"
done

Références

Pour en savoir plus sur l’autohébergement, je recommande de s’abonner à ma newsletter.