Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
autohebergement:sauvegardes [2020/03/21 10:54] eorn Hooks pour bases de données |
autohebergement:sauvegardes [2020/12/31 12:52] eorn [Sauvegardes] redirection vers sauvegardes chez les copain·e·s |
||
---|---|---|---|
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. | ||
Ligne 93: | Ligne 95: | ||
=== Correctement sauvegarder des bases de données === | === Correctement sauvegarder des bases de données === | ||
Il faut pour cela utiliser les ''hooks'' dans le fichier de configuration. | 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> | <file> | ||
hooks: | 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> | </file> | ||