===== 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 ! ===