| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| serveurs:installation:bkp-srv:install-borg [2023/08/18 14:02] – [Initialiser des dépôts] jpmilcent | serveurs:installation:bkp-srv:install-borg [2026/08/11 10:31] (Version actuelle) – [Restaurer une sauvegarde] jpmilcent |
|---|
| * Passer en root : '' sudo -i '' | * Passer en root : '' sudo -i '' |
| * En tant que //root//, installer les paquets système nécessaire : | * En tant que //root//, installer les paquets système nécessaire : |
| * Debian 11 avec Pyfuse3 : '' apt install python3 python3-pip python3-virtualenv python3-pip openssl libssl-dev libacl1-dev libacl1 build-essential libfuse3-dev fuse3 pkg-config '' | * Debian 11/12 avec Pyfuse3 : '' apt install python3 python3-pip python3-virtualenv openssl libssl-dev libacl1-dev libacl1 build-essential pkg-config fuse3 libfuse3-dev'' |
| * Debian 10 avec llfuse: '' apt install python3 python3-pip python3-virtualenv openssl libssl-dev libacl1-dev libacl1 build-essential fuse libfuse-dev pkg-config '' | * Debian 10 avec llfuse: '' apt install python3 python3-pip python3-virtualenv openssl libssl-dev libacl1-dev libacl1 build-essential pkg-config fuse libfuse-dev '' |
| * En tant que //backups// (ou //root//), installer l'environnement virtuel : ''<nowiki> virtualenv --python=python3 borg-env </nowiki>'' | * En tant que //backups// (ou //root//), installer l'environnement virtuel : ''<nowiki> virtualenv --python=python3 borg-env </nowiki>'' |
| * Activer l'environnement : '' source borg-env/bin/activate '' | * Activer l'environnement : '' source borg-env/bin/activate '' |
| * Installer les dépendances : '' pip install -U pip setuptools wheel '' | * Installer les dépendances : '' pip install -U pip setuptools wheel '' |
| * Installer Borg Backup avec le support pour Fuse, si le container utilise : | * Installer Borg Backup avec le support pour Fuse, si le container utilise : |
| * Debian 11 avec pyfuse3 : '' pip install borgbackup[pyfuse3] '' | * Debian 11/12 avec pyfuse3 : '' pip install borgbackup[pyfuse3] '' |
| * Debian 10 avec llfuse : '' pip install borgbackup[llfuse] '' | * Debian 10 avec llfuse : '' pip install borgbackup[llfuse] '' |
| | * Sortir de l'environnement virtuel : ''deactivate'' |
| * **Notes** : il peut être intéressant d'installer //borg// sur l'utilisateur //root// afin de pouvoir accéder au dossier accessible uniquement par //root// sur le dépôt "db-srv". C'est le cas des fichiers de sauvegarde des bases de données. | * **Notes** : il peut être intéressant d'installer //borg// sur l'utilisateur //root// afin de pouvoir accéder au dossier accessible uniquement par //root// sur le dépôt "db-srv". C'est le cas des fichiers de sauvegarde des bases de données. |
| ==== Accéder à Borg sans activer l'environnement virtuel ==== | ==== Accéder à Borg sans activer l'environnement virtuel ==== |
| * Ajouter la clé publique de l'instance à sauvegarder au fichier ///home/backups/.ssh/authorized_keys// de l'utilisateur //backups// : ''<nowiki> cat /home/geonat/.ssh/id_rsa.<instance>-srv.pub >> /home/backups/.ssh/authorized_keys </nowiki>'' | * Ajouter la clé publique de l'instance à sauvegarder au fichier ///home/backups/.ssh/authorized_keys// de l'utilisateur //backups// : ''<nowiki> cat /home/geonat/.ssh/id_rsa.<instance>-srv.pub >> /home/backups/.ssh/authorized_keys </nowiki>'' |
| * Tester la connexion SSH depuis un shell de l'utilisateur //admin// de l'instance à sauvegarder, aucun mot de passe ne doit être demandé : '' ssh -p <port-ssh-bkp-srv> backups@bkp-<region>-sinp '' | * Tester la connexion SSH depuis un shell de l'utilisateur //admin// de l'instance à sauvegarder, aucun mot de passe ne doit être demandé : '' ssh -p <port-ssh-bkp-srv> backups@bkp-<region>-sinp '' |
| * Si la tentative de connexion s'est déroulé sans demande de mot de passe et avec succès, supprimer le fichier de la clé public de l'instance : ''rm -f /home/geonat/.ssh/id_rsa.<instance>-srv.pub '' | * Si la tentative de connexion s'est déroulé sans demande de mot de passe et avec succès, supprimer le fichier de la clé public de l'instance : ''%%rm -f /home/geonat/.ssh/id_rsa.<instance>-srv.pub%%'' |
| * Sur l'instance à sauvegarder et pour l'utilisateur admin, créer un fichier config qui contiendra un paramètre maintenant la connexion SSH : '' touch ~/.ssh/config; chmod 644 ~/.ssh/config ; vi ~/.ssh/config '' | * Sur l'instance à sauvegarder et pour l'utilisateur admin, créer un fichier config qui contiendra un paramètre maintenant la connexion SSH : '' touch ~/.ssh/config; chmod 644 ~/.ssh/config ; vi ~/.ssh/config '' |
| * Y ajouter le contenu suivant : <code properties> | * Y ajouter le contenu suivant : <code properties> |
| |
| === Tester Borgmatic === | === Tester Borgmatic === |
| * Tester les fichiers de configuration de //Borgmatic// avec : '' validate-borgmatic-config '' | * Tester les fichiers de configuration de //Borgmatic// avec : ''borgmatic config validate'' (anciennement '' validate-borgmatic-config '') |
| * **ATTENTION** : il est maintenant nécessaire d'initialiser les dépôts avant de lancer la commande de test ci-dessous. Voir la section "Initialisation des dépôts". | * **ATTENTION** : il est maintenant nécessaire d'initialiser les dépôts avant de lancer la commande de test ci-dessous. Voir la section "Initialisation des dépôts". |
| * Tester une sauvegarde manuellement pour vérifier que tout fonctionne : ''<nowiki> borgmatic --verbosity 2 --stats --files </nowiki>'' | * Tester une sauvegarde manuellement pour vérifier que tout fonctionne : ''<nowiki> borgmatic --verbosity 2 --stats --files </nowiki>'' |
| |
| === Préparer la restauration === | === Préparer la restauration === |
| * Se connecter à l'instance concernée : '' ssh admin@<instance>-<region>-sinp '' | * Se connecter à l'instance concernée : ''%%ssh admin@<instance>-<region>-sinp%%'' |
| * Se placer dans le dossier //~/docker/borgomatic// avec : '' cd ~/docker/borgomatic '' | * Se placer dans le dossier //~/docker/borgomatic// avec : ''%%cd ~/docker/borgomatic%%'' |
| * Arrêter le container de sauvegarde : ''docker compose down '' | * Arrêter le container de sauvegarde : ''%%docker compose down%%'' |
| * Sur l'hôte, créer un dossier temporaire qui contiendra les fichiers ou dossier à restaurer : '' sudo rm -fR /tmp/restore ; mkdir /tmp/restore '' | * Sur l'hôte, créer un dossier temporaire qui contiendra les fichiers ou dossier à restaurer : ''%%sudo rm -fR /tmp/restore ; mkdir /tmp/restore%%'' |
| * Lancer un shell interactif avec le dossier précédemment créé lié à l'hôte : '' docker compose -f docker-compose.yml -f docker-compose.restore.yml run -v /tmp/restore:/tmp/restore borgmatic '' | * Lancer un shell interactif avec le dossier précédemment créé lié à l'hôte : ''%%docker compose -f docker-compose.yml -f docker-compose.restore.yml run -v /tmp/restore:/tmp/restore borgmatic%%'' |
| * Vous pouvez alors utiliser les commandes [[https://torsion.org/borgmatic/docs/reference/command-line/| borgmatic]] ou [[https://borgbackup.readthedocs.io/en/stable/usage/general.html| Borg]] | * Vous pouvez alors utiliser les commandes [[https://torsion.org/borgmatic/docs/reference/command-line/| borgmatic]] ou [[https://borgbackup.readthedocs.io/en/stable/usage/general.html| Borg]] |
| |
| * //web-srv// : ''borg list /home/backups/web-srv'' | * //web-srv// : ''borg list /home/backups/web-srv'' |
| * Créer un dossier : | * Créer un dossier : |
| * pour le point de montage du dépôt Borg : '' mkdir /tmp/repo '' | * pour le point de montage du dépôt Borg : ''%%mkdir /tmp/repo%%'' |
| * pour le dossier qui contiendra les fichiers à restaurer : '' mkdir /tmp/restore '' | * pour le dossier qui contiendra les fichiers à restaurer : ''%%mkdir /tmp/restore%%'' |
| * Utiliser Fuse pour monter la sauvegarde sur le dossier du point de montage ///tmp/repo//: '' borg mount <repo> /tmp/repo '' | * Utiliser Fuse pour monter la sauvegarde sur le dossier du point de montage ///tmp/repo//: ''%%borg mount <repo> /tmp/repo%%'' |
| * Ex. avec le dépôt local : '' borg mount /home/backups/db-srv /tmp/repo '' | * Ex. avec le dépôt local : ''%%borg mount /home/backups/db-srv /tmp/repo%%'' |
| * Le dossier ///tmp/repo// contient les dossiers des différentes sauvegardes. Ex. de dossier sauvegardé le 17 mai 2021 à 13h57 : '' web-srv-2021-05-17T13:57:02 '' | * Le dossier ///tmp/repo// contient les dossiers des différentes sauvegardes. Ex. de dossier sauvegardé le 17 mai 2021 à 13h57 : ''%%web-srv-2021-05-17T13:57:02%%'' |
| * Copier les fichiers à restaurer sur l'hôte en les copiant depuis le point de montage vers le dossier lié l'hôte : | * Copier les fichiers à restaurer sur l'hôte en les copiant depuis le point de montage vers le dossier lié l'hôte : |
| * Ex. pour //web-srv// : '' cp -r "/tmp/repo/web-srv-2021-05-17T13:57:02/mnt/source/etc/cron.d/" /tmp/restore/ '' | * Ex. pour //web-srv// : ''%%cp -r "/tmp/repo/web-srv-2021-05-17T13:57:02/mnt/source/etc/cron.d/" /tmp/restore/$(date +'%Y-%m-%d')_gnatlas.custom%%'' |
| * Ex. pour //db-srv// : '' cp -r /tmp/repo/db-srv-2022-04-08T01\:07\:55/root/.borgmatic/postgresql_databases/172.18.5.1/geonature2db /tmp/restore/ '' | * Ex. pour //db-srv// : ''%%cp -r /tmp/repo/db-srv-2022-04-08T01\:07\:55/root/.borgmatic/postgresql_databases/172.18.5.1/geonature2db /tmp/restore/$(date +'%Y-%m-%d')_geonature2db.custom%%'' |
| * Vérifier las présence des fichiers à restaurer : ''ls -al /tmp/restore '' | * Vérifier las présence des fichiers à restaurer : ''%%ls -al /tmp/restore/%%'' |
| * Donner les droits d'accès à l'utilisateur admin : ''chmod 644 /tmp/restore/geonature2db'' | * Donner les droits d'accès à l'utilisateur admin : ''%%chmod 644 /tmp/restore/*.custom%%'' |
| * Démonter le point de montage et quitter le shell interactif : '' borg umount /tmp/repo && exit '' | * Démonter le point de montage et quitter le shell interactif : ''%%borg umount /tmp/repo%%'' |
| * Récupérer sur votre machine locale l'archive de base de données : ''scp admin@bkp-aura-sinp:/tmp/restore/geonature2db ./2022-04-08_geonature2db.custom'' | * Récupérer sur votre machine locale l'archive de base de données : ''%%scp admin@bkp-<region>-sinp:/tmp/restore/*.custom ./%%'' |
| * Voir [[serveurs:installation:db-srv:postgresql-config#restaurer_localement_un_dump_de_la_base_du_serveur| la restauration en local d'une base serveur]] | * Voir [[serveurs:installation:db-srv:postgresql-config#restaurer_localement_un_dump_de_la_base_du_serveur| la restauration en local d'une base serveur]] |
| |
| * Ex. : ''<nowiki> borgmatic extract --repository /mnt/borg-repository --archive "web-srv-2021-05-17T13:57:02" --destination /tmp/restore </nowiki>'' | * Ex. : ''<nowiki> borgmatic extract --repository /mnt/borg-repository --archive "web-srv-2021-05-17T13:57:02" --destination /tmp/restore </nowiki>'' |
| * Pour extraire seulement un dossier de l'archive utiliser l'option ''<nowiki> --path </nowiki>'' avec le chemin du dossier sans slash au début. Ex. : ''<nowiki> borgmatic extract --repository /mnt/borg-repository --archive "web-srv-2021-05-17T13:57:02" --path "mnt/source/etc" --destination /tmp/restore </nowiki>'' | * Pour extraire seulement un dossier de l'archive utiliser l'option ''<nowiki> --path </nowiki>'' avec le chemin du dossier sans slash au début. Ex. : ''<nowiki> borgmatic extract --repository /mnt/borg-repository --archive "web-srv-2021-05-17T13:57:02" --path "mnt/source/etc" --destination /tmp/restore </nowiki>'' |
| * Note concernant les bases de données : les fichiers ou dossiers des sauvegardes devraient se trouver dans ''/tmp/restore/root/.borgmatic/postgresql_databases/172.18.0.1/geonature2db'' (si le dossier d'extraction est ''/tmp/restore/'') | * Note concernant la localisation des éléments sauvegardés dans le dossier d'extraction ''/tmp/restore/'' (si le dossier d'extraction est ''/tmp/restore/'') : |
| | * les fichier ou dossiers systèmes sauvegardés se trouvent dans ''/tmp/restore/mnt/...'' |
| | * les sauvegardes des bases de données se trouvent dans ''/tmp/restore/root/.borgmatic/postgresql_databases/172.18.0.1/..'' |
| * Quitter le container : ''exit'' | * Quitter le container : ''exit'' |
| |
| === Écraser les fichiers à restaurer par ceux provenant de la sauvegarde sur l'hôte === | === Écraser les fichiers à restaurer par ceux provenant de la sauvegarde sur l'hôte === |
| * Sur l'hôte, écraser les fichiers à restaurer par ceux provenant de la sauvegarde : '' sudo cp -r /tmp/restore/cron.d/ /etc/ '' | * Sur l'hôte, écraser les fichiers à restaurer par ceux provenant de la sauvegarde : ''%%sudo cp -r /tmp/restore/cron.d/ /etc/%%'' |
| * Assurez vous que les dossiers et fichiers sont restaurés avec les bons droits d'accès et propriétaire | * Assurez vous que les dossiers et fichiers sont restaurés avec les bons droits d'accès et propriétaire |
| * Une fois les fichiers/dossiers restaurés vous pouvez supprimer le dossier de restauration et son contenu : '' rm -fR /tmp/restore '' | * Une fois les fichiers/dossiers restaurés vous pouvez supprimer le dossier de restauration et son contenu : ''%%rm -fR /tmp/restore%%'' |
| * **NOTE** : si nécessaire, il est possible de modifier le fichier //docker-compose.restore.yml// pour monter directement le volume source en écriture ''${VOLUME_SOURCE}:/mnt/source'' afin de remplacer les fichiers de l'hôte directement depuis le shell interactif. | * **NOTE** : si nécessaire, il est possible de modifier le fichier //docker-compose.restore.yml// pour monter directement le volume source en écriture ''%%${VOLUME_SOURCE}:/mnt/source%%'' afin de remplacer les fichiers de l'hôte directement depuis le shell interactif. |
| |
| === Restaurer une base de données avec Borgmatic === | === Restaurer une base de données avec Borgmatic === |
| * Lister les archives disponibles : '' borgmatic list '' | * Lister les archives disponibles : ''%%borgmatic list%%'' |
| * Restaurer une base de données directement. ATTENTION : Pour que cela fonctionne, il est nécessaire d'avoir utiliser une super utilisateur dans la config Borgmatic du dump des bases : <code bash> borgmatic restore --repository <repo> --archive <archive> --database <db-name> </code> | * Restaurer une base de données directement. ATTENTION : Pour que cela fonctionne, il est nécessaire d'avoir utiliser une super utilisateur dans la config Borgmatic du dump des bases : <code bash> borgmatic restore --repository <repo> --archive <archive> --database <db-name> </code> |
| * Ex. : <code bash> borgmatic restore --repository /mnt/borg-repository/ --archive "db-srv-2021-05-17T01:00:02" --database geonature2db </code> | * Ex. : <code bash> borgmatic restore --repository /mnt/borg-repository/ --archive "db-srv-2021-05-17T01:00:02" --database geonature2db </code> |
| * Si la commande échoue, récupérer dans la console la ligne de commande qui s'affiche, supprimer l'option ''<nowiki> --no-password </nowiki>'' et lancer la commande manuellement. Des erreurs plus détaillées s'afficheront. | * Si la commande échoue, récupérer dans la console la ligne de commande qui s'affiche, supprimer l'option ''%%--no-password%%'' et lancer la commande manuellement. Des erreurs plus détaillées s'afficheront. |
| * Quitter le container : ''exit'' | * Quitter le container : ''%%exit%%'' |
| |
| === Extraire l'archive de la base et la récupérer localement === | === Extraire l'archive de la base et la récupérer localement === |
| * Sur l'hôte, copier le fichier : ''sudo cp /tmp/restore/root/.borgmatic/postgresql_databases/172.18.0.1/geonature2db "/tmp/$(date +'%Y-%m-%d')_geonature2db.custom"'' | * Sur l'hôte, copier le fichier : ''%%sudo cp /tmp/restore/root/.borgmatic/postgresql_databases/172.18.0.1/geonature2db "/tmp/$(date +'%Y-%m-%d')_geonature2db.custom"%%'' |
| * Changer les droits : ''sudo chown admin: "/tmp/$(date +'%Y-%m-%d')_geonature2db.custom" '' | * Changer les droits : ''%%sudo chown admin: "/tmp/$(date +'%Y-%m-%d')_geonature2db.custom"%%'' |
| * Depuis votre machine locale récupérer l'archive : '' scp admin@db-<region>-sinp:/tmp/$(date +'%Y-%m-%d')_geonature2db.custom ./ '' | * Depuis votre machine locale récupérer l'archive : ''%%scp admin@db-<region>-sinp:/tmp/$(date +'%Y-%m-%d')_geonature2db.custom ./%%'' |
| |
| === Finaliser la restauration === | === Finaliser la restauration === |
| * Penser à relancer le service //Borgmatic// : '' docker compose up -d '' | * Penser à relancer le service //Borgmatic// : ''%%docker compose up -d%%'' |
| * Au cas ou //Borg// échoue à créer/acquérir un verrou : '' borg break-lock <repo> '' | * Au cas ou //Borg// échoue à créer/acquérir un verrou : ''%%borg break-lock <repo>%%'' |
| |
| ==== Cas particulier de la base GeoNature ==== | ==== Cas particulier de la base GeoNature ==== |
| * Lister le USER MAPPING : <code sql>SELECT um.*,rolname FROM pg_user_mapping um JOIN pg_roles r ON r.oid = umuser JOIN pg_foreign_server fs ON fs.oid = umserver; </code> | * Lister le USER MAPPING : <code sql>SELECT um.*,rolname FROM pg_user_mapping um JOIN pg_roles r ON r.oid = umuser JOIN pg_foreign_server fs ON fs.oid = umserver; </code> |
| * Sortir : ''exit'' | * Sortir : ''exit'' |
| ===== Borg commandes utiles ===== | ===== Borg/Borgmatic commandes utiles ===== |
| * Supprimer le cache : <code bash> borg delete --cache-only <repo> </code> | * Supprimer le cache : <code bash> borg delete --cache-only <repo> </code> |
| * Au cas ou Borg échoue à créer/acquérir un verrou : <code bash> borg break-lock <repo> </code> | * Au cas ou Borg échoue à créer/acquérir un verrou : <code bash> borg break-lock <repo> </code> |
| | * Notes : entrer dans le container Docker Borgmatic et lancer la commande sur les chemindes dépôts. Ex. : ''%%borg break-lock /mnt/borg-repository/%%'' ou ''%%borg break-lock ssh://<user>@<ip>:<port>/home/backups/db-srv/ %%'' (voir la valeur exacte dans le fichier de config ''vi /etc/borgmatic.d/config.yaml '') |
| | * Alternative avec Borgmatic qui enlève les verrous sur tous les dépôts configurés : <code bash>borgmatic break-lock</code> |
| | * Relancer une sauvegarde manuellement avec Borgmatic : <code bash>borgmatic --verbosity 2 --stats --files</code> |