Outils pour utilisateurs

Outils du site


autohebergement:sauvegardes

Sauvegardes

Une version plus à jour, avec des sauvegardes vraiment distantes, est disponible ici :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 !

autohebergement/sauvegardes.txt · Dernière modification: 2021/08/16 14:13 (modification externe)