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

Prochaine révision
Révision précédente
autohebergement:sauvegardes [2019/12/21 12:36]
eorn créée
autohebergement:sauvegardes [2021/08/16 14:13] (Version actuelle)
Ligne 1: Ligne 1:
 ===== Sauvegardes ===== ===== Sauvegardes =====
 +**Une version plus à jour, avec des sauvegardes vraiment distantes, est disponible ici :​[[autohebergement:​sauvegardes_chez_les_copain_e_s|Sauvegardes chez les copain·e·s]].**
 +
 J'​utilise BorgBackup et Borgmatic pour m'​occuper de mes 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.1576931767.txt.gz · Dernière modification: 2021/08/16 14:13 (modification externe)