===== 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.
==== 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'' :
borg init --encryption=none /backup
On peut évidemment chiffrer comme on veut; voir la doc pour ça.
=== Ajout d'une sauvegarde ===
On utilise la commande ''borg create'' pour ça :
[sudo] borg create --progress --stats [--rsh "ssh -p 2222" eorn@backup.goe.land:]/backup::masauvegarde-2020-03-20 /dossier/à/sauvegarder
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 :
[sudo] borg infos /backup
Liste des sauvardes dans le dépôt :
[sudo borg list /backup
==== 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'') :
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
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 :
[sudo] borgmatic info -c /srv/config/borg/config.yaml
[sudo] borgmatic list -c /srv/config/borg/config.yaml
=== 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.
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
...
Et le script ''dump_database.sh'' :
#!/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
=== Vérifier que tout se passe bien ===
=== Tester les sauvegardes ! ===