Table des matières
Sauvegarder Yunohost
À l'aide des applications Borg
Une des solution pour sauvegarder votre serveur consiste à utiliser les applications borg
Cette solution consiste à sauvegarder son serveur yunohost sur un autre serveur yunohost. Il y a donc deux applications, une application “client” ( Borg Backup App ) et une application “serveur” ( Borg Server ).
Borg Server a besoin d'un clé publique générée à l'installation de Borg Backup App. On commence donc par installer l'application cliente.
Dans mon exemple, je vais sauvegarder le serveur quercus sur fagus.
Installation de Borg Backup App
J'installe l'application cliente, Borg Backup App, sur quercus.
J'ai besoin :
- De choisir un libellé (Optionnel, pratique surtout si on veut mettre en place plusieurs backups)
- De configurer l'url du serveur ( Ici, l'URL principale de fagus est “artanux.be”.)
- De choisir le nom d'utilisateur qui sera utilisé pour se connecter au serveur distant. Je choisis donc le nom du serveur, quercus.
- Choisir une phrase de passe pour chiffrer les sauvegardes (important!)
- Choisir enfin ce que l'on souhaite sauvegarder et à quelle fréquence
Une paire de clé ssh est générée à l'installation de l'application.
root@quercus:~# ls -al /root/.ssh/ total 16 drwx------ 2 root root 4096 Aug 12 19:37 . drwx------ 4 root root 4096 Aug 11 07:23 .. -rw------- 1 root root 0 Aug 8 09:15 authorized_keys -rw------- 1 root root 411 Aug 12 19:37 id_borg_ed25519 -rw-r--r-- 1 root root 101 Aug 12 19:37 id_borg_ed25519.pub root@quercus:~# cat /root/.ssh/id_borg_ed25519.pub ssh-ed25519 AAAA(...)
Cette clé est également envoyée par mail à l'administrateur du serveur.
Installation de Borg Server
Une fois la partie cliente installée, passons à l'installation de la partie serveur, l'application Borg Server, sur fagus.
Il faudra configurer :
- Un libellé, surtout pratique si on héberge les sauvegardes de plusieurs serveurs
- De configurer le nom d'utilisateur choisi à l'installation de la partie cliente (ici: quercus)
- De configurer la clé ssh publique générée à l'installation de la partie cliente
- De choisir un quota de stockage, pour ne pas risquer de saturer votre serveur
L'application crée un utilisateur et place la clé ssh publique dans authorized_keys, avec une limitation sur la commande pouvant être utilisée :
root@fagus:/home# cat /home/quercus/.ssh/authorized_keys command="borg serve --storage-quota 500G --restrict-to-repository /home/quercus/backup",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 AAAA(...)
Lancer manuellement le backup
Sur le serveur à sauvegarder, où on a installé l'application Borg Backup App, on peut manuellement lancer une sauvegarde en démarrant le service :
# systemctl start borg
Pour vérifier que tout fonctionne bien :
- Vérifier sur un dossier “/home/quercus/backup/” a bien été créé sur Fagus.
- Utiliser les commandes borgs pour vérfier :
root@fagus:~# borg list /home/quercus/backup/ Enter passphrase for key /home/quercus/backup: auto_conf_16_08_20_15:36 Sun, 2020-08-16 15:36:46 [dca3fdacfe470ef02a1a8b878944ab9fedb0468f4823891d8c0e2419701b2d32] auto_data_16_08_20_15:36 Sun, 2020-08-16 15:37:04 [8992608fb919d66a54f1c0412a8a88b471cda229a66f154dc4fc945076f8d8ff] auto_borg_16_08_20_15:38 Sun, 2020-08-16 15:38:29 [38b1f269210021a671be08e86a85a120b3664a321892d11caad555cab6d23e53] auto_borgserver_16_08_20_15:38 Sun, 2020-08-16 15:38:43 [7101a5803175dc31d4f54c33b4ecab95d225532faa0240fd84d492b265c05ac5] auto_dokuwiki_16_08_20_15:38 Sun, 2020-08-16 15:39:04 [dbaf920f37f399b5186194a1d93973771e15e10d47da352514ddcf895664cc07] auto_my_webapp_16_08_20_15:44 Sun, 2020-08-16 15:44:30 [3aa0379bcf79a43d22bed9d770c8192afbd859306ddc864fc903759371ada9bb] auto_redirect_16_08_20_15:44 Sun, 2020-08-16 15:44:49 [992fc9016a91b54b82f46e65aeb95e203099703634211ff16e0e7841854f9161] auto_shaarli_16_08_20_15:45 Sun, 2020-08-16 15:45:10 [8fe1ceed03878c1305c87ea9f7e3630e826a487580538fc190a1e17d9e318ddf] root@fagus:~# borg info /home/quercus/backup/ Enter passphrase for key /home/quercus/backup: Repository ID: 8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec Location: /home/quercus/backup Encrypted: Yes (repokey) Cache: /root/.cache/borg/8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec Security dir: /root/.config/borg/security/8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size All archives: 2.71 GB 2.65 GB 2.32 GB Unique chunks Total chunks Chunk index: 18749 25990
En cas de problème
Quelques pistes si ça ne fonctionne pas :
- Vérifier les logs
admin@quercus:~$ ls -al /var/log/backup* -rw-r--r-- 1 root root 18317 Aug 13 00:01 /var/log/backup_borg.err -rw-r--r-- 1 root root 0 Aug 12 20:53 /var/log/backup_borg.log
Depuis la mi-mai 2021 et la version “1.1.16~ynh20”, les logs sont dans un sous-dossier :
root@artanux:/home/admin# ls -al /var/log/borg/ total 228 drwxr-xr-x 2 borg borg 4096 May 24 09:49 . drwxr-xr-x 25 root root 12288 May 24 00:00 .. -rw-r--r-- 1 root root 13517 May 15 00:06 210515_0000.err -rw-r--r-- 1 root root 7326 May 15 00:06 210515_0000.log (...)
- Vérifier les erreurs données au lancement du service
# systemctl status --lines 100 borg ● borg.service - Run backup borg Loaded: loaded (/etc/systemd/system/borg.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2020-08-13 00:01:16 UTC; 9h ago Main PID: 31654 (code=exited, status=1/FAILURE) Aug 13 00:00:03 quercus systemd[1]: Starting Run backup borg... Aug 13 00:00:05 quercus backup-with-borg[31654]: ls: cannot access '/etc/yunohost/hooks.d/backup/': Aug 13 00:00:07 quercus slapcat[31880]: DIGEST-MD5 common mech free
- Vérifier qu'on a pas fait d'erreur dans les clés SSH (mauvais copier/coller, etc…)
Problèmes rencontrés
Problèmes de clés SSH
Comme je sauvegarde Fagus sur Quercus et inversement, je me suis un peu emmêlé avec les clés SSH… Il faut penser à vérifier que la clé publique du client corresponde à ce qui est dans authorized_keys sur le serveur :
root@quercus:~# ls -al /root/.ssh/ total 20 drwx------ 2 root root 4096 Aug 12 20:53 . drwx------ 5 root root 4096 Aug 14 07:40 .. -rw------- 1 root root 0 Aug 8 09:15 authorized_keys -rw------- 1 root root 411 Aug 12 19:37 id_borg_ed25519 -rw-r--r-- 1 root root 101 Aug 12 19:37 id_borg_ed25519.pub -rw-r--r-- 1 root root 444 Aug 12 20:53 known_hosts
root@fagus:~# ls -al /home/quercus/.ssh/authorized_keys -rw-r--r-- 1 root root 264 Aug 12 21:12 /home/quercus/.ssh/authorized_keys
Problèmes pour lancer borg sur le serveur
root@fagus:~# tail -f -n 20 /var/log/backup_borg.err Remote: Remote: Remote: Server : 465812 Remote: IPv4 : WW.XX.YY.ZZ Remote: IPv6 : WWWW:XXXX:YYYY:ZZZZ Remote: Hostname : machin.com Remote: Remote: bash: /usr/local/bin/borg: Permission denied Connection closed by remote host. Is borg working on the server?
Borg ne peut pas être lancé par l'utilisateur quercus
sur le serveur fagus
.
root@fagus:~# sudo -u quercus borg --help sudo: unable to execute /usr/local/bin/borg: Permission denied
La solution consiste à vérifier les droits pour lancer Borg sur le serveur fagus
:
root@fagus:~# ls -al /usr/local/bin/borg -rwxr--r-- 1 root staff 69 Aug 10 14:03 /usr/local/bin/borg root@fagus:~# chmod 755 /usr/local/bin/borg
Une fois les droits réglés, ça marche correctement!
Problème de passphrase incomplète
Ma passphrase, générée automatiquement par bitwarden, contenait “$texte*”, qui a été interprété comme une variable vide. Un bout de la passphrase a donc disparu.
J'ai ajouté mon expérience sur cette issue Github.
Le problème se situe dans le fichier suivant :
# cat /etc/yunohost/hooks.d/backup_method/05-borg_app (...) BORG_PASSPHRASE="RGjauGbbg6d$jj77g*piabfbfGedE" (...)
(La passphrase a été changée évidemment!)
La passphrase utilisée réellement pour chiffrer le backup, dans ce cas-ci : RGjauGbbg6d*piabfbfGedE
Changement de port SSH
Je recevais pas mal d'alertes de fail2ban à propos de tentative pour se connecter à SSH depuis le port standard. J'ai donc changé le port SSH sur mes serveurs (en changeant dans le fichier /etc/ssh/sshd_config
).
Évidemment, ça pète la configuration Borg et celui-ci n'arrive plus à se connecter au serveur distant.
Il y a deux lignes à changer dans le fichier
# cat /etc/yunohost/hooks.d/backup_method/05-borg_app | grep ssh if ssh-keygen -F "monserveur.com" >/dev/null ; then BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=no "
Il faut ajouter l'information pour qu'il utilise le bon port :
# vim /etc/yunohost/hooks.d/backup_method/05-borg_app BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -p 1234 -oStrictHostKeyChecking=yes " BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -p 1234 -oStrictHostKeyChecking=no "
(1234
est un exemple de port, ce n'est pas celui que j'utilise.)
Il faut que je remonte ce bug sur le github du projet.