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] jpmilcent | serveurs:installation:bkp-srv:install-borg [2024/10/23 13:39] (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 ==== |
==== 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 ==== |
* 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 |
* 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>'' |
* À 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 === |
* 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. |
* 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'' |
| |