Outils pour utilisateurs

Outils du site


autohebergement:sauvegardes_chez_les_copain_e_s

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
autohebergement:sauvegardes_chez_les_copain_e_s [2020/12/31 11:09]
eorn je complète mais pas fini
autohebergement:sauvegardes_chez_les_copain_e_s [2021/08/16 14:13] (Version actuelle)
Ligne 37: Ligne 37:
 Quelques étapes simples : Quelques étapes simples :
  
-<​code>​+<​code ​bash>
 # Créer le compte # Créer le compte
 sudo useradd --create-home alice sudo useradd --create-home alice
Ligne 47: Ligne 47:
  
 === 2. Créer une clé SSH pour alice === === 2. Créer une clé SSH pour alice ===
-<​code>​+<​code ​bash>
 # On se connecte en tant qu'​alice # On se connecte en tant qu'​alice
 sudo su alice sudo su alice
Ligne 72: Ligne 72:
  
 Ensuite, on lance Borg : Ensuite, on lance Borg :
-<​code>​+<​code ​bash>
 borg init --encryption repokey /​backup/​alice borg init --encryption repokey /​backup/​alice
 </​code>​ </​code>​
Ligne 85: Ligne 85:
 On va mettre notre phrase de passe (''​PHRASE-DE-PASSE''​) dans le fichiers ''/​srv/​borg/​passphrase''​. On met dans le dossier la clé ''​id_rsa''​. Et puis le fichier de configuration ''​config.yaml''​ qui ressemble à ça : On va mettre notre phrase de passe (''​PHRASE-DE-PASSE''​) dans le fichiers ''/​srv/​borg/​passphrase''​. On met dans le dossier la clé ''​id_rsa''​. Et puis le fichier de configuration ''​config.yaml''​ qui ressemble à ça :
  
-<​code>​+<​code ​yaml>
 location: location:
     # Quels dossiers sauvegarder     # Quels dossiers sauvegarder
Ligne 133: Ligne 133:
         # - repository         # - repository
         # - archives         # - archives
 +</​code>​
  
-# Options for customizing ​borgmatic's own output and logging+Pour tester si ça fonctionne, on peut demander via Borgmatic comment est le dépôt Borg : 
-#output: +<code bash> 
-#    color: true+borgmatic ​info -c /​srv/​borg/​config.yaml 
 +</​code>​
  
 +Et si ça marche, lancer une sauvegarde (ça peut être très long si c'est la première) :
 +<code bash>
 +borgmatic --progress -C -c /​srv/​borg/​config.yaml
 +</​code>​
  
 +Et voilà comment mettre en place un système de sauvegardes partagé, entre copain·e·s ☺
 +
 +
 +==== Annexes ====
 +=== Sauvegardes des bases de données ===
 +Borgmatic propose l'​utilisation de //hooks//, c'​est-à-dire qu'il peut exécuter une commande en fonction d'​événements.
 +Ce que je fais pour sauvegarder mes bases de données, c'est qu'​avant le processus de compression et d'​envoi vers le serveur de sauvegardes,​ je lance un petit script codé de mes petites mains pour exporter la base de données dans un fichier sql compressé, placé dans le dossier du service à sauvegarder. Et paf, tout est sauvegardé comme ça.
 +
 +Voilà le script en question, adapté à mes besoins (docker-compose etc), à réadapter peut-être, donc :
 +<file bash dump_database.sh>​
 +#​!/​bin/​bash ​                                                              
 +                                                                 
 +# Default values ​                                                                
 +TYPE="​postgres"​
 +SERVICE="" ​            
 +CONTAINER="" ​       ​
 +ENV_FILE="​.env" ​   ​
 +ALREADY_UP=true ​     ​
 +
 +while getopts "​t:​s:​c:​e:"​ opt
 +do                                                  ​
 +        case "​$opt"​ in                         
 +                t) TYPE="​$OPTARG";;​
 +                s) SERVICE="​$OPTARG";;​
 +                c) CONTAINER="​$OPTARG";;​
 +                e) ENV_FILE="​$OPTARG";;​
 +        esac
 +done                                                         
 +                    ​
 +###                                                     
 +# Preparation ​                                 ​
 +FILENAME="​${SERVICE}_$(date +"​%Y%m%d-%H%M"​).sql"​
 +mkdir -p /​srv/​apps/​$SERVICE/​dump
 +rm -rf /​srv/​apps/​$SERVICE/​dump/​*
 +                                                  ​
 +# Load env file (user, db name)
 +source /​srv/​apps/​$SERVICE/​$ENV_FILE
 +cd /​srv/​apps/​$SERVICE/ ​                
 +                 
 +# Check if the service was up or not, to stop it if necessarry in the end
 +if [ -z `docker-compose ps -q $CONTAINER` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q $CONTAINER)` ]; then
 +        echo "​Service not running, starting it…"
 +        docker-compose -f /​srv/​apps/​$SERVICE/​docker-compose.yml up -d $CONTAINER
 +        ALREADY_UP=false ​                
 +else               
 +        echo "​Service already running."​
 +fi          ​
 +                                                                                      ​
 +# Dump (within the container) ​                                                       ​
 +if [ $TYPE == "​postgres"​ ]                                                      ​
 +then                                                                                  ​
 +        docker-compose \                                                              ​
 +                -f /​srv/​apps/​$SERVICE/​docker-compose.yml\ ​     ​
 +                exec -T $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 -T $CONTAINER\
 +                mysqldump -u $MYSQL_USER --databases $MYSQL_DATABASE -p${MYSQL_PASSWORD} -r /$FILENAME
 +fi
 +      ​
 +                                                                                ​
 +# Copy the dump file to host                  ​
 +echo "​Copying the dump file to host…"​
 +docker cp ${SERVICE}_${CONTAINER}_1:/​$FILENAME /​srv/​apps/​$SERVICE/​dump
 +                                                                                                 
 +# Compressing ​                                                                               ​
 +echo "​Compressing $FILENAME…" ​                                                                  
 +gzip /​srv/​apps/​$SERVICE/​dump/​$FILENAME ​                                                      
 +#docker exec -ti ${SERVICE}_${CONTAINER}_1 cat /$FILENAME > /​srv/​apps/​$SERVICE/​dump/​$FILENAME
 +                                                                                                       
 +#​docker-compose -f /​srv/​apps/​${SERVICE}/​docker-compose.yml exec -T ${CONTAINER} cat /​${FILENAME} > /​srv/​apps/​$SERVICE/​dump/​$FILENAME
 +                                                                                          ​
 +# Remove the dump file in the container
 +docker-compose \
 +        -f /​srv/​apps/​$SERVICE/​docker-compose.yml\
 +        exec -T $CONTAINER rm /$FILENAME -v
 +
 +
 +if ! $ALREADY_UP ; then
 +        echo "​Stopping service"​
 +        docker-compose -f /​srv/​apps/​$SERVICE/​docker-compose.yml stop $CONTAINER
 +fi
 +</​file>​
 +
 +**Exemple d'​usage : ** ''/​srv/​borg/​scripts/​dump_database.sh -t postgres -s hedgedoc -c dbhedgedoc''​
 +
 +Et pour l'​utiliser dans le ''​config.yaml'',​ il faut ajouter à la fin du fichier la section //hooks// suivante :
 +<code yaml>
 +hooks:
 +    before_backup:​
 +            - echo "​Starting a backup."​
 +            - /​srv/​config/​borg/​scripts/​dump_database.sh -t postgres -s hedgedoc -c dbhedgedoc
 </​code>​ </​code>​
 +
 +
 +=== Envoyer les sauvegardes sur plusieurs dépôts distants ===
 +
 +Pour simplifier l'​utilisation de plusiers clés SSH, on peut ajouter la configuration suivante dans ''/​root/​.ssh/​config''​ :
 +<code bash>
 +Host raspibackup
 +  HostName raspibackup.bob.fr
 +  IdentityFile /​srv/​borg/​id_rsa_raspibackup
 +  User alice
 +</​code>​
 +
 +On peut donc enlever la ligne ''​ssh_command:​ ssh -i /​srv/​borg/​id_rsa''​ du fichier ''​config.yaml''​.
 +
 +En ajoutant plusieurs ''​Hosts''​ on pourra se connecter à plusieurs serveurs distants. Il faudra juste configurer ''​config.yaml''​ en conséquence. Par exemple :
 +
 +<code yaml>
 +location :
 +  source_directories:​
 +    ...
 +  repositories:​
 +    - alice@chez.bob.fr:/​backup/​alice
 +    - alice@chez.carole.bzh:/​backup/​alice
 + 
 +</​code>​
 +
 +FIXME
 +
 +
autohebergement/sauvegardes_chez_les_copain_e_s.1609412962.txt.gz · Dernière modification: 2021/08/16 14:13 (modification externe)