Projet

Général

Profil

Backup auto » Historique » Version 12

Stéphane Leblond, 29/10/2010 17:46

1 1 Stéphane Leblond
h1. Sauvegarde automatique des données de GEPI
2
3
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
4 2 Stéphane Leblond
5
6
Je vais supposer ici que :
7
* GEPI est installé sur un serveur Debian ou Debian-like dans le répertoire /var/www
8 3 Stéphane Leblond
* un compte "spécial sauvegarde" est créé et nommé "sauve". En super-utilisateur faire : <pre>adduser sauve</pre>
9 4 Stéphane Leblond
10
Se connecter en tant qu'utilisateur "sauve" et taper :
11
12
<pre>
13 5 Stéphane Leblond
mkdir backup backuph
14
</pre>
15
On crée ici deux répertoires qui vont contenir les sauvegardes.
16
Puis
17
<pre>
18 4 Stéphane Leblond
crontab -e
19
</pre>
20 5 Stéphane Leblond
On donne ici accès au crontab de l'utilisateur "sauve"
21
22 4 Stéphane Leblond
23 6 Stéphane Leblond
Entrer les lignes suivantes :
24 4 Stéphane Leblond
25
<pre>
26
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
27
15 1 * * 1 tar cvfz /home/sauve/backup/documents`date +\%Y\%m\%d`.tar.gz /var/www/gepi/documents
28 1 Stéphane Leblond
30 1 * * * find /home/sauve/backup -type f -mtime +15 | xargs -r -n 10 rm
29
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
30
45 1 * * * find /home/sauve/backuph -type f -mtime +1 | xargs -r -n 10 rm
31
</pre>
32 6 Stéphane Leblond
33 8 Stéphane Leblond
Faire CTRL+X puis o (ou y) pour sauvegarder .... si "nano" est votre éditeur de texte
34 6 Stéphane Leblond
35
Voici la signification des commandes entrées dans le crontab de sauve :
36
37
* 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
38
39
* Sauvegarde du répertoire "documents" sous la forme documentsaaaammjj.tar.gz dans /home/sauve/backup/ tous les lundis à 1h15
40
41
* On efface tous les fichiers de /home/sauve/backup vieux de plus de 15 jours tous les jours à 1h30
42
43
* 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
44
45
* On efface tous les fichiers de /home/sauve/backuph vieux de plus de 1 jour tous les jours à 1h45
46 7 Stéphane Leblond
47 1 Stéphane Leblond
h1. Rapatriement des sauvegardes sur un serveur distant
48 8 Stéphane Leblond
49
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.
50
51
h2. Génération et transfert d'une clef ssh sur le serveur hébergeant GEPI
52
53
Sur le serveur de sauvegarde (Debian ou Debian-like également), je suppose qu'un compte adminlocal existe.
54
* Génération d'une paire de clefs :
55
<pre>
56
ssh-keygen -t dsa -f .ssh/gepi_save
57
</pre>
58
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).
59
*Il faut laisser la paraphrase vide lors de la génération*
60
61
Il faut ensuite copier la clef publique dans le fichier /home/sauve/.ssh/authorized_keys du serveur qui héberge GEPI
62 10 Stéphane Leblond
<pre>
63
ssh-copy-id -i ~/.ssh/gepi_save.pub sauve@ip_serveur_gepi
64
</pre>
65
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 :
66
<pre>
67
ssh sauve@ip_serveur_gepi
68
</pre>
69
puis on copie la clef
70
<pre>
71 11 Stéphane Leblond
cat gepi_save.pub >> .ssh/authorized_keys
72 10 Stéphane Leblond
</pre>
73 1 Stéphane Leblond
74 10 Stéphane Leblond
Maintenant la machine qui va recevoir les sauvegardes peut se connecter au compte "sauve" du serveur qui héberge GEPI sans mot de passe.
75 9 Stéphane Leblond
76 12 Stéphane Leblond
h2. Automatisation du rapatriement des sauvegardes
77 8 Stéphane Leblond
78
On a créé trois répertoires de la manière suivante :
79
<pre>
80
mkdir sbackup sbackuph scripts
81
</pre>
82
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". 
83 11 Stéphane Leblond
Puis dans le répertoire "script", on crée 2 fichiers par :
84 1 Stéphane Leblond
<pre>
85 11 Stéphane Leblond
touch rsync.log
86
touch sauve_sync.sh
87
</pre>
88
89
Le fichier sauve_sync.sh doit contenir les lignes suivantes :
90
91
<pre>
92
#! /bin/bash
93
log="/home/adminlocal/scripts/rsync.log";
94
date=$(date +%Y-%m-%d-%H:%M);
95
echo $date >> /home/adminlocal/scripts/rsync.log; 
96
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
97
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
98
</pre>
99
On rend ce fichier exécutable par un :
100
<pre>
101 12 Stéphane Leblond
chmod +x /home/adminlocal/scripts/sauve_sync.sh
102 11 Stéphane Leblond
</pre>
103
Ensuite on fait exécuter ce script tous les jours à 1h30 :
104
<pre>
105 1 Stéphane Leblond
crontab -e
106
</pre>
107 11 Stéphane Leblond
On donne ici accès au crontab de l'utilisateur "adminlocal" et on y colle la ligne suivante :
108
<pre>
109
30 01 * * * sh /home/adminlocal/scripts/sauve_sync.sh
110
30 23 * * * /usr/bin/find /home/adminlocal/sbackup -type f -mtime +60 | xargs -r -n 10 rm
111
35 23 * * * /usr/bin/find /home/adminlocal/sbackuph -type f -mtime +60 | xargs -r -n 10 rm
112
</pre>
113
Les deux dernières lignes servent à supprimer les sauvegardes qui ont plus de deux mois.
114
115
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).