Sauvegarde Yunohost avec restic

Cool thread. I just discovered Restic too. Seems easier to use for me compared to Borg. I’m also going to investigate how to use this.

Salut @bleeh, est-ce que tu prévois d’intégrer les sauvegardes locales à ton paquet ? J’ai une sauvegarde distante avec Restic qui marche très bien, j’aimerais bien pouvoir l’utiliser aussi en local.

Bonjour,

Je souhaitais me servir de Restic pour faire des sauvegardes locales. J’ai donc tester lors de l’installation de Restic pour Ynh de mettre en serveur source ainsi qu’en serveur cible le même serveur. J’ai bien créer un dossier, accordé les droits, ajouter la clé SSH.
A l’heure prévu du lancement de restic je reçois un mail sur l’adresse root. Ce mail est vide et avec comme objet " YunoHost Restic backup log on serveur.fr (SUCCESS)". Lorsque je vais voir dans le dossier sensé contenir la sauvegarde il y a juste un dossier vide “Lost+found” qui est apparu… Il doit donc y avoir un problème quelque part…

Serait-il possible d’avoir un petit coup de main soit pour corriger ce soucis ou pour plus simplement arriver à faire une backup locale ?

Merci à vous !

Salut, visiblement cette question de sauvegarde locale intéresse un peu de monde alors je vais essayer d’y jeter un oeil.

@tomdereub Ce qui est sûr c’est que pour l’instant avoir plusieurs instances de l’appli ne fonctionne pas comme ça devrait donc évite pour l’instant d’en ajouter une à celle qui fonctionne

@Sty_X effectivement utiliser le serveur ssh local comme destination devrait être un contournement valable. Il faudrait voir les journaux du service restic pour en savoir plus. Il faudrait que je teste pour être sûr de ne pas te dire de bêtise.

Salut bleeh,

Ca serait vraiment vraiment top !!! Merci à toi !

@Sty_X
Je viens de tester la sauvegarde ssh “locale” en définissant les paramètres suivants (entre autres):

apps: all
backup_path: localbackups
conf: '1'
data: '1'
passphrase: Un mot de passe.
port: '22'
server: localhost
ssh_user: vagrant

Puis j’ai autorisé la clé ssh affichée à la fin de l’installation pour l’utilisateur vagrant

echo "ssh-ed25519 <laclesshpublique> root@<ledomaine>" >> /home/vagrant/.ssh/authorized_keys

J’ai lancé un backup en surveillant les fichiers de log

sudo systemctl start restic
# dans deux shells différents
sudo journalctl -f -u restic.service
tail -f /var/log/restic_backup.*

Tout s’est bien passé et j’ai pu aller vérifier les backups en me connectant en tant que vagrant:

$ ls -l localbackups/
total 16
drwxr-xr-x 7 vagrant vagrant 4096 Feb 27 20:28 auto_conf
drwxr-xr-x 7 vagrant vagrant 4096 Feb 27 20:28 auto_data
drwxr-xr-x 7 vagrant vagrant 4096 Feb 27 20:29 auto_my_webapp
drwxr-xr-x 7 vagrant vagrant 4096 Feb 27 20:29 auto_restic
$ export RESTIC_PASSWORD='Un mot de passe.'
$ restic -r localbackups/auto_conf/ snapshots
repository 84fb71b0 opened successfully, password is correct
created new cache in /home/vagrant/.cache/restic
ID        Time                 Host            Tags        Paths
----------------------------------------------------------------------------------------------
fcf365d7  2021-02-27 20:28:48  yunohost.local              /home/yunohost.backup/tmp/auto_conf
----------------------------------------------------------------------------------------------
1 snapshots

Donc il faudrait voir pourquoi ça ne fonctionne pas pour toi.
Vérifie que tu as bien autorisé la clé ssh pour le bon utilisateur et surveille les logs comme j’ai fait et partage les erreurs que tu voies.

PS: J’ai installé la version 0.12, j’ai mis le paquet à jour la semaine dernière.

@tomdereub Je vais déjà corriger le bug avec le multi-instance, ce qui te permettra d’ajouter une instance de restic avec le serveur ssh local en destination en attendant que je m’attaque véritablement à la sauvegarde locale, qui va prendre plus de temps et de toute façon nécessite que le multi-instance fonctionne correctement.

@bleeh Salut et merci !

Alors voila ce que ça donne pour moi. J’ai désinstallé restric puis réinstallé avec les paramètres suivants (car je ne sais pas comment modifier ces paramètres à posteriori…) :

root@kanakodou: yunohost app install restic
Indicate the server where you want put your backups: localhost
sftp port of your server (default: 22): 22
The directory where you want your backup repositories to be created in (default: .): /SSD_Backup
Indicate the ssh user to use to connect on this server: Red
Indicate a strong passphrase, that you will keep preciously if you want to be able to use your backups: 
Would you like to backup your YunoHost configuration ? [yes | no] (default: yes): yes
Would you like to backup mails and user home directory ? [yes | no] (default: yes): yes
Which apps would you backup (list separated by comma or 'all') ? (default: all): all
Allow backup method to temporarily use more space? [yes | no] (default: yes): yes
Indicate the backup frequency (see systemd OnCalendar format) (default: *-*-* 0:15:00): *-*-* 4:00:00            
Indicate the backup check frequency (see systemd OnCalendar format) (default: Sat *-*-8..31 3:15:00): Sat *-*-8..31 5:00:00        
Indicate the complete backup check frequency (see systemd OnCalendar format) (default: Sat *-*-1..7 3:15:00): Sat *-*-1..7 5:00:00

Ensuite j’ajoute bien la clé ssh indiquée en fin d’installation au fichier /home/Red/.ssh/authorized_keys

Je lance une backup avec la commande
sudo systemctl start restic

Voila ce que me retourne la commande

root@kanakodou: sudo journalctl -f -u restic.service
-- Logs begin at Fri 2021-02-26 15:27:25 CET. --
Feb 28 18:07:18 kanakodou.fr backup-with-restic[374]: Échec de l’exécution du script : /etc/yunohost/hooks.d/backup_method/05-restic_app
Feb 28 18:07:19kanakodou.fr backup-with-restic[374]: subprocess ssh: Warning: Permanently added '[localhost]:22' (ECDSA) to the list of known hosts.
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: subprocess ssh: Debian GNU/Linux 10
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: Fatal: unable to open config file: Lstat: file does not exist
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: Is there a repository at the following location?
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: sftp://Red@localhost:22//SSD_Backup//auto_vpnclient
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: Échec de l’exécution du script : /etc/yunohost/hooks.d/backup_method/05-restic_app
Feb 28 18:07:19 kanakodou.fr backup-with-restic[374]: Échec de la méthode de sauvegarde personnalisée à l’étape 'backup'
Feb 28 18:07:19 kanakodou.fr systemd[1]: restic.service: Succeeded.
Feb 28 18:07:19 kanakodou.fr systemd[1]: Started Run backup restic.

Et la commande

Red@kanakodou:~$ tail -f /var/log/restic_backup.*
==> /var/log/restic_backup.err <==
sftp://Red@localhost:22//SSD_Backup//auto_vpnclient
subprocess ssh: Warning: Permanently added '[localhost]:22' (ECDSA) to the list of known hosts.
subprocess ssh: Debian GNU/Linux 10
Fatal: create repository at sftp://Red@localhost:22//SSD_Backup//auto_vpnclient failed: sftp: "Permission denied" (SSH_FX_PERMISSION_DENIED)

subprocess ssh: Warning: Permanently added '[localhost]:22' (ECDSA) to the list of known hosts.
subprocess ssh: Debian GNU/Linux 10
Fatal: unable to open config file: Lstat: file does not exist
Is there a repository at the following location?
sftp://Red@localhost:22//SSD_Backup//auto_vpnclient

==> /var/log/restic_backup.log <==

Le fichier /var/log/restic_backup.log est vide mais le fichier /var/log/restic_backup.err contient le même contenu que ce que me retourne tail -f /var/log/restic_backup.* mais avec un même pas seulement pour “auto_vpnclient” mais pour chaque app et data.

Le dossier /SSD_Backup est vide.

Je dois surement faire une connerie quelque part…

Merci pour ton aide !

(PS : question de sécurité j’ai changé le nom du serveur, de l’utilisateur et du port).

Ok, deux choses à vérifier:

  1. Les permissions sur le répertoire de destination.
    L’utilisateur Red a bien le droit d’écrire dans /SSD_Backup? un sudo -u Red touch /SSD_Backup/test fonctionne?
  2. L’autorisation de la clé SSH.
    Si tu te mets en root et que tu essaies une connexion ssh, ça fonctionne?:
sudo -i
ssh Red@localhost -i /root/.ssh/id_restic_ed25519

@bleeh Top ! Ça à l’air d’avoir fonctionné ! C’était bien un soucis d’accès au dossier /SSD_Backup… Pourtant il me semblait avoir définis Red en tant que propriétaire du dossier.

Merci beaucoup à toi pour ton aide !

Il me reste deux petites questions :

  • Ne faudrait-il pas exclure le dossier /SSD_Backup du processus de backup ? Pour ne pas faire des backup de backup.

  • Y’a-t-il une compression lors des backups ? Car la taille du dossier de backup est inférieure à la taille totale de ce qui “doit” être sauvegardé. Voila les log : Bin.InFini - Transmettez des messages chiffrés Le dossier /home ou alors le dossier /home/yunohost.app/nextcloud/data ne semblent pas pris en compte ?

Merci !

Ce paquet offre une méthode de sauvegarde supplémentaire pour YunoHost, il fait donc des sauvegardes des composants YunoHost, à aucun moment il sauvegarde les éléments du système étrangers à YNH, tels qu’un répertoire quelconque à la racine comme celui que tu cites. Je te laisse aller voir dans la doc de YNH pour les chemins exacts sauvegardés.

Restic ne fait aucune compression pour l’instant, il me semble qu’il ya de la déduplication cependant mais concernant le cas de nextcloud, vérifie s’il n’y a pas une option quelque part qui dit à YNH de ne pas sauvegarder les data de l’application.

J’ai essayé d’accéder à la page de la doc mais il semble y avoir un souci sur l’infra YNH, j’ai une erreur 403, en revanche tu peux retrouver des infos dans ce post du forum: [Resolu]Sauvegarde Nextcloud.

Note qu’une fois que le paquet est installé, l’application restic reste disponible au système, donc libre à toi de l’utiliser pour sauvegarder ce que tu veux comme tu veux avec.

Je te laisse voir la doc pour savoir comment t’en servir.

@tomdereub J’ai mis à jour le paquet, le multi-instance fonctionne bien maintenant. Tu peux ajouter une instance qui fera un backup vers le serveur sftp local.

Ok, je vais essayer de tester quand je trouve le temps. Mais je suis plus intéressé par une sauvegarde locale directe, si tu arrives à l’intégrer au paquet, ça me semble un peu surdimensionné de passer par du sftp pour aller sur un disque local (même si je comprends bien l’idée de ce workaround pour le moment).

Salut @bleeh, je viens de faire un essai de backup local avec une 2ème instance de restic.
Ça a l’air de fonctionner, par contre ça ne backup pas les apps, alors que j’avais bien laissé “all” lors de l’installation :

conf_cron: Success
conf_ldap: Success
conf_mail: Success
conf_nginx: Success
conf_ssh: Success
conf_ssowat: Success
conf_xmpp: Success
conf_ynh_certs: Success
conf_ynh_currenthost: Success
conf_ynh_dyndns: Success
conf_ynh_firewall: Success
data_home: Success
data_mail: Success

Et étonnamment, les apps ne sont plus backupées non plus par mon backup distant, alors qu’il le faisait avant.
-» Edit : j’ai ça dans les logs : lamo backup-with-restic__2[14989]: ls: impossible d'accéder à '/etc/yunohost/apps/*/scripts/backup': Permission non accordée

Ça m’a permis de me rendre compte d’un autre problème : sur mon backup distant, qui est configuré depuis presque 1 an, il ne sauvegarde pas data_home et data_mail (pourquoi ?), et il ne sauvegarde pas toutes les apps, il manque nextcloud et je n’ai qu’une instance de wordpress sur 5.
Et est-ce qu’on peut aller voir et modifier à la main ce qui est sauvegardé par chaque instance ? Si oui, où ?
Merci !

Salut, effectivement je ne vois plus les applications dans l’e-mail de récapitulation et j’ai vérifié sur le serveur de destination il ne semble plus y avoir de sauvegarde des applications depuis que j’ai fait la mise à jour, je vérifie ça.

EDIT: J’ai trouvé d’ou vient le problème, en fait c’est une autre mise à jour que j’ai faite après le multi-instance qui a cassé le listing des apps, je tâche de trouver un moment dans la journée pour corriger.

Sinon pour voir la liste d’applications à sauvegarder, de mémoire c’est yunohost app setting restic apps (ou restic__2, faut mettre le nom de l’instance)

C’est corrigé et j’ai ajouté quelques commandes dans le readme (visible sur le projet github, faudrait que je voie comment créer la doc sur le site YNH), notamment comment lancer manuellement une vérification des sauvegardes et comment lister les applications qui seront sauvegardées.

Dans tous les cas quand il faut débugger, lance une sauvegarde (systemctl start restic - ou restic__2 ou autre selon le nom de l’instance) et vérifie le journal dans le même temps à partir d’un autre shell (journalctl -f -u restic - ou restic__2 ou autre blah blah blah…)

Merci, ça a l’air de marcher, mon backup local est en cours depuis ce matin (pas mal de données sur Nextcloud, ça prend du temps !).
Une idée pour les mails qui sont envoyés à chaque backup : est-ce qu’il serait possible d’indiquer ce qui n’est pas sauvegardé par le backup ? Actuellement il met tout ce qui est sauvegardé avec “success” si le backup a fonctionné, ça serait pas mal de mettre en bas tous les éléments non sauvegardés. Ça m’aurait permis de me rendre compte plus tôt que nextcloud n’était plus sauvegardé par exemple, ou que je n’avais qu’un wordpress de sauvegardé sur les 5 que j’ai.

Oui je sais c’est moyen, mais la c’est particulier, ce n’est pas la sauvegarde qui a merdé, c’était un problème de permissions pour une commande de listage des applications.
Je vais quand même réfléchir à ce problème.