Outils pour utilisateurs

Outils du site


autohebergement:sauvegardes

Différences

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

Lien vers cette vue comparative

autohebergement:sauvegardes [2020/03/22 19:32]
eorn Hooks pour bases de données fini
autohebergement:sauvegardes [2021/08/16 14:13]
Ligne 1: Ligne 1:
-===== Sauvegardes ===== 
-J'​utilise BorgBackup et Borgmatic pour m'​occuper de mes sauvegardes. 
- 
-==== Approche manuelle ==== 
-Pour faire des sauvegardes manuellement,​ on peut utiliser ''​borg''​. 
- 
-=== Création d'un dépôt de sauvegarde === 
-Première étape, créer un dépôt de sauvegarde, par exemple après avoir monté un disque dur externe, vierge sur ''/​backup''​ : 
- 
-<​code>​ 
-borg init --encryption=none /backup 
-</​code>​ 
- 
-On peut évidemment chiffrer comme on veut; voir la doc pour ça. 
- 
- 
-=== Ajout d'une sauvegarde === 
-On utilise la commande ''​borg create''​ pour ça : 
- 
-<​code>​ 
-[sudo] borg create --progress --stats [--rsh "ssh -p 2222" eorn@backup.goe.land:​]/​backup::​masauvegarde-2020-03-20 /​dossier/​à/​sauvegarder 
-</​code>​ 
- 
-Les parties ''​[entre crochets]''​ sont optionnels. En l'​occurrence,​ l'​option ''​--rsh''​ et les informations de connexion (''​eorn@backup.goe.land:''​) ne sont utiles que si on veut faire une sauvegarde sur un serveur distant. 
- 
- 
-=== Accès à la sauvegarde === 
-Infos : 
-<​code>​ 
-[sudo] borg infos /backup 
-</​code>​ 
- 
-Liste des sauvardes dans le dépôt : 
-<​code>​ 
-[sudo borg list /backup 
-</​code>​ 
- 
- 
- 
-==== Automatiser les sauvegardes ==== 
-=== Fichier de configuration === 
-Il existe une surcouche à ''​borg''​ pour l'​automatisation : ''​borgmatic'',​ qui a besoin d'un fichier de configuration dont voilà un exemple (rangé, chez moi, dans ''/​srv/​config/​borg/​config.yaml''​) : 
- 
-<​file>​ 
-location: 
-    source_directories:​ 
-        - /srv/apps/ 
- 
-    repositories:​ 
-        - borg@backup.goe.land:/​backup 
- 
-    #​exclude_patterns:​ 
-          #- "​*/​*/​db"​ 
- 
-storage: 
-    encryption_passcommand:​ "cat /​srv/​config/​borg/​passphrase"​ 
-    compression:​ lz4 
-    ssh_command:​ ssh -p 2222 -i /​srv/​config/​borg/​id_rsa 
- 
- 
-retention: 
-    # Keep all archives within this time interval. 
-    keep_within:​ 24H 
- 
-    # Number of daily archives to keep. 
-    keep_daily: 7 
- 
-    # Number of weekly archives to keep. 
-    keep_weekly:​ 4 
- 
-    # Number of monthly archives to keep. 
-    keep_monthly:​ 6 
- 
-consistency:​ 
-   ​checks:​ 
-       - disabled 
-        # - repository 
-        # - archives 
-</​file>​ 
- 
- 
-Pour que cela fonctionne, j'ai créé un utilisateur ''​borg''​ sur ma machine de backup. Les informations pour la connexion ''​ssh''​ sont importantes,​ notamment la clé de connexion (''​id_rsa''​). 
- 
-=== Commandes === 
-Pour avoir les info et liste des sauvegardes : 
-<​code>​ 
-[sudo] borgmatic info -c /​srv/​config/​borg/​config.yaml 
-[sudo] borgmatic list -c /​srv/​config/​borg/​config.yaml 
-</​code>​ 
- 
- 
- 
-=== Correctement sauvegarder des bases de données === 
-Il faut pour cela utiliser les ''​hooks''​ dans le fichier de configuration. 
-J'ai écrit un petit script qui va *dumper* les bases de données, je donne un exemple plus bas. 
- 
-<​file>​ 
-hooks: 
-    before_backup:​ 
-        - echo "​Starting a backup."​ 
-        - /​srv/​config/​borg/​scripts/​dump_database.sh -t postgres -s etherpad -c dbetherpad 
-        - /​srv/​config/​borg/​scripts/​dump_database.sh -t postgres -s freshrss -c dbfreshrss 
-... 
-</​file>​ 
- 
-Et le script ''​dump_database.sh''​ : 
-<​file>​ 
-#!/bin/bash 
- 
-# Default values 
-TYPE="​postgres"​ 
-SERVICE=""​ 
-CONTAINER=""​ 
- 
-while getopts "​t:​s:​c:"​ opt 
-do 
-        case "​$opt"​ in 
-                t) TYPE="​$OPTARG";;​ 
-                s) SERVICE="​$OPTARG";;​ 
-                c) CONTAINER="​$OPTARG";;​ 
-        esac 
-done 
- 
-### 
-# Preparation 
-FILENAME="​${SERVICE}_$(date +"​%Y%m%d-%H%M"​).sql"​ 
-mkdir -p /​srv/​apps/​$SERVICE/​dump 
- 
-# Load env file (user, db name) 
-source /​srv/​apps/​$SERVICE/​.env 
-cd /​srv/​apps/​$SERVICE/ ​       ​ 
- 
-# Dump (within the container) 
-if [ $TYPE == "​postgres"​ ] 
-then 
-        docker-compose \ 
-                -f /​srv/​apps/​$SERVICE/​docker-compose.yml\ 
-                exec $CONTAINER\ 
-                pg_dump -U $POSTGRES_USER -d $POSTGRES_DB -f /$FILENAME 
-elif [ $TYPE == "​mysql"​ ] 
-then 
-        docker-compose \ 
-                -f /​srv/​apps/​$SERVICE/​docker-compose.yml\ 
-                exec $CONTAINER\ 
-                mysqldump -u $MYSQL_USER --databases $MYSQL_DATABASE -p${MYSQL_PASSWORD} -r /$FILENAME 
-fi 
- 
- 
-# Copy the dump file to host 
-docker cp ${SERVICE}_${CONTAINER}_1:/​$FILENAME /​srv/​apps/​$SERVICE/​dump 
- 
- 
-# Remove the dump file in the container 
-docker-compose \ 
-        -f /​srv/​apps/​$SERVICE/​docker-compose.yml\ 
-        exec $CONTAINER rm /$FILENAME 
-</​file>​ 
- 
- 
-=== Vérifier que tout se passe bien === 
- 
- 
- 
-=== Tester les sauvegardes ! === 
- 
- 
  
autohebergement/sauvegardes.txt · Dernière modification: 2021/08/16 14:13 (modification externe)