====== Sauvegarder Yunohost ======
===== À l'aide des applications Borg =====
Une des solution pour sauvegarder votre serveur consiste à utiliser les applications [[informatique:borg]]
{{ :informatique:yunohost:capture_d_ecran_du_2020-08-12_21-33-29-borg01.png?400 |}}
Cette solution consiste à sauvegarder son serveur [[informatique:yunohost]] sur un autre serveur yunohost. Il y a donc deux applications, une application "client" ( [[https://yunohost.org/#/app_borg|Borg Backup App]] ) et une application "serveur" ( [[https://yunohost.org/#/app_borgserver|Borg Server]] ).
[[https://yunohost.org/#/app_borgserver|Borg Server]] a besoin d'un clé publique générée à l'installation de [[https://yunohost.org/#/app_borg|Borg Backup App]]. On commence donc par installer l'application cliente.
Dans mon exemple, je vais sauvegarder le serveur [[informatique:vps:quercus]] sur [[informatique:vps:fagus]].
==== Installation de Borg Backup App ====
J'installe l'application cliente, [[https://yunohost.org/#/app_borg|Borg Backup App]], sur [[informatique:vps: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 [[informatique:vps: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, [[informatique:vps:quercus]].
* Choisir une phrase de passe pour chiffrer les sauvegardes (important!)
* Choisir enfin ce que l'on souhaite sauvegarder et à quelle fréquence
{{ :informatique:yunohost:screenshot_2020-08-12_yunohost_admin.png?400 |}}
Une paire de clé [[informatique: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 [[https://yunohost.org/#/app_borgserver|Borg Server]], sur [[informatique:vps: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
{{ :informatique:yunohost:screenshot_2020-08-12_yunohost_admin_1_.png?400 |}}
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 [[https://yunohost.org/#/app_borg|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 [[https://github.com/YunoHost-Apps/borg_ynh/issues/49|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.