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/07/04 08:34] – [Préparer la connexion SSH] jpmilcentserveurs:installation:bkp-srv:install-borg [2024/10/23 13:39] (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 98: Ligne 99:
 ==== Installer le container de sauvegarde ==== ==== Installer le container de sauvegarde ====
   * Au préalable, [[serveurs:installation:docker#copier_les_fichiers_docker-composeyml_depuis_le_depot_github_sinp-_region_-srv| mettre à jour les fichiers Docker pour l'instance concernée]].   * Au préalable, [[serveurs:installation:docker#copier_les_fichiers_docker-composeyml_depuis_le_depot_github_sinp-_region_-srv| mettre à jour les fichiers Docker pour l'instance concernée]].
-  * Se connecter à l'instance concernée '' ssh admin@<instance>-<region>-sinp '' +  * Réaliser [[serveurs:installation:docker-borgmatic| l'installation du container Docker Borgmatic]]
-  * Se placer dans le dossier //~/docker/borgomatic// avec '' cd ~/docker/borgomatic '' +
-  * Préparer la configuration de l'instance : +
-    * Configurer l'environnement (dossier SSH de l'utilisateur, Borg passphrase...) : '' cp ./.env.sample ./.env ; vi ./.env ; chmod 700 .env'' +
-    * Configurer les alias d'email utilisés par Msmtp : '' cp ./config/aliases.sample.txt ./config/aliases.txt ; vi ./config/aliases.txt '' +
-    * Configurer Borgomatic (dossiers/bases Postgresql à sauvegarder, dépôts où réaliser les sauvegardes...) : '' cp ./config/borgmatic.sample.yml ./config/borgmatic.yml ; chmod 700 ./config/borgmatic.yml ; vi ./config/borgmatic.yml '' +
-      * Pensez à sécuriser les éventuels scipts/fichiers de config utilisé dans la section //hooks// avec : '' chmod 700 <mon-fichier-de-config> '' +
-    * Configurer les notifications utilisant Ntfy : '' cp ./config/ntfy.sample.yml ./config/ntfy.yml ; vi ./config/ntfy.yml '' +
-  * Pour le premier lancement du container, afin d'afficher directement dans la console les logs, vous pouvez le lancer sans l'option ''-d'' avec : ''docker-compose up '' +
-    * Une fois que tout fonctionne, vous pouvez l’arrêter : ''CTRL+C '' +
-    * Puis le lancer en tant que service : '' docker-compose up -d '' +
- +
-=== Notes sur la configuration de Borgmatic === +
-  * Ne pas inclure le chemin '' /mnt/source/root/.borgmatic/ '' dans le paramètre ''exclude_patterns'' car c'est l'emplacement où sont sauvegardés les bases de données. +
-  * Ne pas utiliser le format ''directory'' au niveau de la sauvegarde des bases de données Postgresql. Il ne semble pas fonctionné car les archives sont toujours incomplètes. L'utilisation des options ''<nowiki>--compress 9 --jobs=2</nowiki>'' semble aussi poser problème.+
  
 ==== Préparer la sauvegarde des bases de données ==== ==== Préparer la sauvegarde des bases de données ====
Ligne 119: Ligne 106:
   * Il faut ensuite configurer l'accès aux bases à sauvegarder depuis l'IP du container Borgmatic. Le container créé a une IP privée au format //192.168.xxx.xxx//, nous ajoutons donc avec ''/16'' un ensemble d'IP privé qui devrait convenir dans la plupart des cas. Si nécessaire vérifier l'IP obtenu par votre container à l'aide de Portainer par exemple. Pour éditer la config de Postgresql  : ''vi pg_hba.conf''   * Il faut ensuite configurer l'accès aux bases à sauvegarder depuis l'IP du container Borgmatic. Le container créé a une IP privée au format //192.168.xxx.xxx//, nous ajoutons donc avec ''/16'' un ensemble d'IP privé qui devrait convenir dans la plupart des cas. Si nécessaire vérifier l'IP obtenu par votre container à l'aide de Portainer par exemple. Pour éditer la config de Postgresql  : ''vi pg_hba.conf''
     * Ajouter : <code properties>     * Ajouter : <code properties>
-host    geonature2db    geonatadmin     172.18.5.1/16           md5 +host    geonature2db    geonatadmin     172.18.5.1/16           scram-sha-256 
-host    gnatlas         geonatadmin     172.18.5.1/16           md5+host    gnatlas         geonatadmin     172.18.5.1/16           scram-sha-256
 # Voir s'il n'est pas possible d'utiliser l'utilisateur geonatadmin à la place de postgres... # Voir s'il n'est pas possible d'utiliser l'utilisateur geonatadmin à la place de postgres...
 host    gnatlas         postgres        172.18.5.1/16           trust host    gnatlas         postgres        172.18.5.1/16           trust
Ligne 135: 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''
   * Accéder au container //borgmatic// pour initialiser le dépôt de l'instance : '' docker exec -it borgmatic /bin/bash ''   * Accéder au container //borgmatic// pour initialiser le dépôt de l'instance : '' docker exec -it borgmatic /bin/bash ''
 +  * Établissez une première connexion au serveur du dépôt distant via SSH pour enregistrer le serveur distant : ''ssh -p <port-ssh-bkp-srv> backups@<bkp-srv-private-ip>''
   * À l'aide de //Borgmatic//, initialiser les dépôts de l'instance (présent dans le fichier de config de //Borgmatic//). Borgmatic se charge d’exécuter les commandes //Borg// : ''<nowiki> borgmatic init --encryption repokey-blake2 </nowiki>''   * À l'aide de //Borgmatic//, initialiser les dépôts de l'instance (présent dans le fichier de config de //Borgmatic//). Borgmatic se charge d’exécuter les commandes //Borg// : ''<nowiki> borgmatic init --encryption repokey-blake2 </nowiki>''
 +    * Si besoin, vous pouvez réinitialiser les dépôts en suivant la procédure "Réinitialiser un dépôt" décrite ci-dessous.
   * Pour voir les infos concernant un dépôt :    * Pour voir les infos concernant un dépôt : 
     * Dépôt de "db-srv" : ''<nowiki> borg info ssh://backups@10.0.1.30:<ssh-port-bkp-srv>/home/backups/db-srv/ </nowiki>''     * Dépôt de "db-srv" : ''<nowiki> borg info ssh://backups@10.0.1.30:<ssh-port-bkp-srv>/home/backups/db-srv/ </nowiki>''
Ligne 175: Ligne 165:
   * À l'email adminsys : '' echo "THIS IS A TEST EMAIL sended to adminsys at $(date "+%F %H:%M")" | mail -s "[${HOSTNAME}] Test email" adminsys@<domaine-sinp>  ''   * À l'email adminsys : '' echo "THIS IS A TEST EMAIL sended to adminsys at $(date "+%F %H:%M")" | mail -s "[${HOSTNAME}] Test email" adminsys@<domaine-sinp>  ''
   * À un utilisateur système //root// : '' echo "THIS IS A TEST EMAIL sended to root at $(date "+%F %H:%M")" | mail -s "[${HOSTNAME}] Test email" root ''   * À un utilisateur système //root// : '' echo "THIS IS A TEST EMAIL sended to root at $(date "+%F %H:%M")" | mail -s "[${HOSTNAME}] Test email" root ''
 +
 +=== Tester l'envoi de message Telegram ===
 +  * Envoyer un message : '' telegram-send "Test at `date`" ''
  
 === 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>''
- 
-=== Tester le dump Postgresql=== 
-  * Contexte : tester manuellement le dump lancé par Borgmatic dans le container. 
-  * Lancer le dump. Ex. : <code bash>PGPASSWORD=<password-geonatadmin> pg_dump --verbose --no-password --clean --if-exists --host 172.18.5.1 --port 5432 --username geonatadmin --format custom geonature2db > /root/geonature2db</code> 
-  * ATTENTION : dans les logs du container, le dump est lancer avec la variable d'env PGPASSWORD qui est non visible ! 
-  * Pour réaliser le dump de la base, il faut un utilisateur avec des droits de super utilisateurs, sinon il y a des risques que le dump échoue car l'utilisateur n'aura pas les droits suffisant sur certaines tables ou autres éléments de la base. 
  
 === Tester le cron de Borgmatic === === Tester le cron de Borgmatic ===
Ligne 194: Ligne 181:
   * Si vous avez correctement configurer l'envoie de message via Telegram, vous devriez recevoir des messages indiquant le démarrage de la sauvegarde à l'heure que vous avez indiqué. Sinon, vous devriez pouvoir voir les logs sur l'interface de Portainer.   * Si vous avez correctement configurer l'envoie de message via Telegram, vous devriez recevoir des messages indiquant le démarrage de la sauvegarde à l'heure que vous avez indiqué. Sinon, vous devriez pouvoir voir les logs sur l'interface de Portainer.
  
 +=== Tester le dump Postgresql===
 +  * Contexte : tester manuellement le dump lancé par Borgmatic dans le container (si Postgresql est installé sur votre instance).
 +  * Lancer le dump. Ex. : <code bash>PGPASSWORD=<password-geonatadmin> pg_dump --verbose --no-password --clean --if-exists --host 172.18.5.1 --port 5432 --username geonatadmin --format custom geonature2db > /root/geonature2db</code>
 +  * ATTENTION : dans les logs du container, le dump est lancer avec la variable d'env PGPASSWORD qui est non visible !
 +  * Pour réaliser le dump de la base, il faut un utilisateur avec des droits de super utilisateurs, sinon il y a des risques que le dump échoue car l'utilisateur n'aura pas les droits suffisant sur certaines tables ou autres éléments de la base.
 ==== Utiliser Telegram ==== ==== Utiliser Telegram ====
 Configurer Telegram pour l'utiliser avec ''Ntfy'' ou le script ''telegram-send'' et envoyer des alertes à l'aide de Borgmatic. Configurer Telegram pour l'utiliser avec ''Ntfy'' ou le script ''telegram-send'' et envoyer des alertes à l'aide de Borgmatic.
Ligne 258: Ligne 250:
     * 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 274: 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''
  
  • serveurs/installation/bkp-srv/install-borg.1688459656.txt.gz
  • Dernière modification : 2023/07/04 08:34
  • de jpmilcent