Sauvegarde automatique des données de GEPI

La procédure ci-dessous est largement inspirée de ce document : http://gepi.mutualibre.org/documents/gepi/doc/4_sauvegarde_automatique_donnees_gepi.pdf

Je vais supposer ici que :
  • GEPI est installé sur un serveur Debian ou Debian-like dans le répertoire /var/www
  • un compte "spécial sauvegarde" est créé et nommé "sauve". En super-utilisateur faire :
    adduser sauve

Se connecter en tant qu'utilisateur "sauve" et taper :

mkdir backup backuph

On crée ici deux répertoires qui vont contenir les sauvegardes.
Puis
crontab -e

On donne ici accès au crontab de l'utilisateur "sauve"

Entrer les lignes suivantes :

0 1 * * * mysqldump -u user_gepi_mysql -pmot_de_passe -x -e -B gepi > /home/sauve/backup/gepi`date +\%Y\%m\%d`.sql && gzip /home/sauve/backup/gepi`date +\%Y\%m\%d`.sql
15 1 * * 1 tar cvfz /home/sauve/backup/documents`date +\%Y\%m\%d`.tar.gz /var/www/gepi/documents
30 1 * * * find /home/sauve/backup -type f -mtime +15 | xargs -r -n 10 rm
30 * * * * mysqldump -u user_gepi_mysql -pmot_de_passe -e -B gepi > /home/sauve/backuph/hgepi`date +\%Y\%m\%d\%H\%M`.sql && gzip /home/sauve/backuph/hgepi`date +\%Y\%m\%d\%H\%M`.sql
45 1 * * * find /home/sauve/backuph -type f -mtime +1 | xargs -r -n 10 rm

Faire CTRL+X puis o (ou y) pour sauvegarder .... si "nano" est votre éditeur de texte

Voici la signification des commandes entrées dans le crontab de sauve :

  • Sauvegarde de la base "gepi" avec fermeture des tables sous la forme "gepiaaaammjj.sql.gz" dans le répertoire /home/sauve/backup/ tous les jours à 1h
  • Sauvegarde du répertoire "documents" sous la forme documentsaaaammjj.tar.gz dans /home/sauve/backup/ tous les lundis à 1h15
  • On efface tous les fichiers de /home/sauve/backup vieux de plus de 15 jours tous les jours à 1h30
  • Sauvegarde de la base "gepi" sans fermeture des tables sous la forme "hgepiaaaammjjHHMM.sql.gz" dans le répertoire /home/sauve/backuph/ toutes les heures passées de 30 min
  • On efface tous les fichiers de /home/sauve/backuph vieux de plus de 1 jour tous les jours à 1h45

Rapatriement des sauvegardes sur un serveur distant

Sur ce serveur, vous devez avoir un accès ssh "sans mot de passe" avec une clef ssh de sécurité au serveur qui hébéerge GEPI.

Génération et transfert d'une clef ssh sur le serveur hébergeant GEPI

Sur le serveur de sauvegarde (Debian ou Debian-like également), je suppose qu'un compte adminlocal existe.
  • Génération d'une paire de clefs :
    ssh-keygen -t dsa -f .ssh/gepi_save
    

    Cette commande a généré une paire de clefs dans le répertoire .ssh/ de adminlocal. Ces clefs se nomment gepi_save (clef privée) et gepi_save.pub (clef publique).
    Il faut laisser la paraphrase vide lors de la génération

Il faut ensuite copier la clef publique dans le fichier /home/sauve/.ssh/authorized_keys du serveur qui héberge GEPI

ssh-copy-id -i ~/.ssh/gepi_save.pub sauve@ip_serveur_gepi

La clef est alors copiée dans le répertoire personnel de "sauve" sur le serveur où est hébergé GEPI. On se connecte à "sauve" en faisant :
ssh sauve@ip_serveur_gepi

puis on copie la clef
cat gepi_save.pub >> .ssh/authorized_keys

Maintenant la machine qui va recevoir les sauvegardes peut se connecter au compte "sauve" du serveur qui héberge GEPI sans mot de passe.

Automatisation du rapatriement des sauvegardes

On a créé trois répertoires de la manière suivante :

mkdir sbackup sbackuph scripts

On crée ici deux répertoires dans lesquels on va rapatrier les sauvegardes contenues sur le compte "sauve" (sbackup sbackuph) et un répertoire "scripts".
Puis dans le répertoire "script", on crée 2 fichiers par :
touch rsync.log
touch sauve_sync.sh

Le fichier sauve_sync.sh doit contenir les lignes suivantes :

#! /bin/bash
log="/home/adminlocal/scripts/rsync.log";
date=$(date +%Y-%m-%d-%H:%M);
echo $date >> /home/adminlocal/scripts/rsync.log; 
rsync -avz -e "ssh -i /home/adminlocal/.ssh/gepi_save" sauve@ip_serveur_gepi:/home/sauve/backup/ /home/adminlocal/sbackup/ >> /home/adminlocal/scripts/rsync.log 2>&1
rsync -avz -e "ssh -i /home/adminlocal/.ssh/gepi_save" sauve@ip_serveur_gepi:/home/sauve/backuph/ /home/adminlocal/sbackuph/ >> /home/adminlocal/scripts/rsync.log 2>&1

On rend ce fichier exécutable par un :
chmod +x /home/adminlocal/scripts/sauve_sync.sh

Ensuite on fait exécuter ce script tous les jours à 1h30 :
crontab -e

On donne ici accès au crontab de l'utilisateur "adminlocal" et on y colle la ligne suivante :
30 01 * * * sh /home/adminlocal/scripts/sauve_sync.sh
30 23 * * * /usr/bin/find /home/adminlocal/sbackup -type f -mtime +60 | xargs -r -n 10 rm
35 23 * * * /usr/bin/find /home/adminlocal/sbackuph -type f -mtime +60 | xargs -r -n 10 rm

Les deux dernières lignes servent à supprimer les sauvegardes qui ont plus de deux mois.

Le script "sauve_sync.sh" synchronise les sauvegardes faites par "sauve" (serveur hébergeant GEPI) sur votre serveur de sauvegarde en indiquant ce qui s'est passé dans rsync.log (avec la date et l'heure).

retour au menu