serveurs:installation:bkp-srv:install-borg

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 13:41] – [Initialiser des dépôts] jpmilcentserveurs:installation:bkp-srv:install-borg [2026/08/11 10:31] (Version actuelle) – [Restaurer une sauvegarde] jpmilcent
Ligne 28: Ligne 28:
   * 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 ====
Ligne 84: Ligne 85:
     * 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>
Ligne 121: Ligne 122:
   * Générer en local un UUID pour la //passphrase// de la clé de cryptage des dépôts local et distant de l'instance concernée : ''uuid''   * Générer en local un UUID pour la //passphrase// de la clé de cryptage des dépôts local et distant de l'instance concernée : ''uuid''
     * Stocker cette //passphrase// dans Keepass     * Stocker cette //passphrase// dans Keepass
 +  * Sur l'instance //bkp-srv//, en tant qu'utilisateur ''backups'', créer le dossier qui contiendra les dépôts : ''sudo -i ; su - backups ; mkdir ~/<instance>-srv''
   * Se connecter à l'instance concernée : '' ssh admin@<instance>-<region>-sinp ''   * Se connecter à l'instance concernée : '' ssh admin@<instance>-<region>-sinp ''
     * Modifier le fichier //~/docker/borgmatic/.env// de l'instance en ajoutant sa //passphrase// comme valeur du paramètre ''BORG_PASSPHRASE'' : ''vi ~/docker/borgmatic/.env''     * Modifier le fichier //~/docker/borgmatic/.env// de l'instance en ajoutant sa //passphrase// comme valeur du paramètre ''BORG_PASSPHRASE'' : ''vi ~/docker/borgmatic/.env''
Ligne 168: Ligne 170:
  
 === 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>''
Ligne 229: Ligne 231:
  
 === 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]]
  
Ligne 242: Ligne 244:
     * //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]]
  
Ligne 264: Ligne 266:
     * 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 ====
Ligne 323: Ligne 327:
   * 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>
  • serveurs/installation/bkp-srv/install-borg.1692366099.txt.gz
  • Dernière modification : 2023/08/18 13:41
  • de jpmilcent