- Borg Backup App for YunoHost
- Borg Server for YunoHost
- How to backup your YunoHost server on another server
- Monter un serveur de sauvegardes avec BorgBackup
Sauvegarde
Sauvegarder un serveur “client” yanfi.space sur un “serveur” xoyaz.xyz
- Une phrase de passe forte pour crypter vos sauvegardes sur le serveur hôte B. Et pour restaurer vos sauvegardes !
- ID des applications YunoHost que vous voulez sauvegarder
- Calendrier régulier de vos sauvegardes, voir ci-dessous
- Installer l’application de sauvegarde Yunohost Borg (borg) sur le client yanfi.space
- Installer l’application Borg sur le serveur xoyaz.xyz
- Enregistrez la phrase de passe à un autre endroit que votre serveur. Sans la phrase de passe, vous ne pourrez pas restaurer les données.
A - Client yanfi.space
Clés ssh borg
Actions à effectuer sur le client "yanfi.space"
En root,créer une clé SSH pour l’authentification borg sur le serveur xoyaz.xyz
sudo -s
ssh-keygen -t ed25519 -f /root/.ssh/id_borg_ed25519
Validez en appuyant sur la touche « Entrée » à toutes les questions
Vous devriez maintenant avoir une clé privée contenue dans le fichier /root/.ssh/id_borg_ed25519
, et une clé publique contenue dans le fichier /root/.ssh/id_borg_ed25519.pub
La clé privée ne doit jamais être partagée.
B - Serveur xoyaz.xyz
Actions à effectuer sur le serveur "xoyaz.xyz"
Installer borgbackup
Installer l’application Borg
sudo apt install borgbackup
On se connecte sur le serveur et on passe en mode su
Créer utilisateur “borgbackup”
Créer un utilisateur dédié à recevoir les sauvegardes : “borgbackup”
sudo useradd -d /home/backup -m -r -U borgbackup
On bascule en utilisateur borgbackup
sudo -u borgbackup -s
Création des dossiers
Répertoire ssh
mkdir /home/backup/.ssh
Chaque client a son dépôt dédié dans le dossier /home/backup/borg
mkdir -p /home/backup/borg/yanfi_space
Répertoire .passphrase
pour les accès aux dépôts borg des clients en local
mkdir -p /home/backup/.passphrase
Sortie utilisateur borgbackup
exit
Ajout clé publique client
Sur le serveur xoyaz.xyz, ajouter dans le fichier /home/backup/.ssh/authorized_keys
la clé publique de chacun des clients avec l’option command
Ajout de la clé publique id_borg_ed25519.pub
de yanfi.space
sudo -u borgbackup -s
# Avec quota : borg serve --storage-quota 5G
# Client yanfi.space
echo 'command="cd /home/backup/borg/yanfi_space; borg serve --restrict-to-path /home/backup/borg/yanfi_space",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,no-user-rc ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIws5uLxgF1UgGT8d/gfYueeEm5pFmRoXesbfD81QEpV root@yanfi.space' >> /home/backup/.ssh/authorized_keys
exit
L’option command
permet de restreindre l’utilisation de la connexion SSH à une commande donnée, pour le client qui utilisera la clé publique associée.
Créer une phrase de passe forte
Créer une phrase de passe forte pour crypter les sauvegardes Borg (sans espace vide)
Vous pouvez utiliser Diceware Password Generator pour générer une phrase de passe forte
Ajout de la phrase forte dans un fichier au dossier /home/backup/.passphrase
sudo -u borgbackup -s
# ajout phrase yanfi_space pour le client yanfi.space , dépôt yanfi_space
echo "<La phrase de passe forte>" > /home/backup/.passphrase/yanfi_space
Conserver cette phrase, elle sera demandé pour la création du dépôt borg
C - Client yanfi.space
Installer borg yunohost
Prérequis:
- Dépôt distant borg :
ssh://borgbackup@xoyaz.xyz:55051/home/backup/borg/yanfi_space
- PassPhrase du dépôt borg
En mode su , installer borg yunohost
yunohost app install borg
In which borg repository location do you want to backup your files ?: ssh://borgbackup@xoyaz.xyz:55051/home/backup/borg/yanfi_space
Provide a strong passphrase to encrypt your backups. No blank space: <Saisie de la passphrase sans espace>
Should Borg backup your YunoHost configuration? [yes | no] (default: yes):
Should Borg backup emails and user home directory? [yes | no] (default: yes):
Which apps should Borg backup ? (default: all):
With which regular time schedule should the backups be performed? (see systemd OnCalendar format) (default: Daily): 03:20
Do you want admin to receive mail notifications on backups ? [always | errors_only | never]: never
Info: Installing borg…
[…]
Success! Installation completed
Tester yunohost borg
Tester la configuration des applications Borg
À cette étape, votre sauvegarde devrait se dérouler à l’heure prévue (tous les jours à 3h20). Notez que la première sauvegarde peut être très longue, car de nombreuses données doivent être copiées via ssh. Les sauvegardes suivantes sont incrémentielles : seules les données nouvellement générées depuis la dernière sauvegarde seront copiées.
Si vous voulez tester la configuration correcte de Borg Apps avant l’heure prévue, vous pouvez lancer une sauvegarde manuellement sur le serveur yanfi.space (cx21) :
systemctl start borg
Visualiser les logs en cours
journalctl -f -u borg
[...]
Sep 26 13:12:47 yanfi.space sudo[29904]: pam_unix(sudo:session): session opened for user root by (uid=0)
Sep 26 13:12:47 yanfi.space sudo[29904]: pam_unix(sudo:session): session closed for user root
Sep 26 13:12:47 yanfi.space sudo[20627]: pam_unix(sudo:session): session closed for user root
Sep 26 13:12:47 yanfi.space systemd[1]: borg.service: Succeeded.
Sep 26 13:12:47 yanfi.space systemd[1]: Started Run backup borg.
Ensuite, vous pouvez vérifier la présence de votre dépôt de sauvegarde sur le serveur xoyaz.xyz
Vérification sauvegarde
Lister les fichiers
app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)"
Résultat
_auto_conf-2021-09-26_13:02 Sun, 2021-09-26 13:02:38 [25fb96cdf3aa9063295bf44c862b5ab651443ee8c956c3f07d06ecc78004d511]
_auto_data-2021-09-26_13:02 Sun, 2021-09-26 13:02:59 [990931009574da2d6b23db6861b778f2d147f9c4844188bff7a4fbeacadd0422]
_auto_borg-2021-09-26_13:03 Sun, 2021-09-26 13:03:27 [4033776d0bb792cb47670e6164a10bb341932d7b69b38572e999f1c63d7fedaa]
_auto_calibreweb-2021-09-26_13:03 Sun, 2021-09-26 13:03:46 [04d6d690224b374bab8ef437cb1628fff049327a8366e43f4b11cbb0a25b924a]
_auto_gitea-2021-09-26_13:06 Sun, 2021-09-26 13:06:52 [d39d9e9d87cf7b3728755e45c2cf84b580c2c35483f49f7319b1c5f289389a94]
_auto_librespeed-2021-09-26_13:07 Sun, 2021-09-26 13:07:17 [06f977c11ff8b7d8f122953c2a7506c36f62327aa4bb1eed7ff6f5d229d531e5]
_auto_my_webapp-2021-09-26_13:07 Sun, 2021-09-26 13:07:39 [dcac73e18510c75723788c8b2a2e7a3925f65db69f348e3c8c19fc5283b89bfa]
_auto_my_webapp__2-2021-09-26_13:07 Sun, 2021-09-26 13:08:02 [3df4f7c057f3a3b7088eb756c8d718282effc8601bfebf3333b178f5a71b20fb]
_auto_my_webapp__3-2021-09-26_13:08 Sun, 2021-09-26 13:08:23 [fcd33a92c6b607b839b05d78a69db0b90502cae2142bd305fa3c82d8f2058102]
_auto_navidrome-2021-09-26_13:08 Sun, 2021-09-26 13:08:46 [637c055ee8fbd36b8328b8471a2f20cfede35508f574d7f614e5205c53a04e25]
_auto_nextcloud-2021-09-26_13:09 Sun, 2021-09-26 13:09:19 [d9df4c0b4bc3878e3815a31ab0d7b59ee1c786dee0260d2061400240a2b34c46]
_auto_rainloop-2021-09-26_13:11 Sun, 2021-09-26 13:11:28 [5520de36a6c73a7628ee1f72748ea7b3b59d372ae835b7faafc3e8724a5e3a7f]
_auto_redirect-2021-09-26_13:11 Sun, 2021-09-26 13:11:50 [f4719fc1cd8f86900a3a8931240ad68b194b35fd60afc2ae398125e11662eeb7]
_auto_shaarli-2021-09-26_13:12 Sun, 2021-09-26 13:12:11 [328b7ccedf3566881a646d7c90db9991974cb65d9f8c1a791fb76557b3e5c02d]
_auto_ttrss-2021-09-26_13:12 Sun, 2021-09-26 13:12:32 [298e1c7d461473d62fad95bad249b099f8a2fb52f27573a5c0405256eab9deae]
Liste des sauvegardes à la date du jour
app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg list "$(yunohost app setting $app repository)" | grep $(date '+%Y-%m-%d')
D - Serveur xoyaz.xyz
Liste Sauvegardes
Si vous voulez être sûr de pouvoir restaurer votre serveur, vous devez essayer de restaurer régulièrement les archives. Mais ce processus prend beaucoup de temps.
Les sauvegardes borgbackup sont dans le dossier /home/backup/borg/yanfi_space
Pour exécuter les commandes relatives aux sauvegardes borg , il faut ouvrir un shell avec l’utilisateur borgbackup
sudo -u borgbackup -s
Vous devriez au moins :
- Maintenir vos applications à jour (si les applications sont trop anciennes, elles pourraient être difficiles à restaurer sur une version plus récente)
- Vérifiez régulièrement la présence de
info.json
etdb.sql
oudump.sql
dans vos archives d’applications
Exemple pour ttrss :
Liste des sauvegardes ttrss
BORG_PASSPHRASE="`cat /home/backup/.passphrase/yanfi_space`" borg list /home/backup/borg/yanfi_space |grep 'ttrss'
_auto_ttrss-2021-09-26_13:12 Sun, 2021-09-26 13:12:32 [298e1c7d461473d62fad95bad249b099f8a2fb52f27573a5c0405256eab9deae]
Vérification de la présence des fichiers
BORG_PASSPHRASE="`cat /home/backup/.passphrase/yanfi_space`" borg list /home/backup/borg/yanfi_space::_auto_ttrss-2021-09-26_13:12 | grep info.json
-rw-r--r-- root root 342 Sun, 2021-09-26 13:12:26 info.json
BORG_PASSPHRASE="`cat /home/backup/.passphrase/yanfi_space`" borg list /home/backup/borg/yanfi_space::_auto_ttrss-2021-09-26_13:12 | grep db.sql
-rw-r--r-- root root 11842086 Sun, 2021-09-26 13:12:25 apps/ttrss/backup/db.sql
- Assurez-vous d’avoir votre phrase de passe à disposition même si votre client est complètement cassé
Informations (phrase de passe sur le serveur backup)
BORG_PASSPHRASE="`cat /home/backup/.passphrase/yanfi_space`" borg info /home/backup/borg/yanfi_space
Repository ID: ee6f2866d6d36f39bb5cd4347d4defc4b056ed852d8d0ca14a9acb107de1ac07
Location: /home/backup/borg/yanfi_space
Encrypted: Yes (repokey)
Cache: /home/backup/.cache/borg/ee6f2866d6d36f39bb5cd4347d4defc4b056ed852d8d0ca14a9acb107de1ac07
Security dir: /home/backup/.config/borg/security/ee6f2866d6d36f39bb5cd4347d4defc4b056ed852d8d0ca14a9acb107de1ac07
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
All archives: 7.11 GB 6.01 GB 4.56 GB
Unique chunks Total chunks
Chunk index: 49550 55121
Restauration
BorgBackup restauration depuis cx21
Pour des informations sur le processus de restauration, consultez ce fil de discussion du forum yunohost (en) et celui-là (en), ainsi que l’utilisation de borg avec des sshkeys (en), la documentation sur borg extract (en), et ce tutoriel général sur la sauvegarde de borg (en).
Dans les explications qui suivent :
- le serveur à sauvegarder/restaurer est appelé :
cx21
domaine yanfi.space - le serveur distant qui reçoit et stocke la sauvegarde s’appelle
backup
et il est accessible sur le domainexoyaz.xyz
. - l’utilisateur distant sur le
backup
qui possède les droits borg s’appeleyanfi
. - les fichiers de sauvegarde sont stockés dans le répertoire
/home/backup/borg/yanfi_space
du serveur distant
Vue d’ensemble
Si vous avez besoin de restaurer tout un système de yunohost :
- Installer une nouvelle VM debian
- Installez yunohost de la manière habituelle
- Passez par
yunohost postinstall
(les paramètres que vous fournirez ne sont pas cruciaux, car ils seront remplacés par la restauration) - Installer l’application
borg
- Configurer
backup
pour accepter les connexions ssh à partir decx21
. - Utiliser borg pour importer des sauvegardes de
backup
verscx21
. - Restaurer les sauvegardes borg avec la commande
yunohost backup restore
, d’abord config, puis data, puis chaque application une à la fois - Supprimer l’application Borg et la restaurer
Permettre à cx21
de se connecter à backup
avec borg
À ce stade, nous supposerons que cx21
est un yunohost fraîchement installé (basé sur buster dans mon cas). Vous devriez également avoir effectué la post-installation du yunohost.
Si vous ne voulez pas restaurer tout le système, juste quelques applications, vous pouvez sauter certaines des étapes ci-dessous.
Installez l’application borg yunohost dans cx21
.
L’idée ici est d’installer borg, non pas pour créer des sauvegardes, mais seulement pour utiliser les commandes borg pour importer des sauvegardes à distance.
Ainsi, par exemple, vous pouvez l’installer en faisant ce qui suit :
sudo yunohost app install borg -a "server=xoyaz.xyz&ssh_user=yanfi&conf=0&data=0&apps=hextris&on_calendar=2:30"
Assurez-vous que backup
accepte les connexions ssh à partir de cx21
Dans cx21
vous devrez récupérer la clé ssh que borg vient de créer lors de l’installation : sudo cat /root/.ssh/id_borg_ed25519.pub
, copiez la dans le presse-papiers.
Connectez-vous via ssh à backup
, allez à /home/yanfi/.ssh/authorized_keys
, et passez la clé publique de borg que vous avez obtenue à l’étape précédente.
Maintenant, pour vous assurer que cela fonctionne, vous pouvez essayer de vous connecter via ssh de cx21
à backup
.
Dans cx21
: ssh -i /root/.ssh/id_borg_ed25519 yanfi@xoyaz.xyz
. Si vous pouvez entrer dans backup
, sans qu’il vous demande un mot de passe, alors vous pouvez continuer :)
ATTENTION : si vous utilisez un port SSH différent de 22, modifier les fichiers en conséquence :
sed -i 's/BORG_RSH="ssh/BORG_RSH="ssh -p 55051/g' /etc/yunohost/apps/borg/conf/backup_method.j2
sed -i 's/BORG_RSH="ssh/BORG_RSH="ssh -p 55051/g' /etc/yunohost/hooks.d/backup_method/05-borg_app
Restaurer les sauvegardes de cx21
⚠️ Pour que les commandes de la section suivante fonctionnent, vous devez être root dans cx21
(vous pouvez devenir root en exécutant sudo su
) et connaitre la phrase mot de passe pour accéder la sauvegarde borg.
⚠️ La restauration des sauvegardes peut prendre un certain temps, vous feriez mieux de les faire dans un processus séparé, afin qu’elle ne s’arrête pas si votre session de terminal se ferme. Pour cela, vous pouvez par exemple utiliser tmux.
Dans cx21
maintenant, vous devriez être capable de lister les sauvegardes dans backup
avec la commande suivante :
SRV="yanfi@xoyaz.xyz:~/backup"
# Si port SSH 22 PORT_SSH='' sinon définir le port PORT_SSH='-p 55051'
PORT_SSH='-p 55051'
# saisir la phrase mot de passe
BORG_RSH="ssh $PORT_SSH -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes " borg list --short $SRV
ou
# passphrase en variable
export BORG_PASSPHRASE="xxxxxxxxxxxxxxx"
BORG_RSH="ssh $PORT_SSH -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes" borg list --short $SRV
Vous pouvez ensuite en réimporter un vers cx21
avec :
BORG_RSH="ssh $PORT_SSH -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes " borg export-tar $SRV::auto_BACKUP_NAME /home/yunohost.backup/archives/auto_BACKUP_NAME.tar.gz
Et ensuite restaurer l’archive en cx21
avec :
yunohost backup restore auto_BACKUP_NAME --system # for config and data backups
yunohost backup restore auto_BACKUP_NAME --apps # for other backups (=apps)
Exemple sauvegarde du 14 mars
On liste les sauvegardes du 14 mars 2021
SRV="yanfi@xoyaz.xyz:~/backup"
# Si port SSH 22 PORT_SSH='' sinon définir le port PORT_SSH='-p 55051'
PORT_SSH='-p 55051'
export BORG_PASSPHRASE="xxxxxxxxxxxxxxx"
BORG_RSH="ssh $PORT_SSH -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes" borg list --short $SRV |grep '14_03_21'
auto_conf_14_03_21_03:15
auto_data_14_03_21_03:15
auto_borg_14_03_21_03:15
auto_gitea_14_03_21_03:15
auto_my_webapp_14_03_21_03:15
auto_navidrome_14_03_21_03:15
auto_nextcloud_14_03_21_03:16
auto_redirect_14_03_21_03:16
auto_shaarli_14_03_21_03:16
auto_ttrss_14_03_21_03:16
auto_conf_14_03_21_10:10
auto_data_14_03_21_10:10
auto_borg_14_03_21_10:10
auto_gitea_14_03_21_10:10
auto_my_webapp_14_03_21_10:10
auto_navidrome_14_03_21_10:10
auto_nextcloud_14_03_21_10:11
auto_redirect_14_03_21_10:11
auto_shaarli_14_03_21_10:11
auto_ttrss_14_03_21_10:11
On réimporte par exemple auto_conf_14_03_21_03:15
BORG_RSH="ssh $PORT_SSH $PORT_SSH -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes " borg export-tar $SRV::auto_conf_14_03_21_03:15 /home/yunohost.backup/archives/auto_conf_14_03_21_03:15.tar.gz
Et nextcloud ? C’est super lourd ! !
Pour nextcloud, le mieux est probablement de réimporter la sauvegarde sans les données. Et d’importer les données manuellement.
Pour cela, vous pouvez faire ce qui suit (en tant que root) :
SRV=yanfi@xoyaz.xyz:/home/yanfi/backup
# export the app without data
BORG_RSH="ssh -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes " borg export-tar -e apps/nextcloud/backup/home/yunohost.app $SRV::auto_nextcloud_XX_XX_XX_XX:XX /home/yunohost.backup/archives/auto_nextcloud_XX_XX_XX_XX:XX.tar.gz
# extract the data from the backup to the nextcloud folder
cd /home/yunohost.app/nextcloud
BORG_RSH="ssh -i /root/.ssh/id_borg_ed25519 -oStrictHostKeyChecking=yes " borg extract $SRV::auto_nextcloud_XX_XX_XX_XX:XX apps/nextcloud/backup/home/yunohost.app/nextcloud/
mv apps/nextcloud/backup/home/yunohost.app/nextcloud/data data
rm -r apps
# now you can simply restore nextcloud app
yunohost backup restore auto_nextcloud_XX_XX_XX_XX:XX --apps
Restaurer borg
Une fois que vous aurez restauré l’ensemble du système, vous voudrez probablement restaurer également l’application borg.
Pour cela, supprimez le borg “factice” que vous avez installé pour faire la restauration, et restaurez le borg de la même manière que pour les autres applications :
sudo yunohost app remove borg
sudo yunohost backup restore auto_borg_XX_XX_XX_XX:XX --apps
Tips
Liste des applications YunoHost à sauvegarder
yunohost app setting borg apps -v "nextcloud,wordpress"
Autres commandes borg utiles
Obtenir l’espace de stockage utilisé par le référentiel de sauvegarde sur le serveur hôte (en)
borg info /home/servera/backup
Sauvegarde des applications Yunohost
Sauvegarde des applications Yunohost avec différents niveaux
Si vous voulez sauvegarder votre serveur invité :
- avec différentes applications YunoHost
- à un horaire régulier différent
- sur différents serveurs hôtes
Vous pouvez ensuite configurer plusieurs instances des Borg Apps sur les mêmes serveurs. Par exemple :
- Borg Backup instance “borg” : sauvegarde quotidienne du nextcloud sur le serveur hôte B
- Borg Backup instance
borg__2
: sauvegarde hebdomadaire de toutes les autres applications YunoHost sur le serveur hôte C