Comment automatiser la sauvegarde d’un serveur web sous Gentoo Release 2 OVH de façon efficace ?
Pour cela nous allons utiliser l’espace FTP de 100Go mis à disposition par OVH sur les anciennes offres Kimsufi et sauvegarder le répertoire racine web ainsi que la/les bases de données MySQL de façon automatique.
Le tutoriel suivant est une version inspiré et modifié de celui présent ici.
Activation de l’espace de sauvegarde FTP
Par défaut, l’espace de sauvegarde n’est pas activé. Un simple clic sur l’interface du manager OVH permet d’activer cette fonctionnalité gratuite et de recevoir par mail les identifiants de connexion.
L’option se trouve dans la partie service de votre interface de gestion de votre serveur dédié.
Processus de sauvegarde
Le processus de sauvegarde proposé correspond à mon besoin personnel, il est donc à adapter au votre.
Chaque nuit pendant les heures creuses, votre serveur va automatiquement archiver dans une arborescence locale les fichiers importants de votre site, ainsi que les données de vos bases MySQL. Chaque jour les fichiers présents dans cette arborescence seront donc écrasés et remplacés par les sauvegardes mises à jour. Votre serveur aura donc en local une copie des fichiers importants datant de la veille.
Une fois que tous les fichiers d’archive sont créés en local, un processus automatique va s’occuper de les envoyer par FTP dans votre espace de sauvegarde offert par OVH. Dans cet espace, 7 répertoires vont être créé correspondant aux 7 jours de la semaine. Chaque jour, on écrasera la sauvegarde de la semaine précédente située à cet emplacement. Votre espace FTP contiendra donc à tout moment les sauvegardes de votre système archivées pour les 7 derniers jours.
Création de l’arborescence locale
[USER]
est à remplacer avec vos informations
cd /home/[USER]/ mkdir save mkdir save/mysql mkdir save/www mkdir bin mkdir log
Création de l’arborescence sur l’espace FTP
[USER_FTP]
, [PASSWORD_FTP]
et [HOST_FTP]
sont à remplacer avec vos informations
ncftp -u [USER_FTP] -p [PASSWORD_FTP] [HOST_FTP]
Puis :
mkdir 1 mkdir 1/www mkdir 1/mysql mkdir 2 mkdir 2/www mkdir 2/mysql mkdir 3 mkdir 3/www mkdir 3/mysql mkdir 4 mkdir 4/www mkdir 4/mysql mkdir 5 mkdir 5/www mkdir 5/mysql mkdir 6 mkdir 6/www mkdir 6/mysql mkdir 7 mkdir 7/www mkdir 7/mysql exit
Création du script de sauvegarde des sites web
Création du script dans le dossier bin
cd bin nano site-save.sh
Contenu du script ([USER]
est à remplacer avec vos informations) :
#!/bin/bash renice 19 -p $ &>/dev/null tar -czf /home/[USER]/save/www/siteweb.tgz /home/[USER]/www >> /home/[USER]/log/tar.log
Rendre exécutable le script :
chmod a+x site-save.sh
Création du script de sauvegarde des sites web
Il est recommandé de créer un utilisateur de base de données réservé aux sauvegardes, ayant le privilège de lire toutes les tables de toutes les bases dans MySQL (privilège SELECT), et de les verrouiller pendant la sauvegarde (privilège LOCK TABLES) sans pouvoir les modifier.
Cela permet de masquer vos mots de passe de base de données habituels en clair dans vos scripts de sauvegarde.
nano data-dump.sh
Contenu du script ([USER_SQL]
, [PASSWORD_SQL],
et [BASE1],
[BASE2]
[USER]
sont à remplacer avec vos informations) :
#!/bin/bash renice 19 -p $$ &>/dev/null mysqldump -u [USER_SQL] --password=[PASSWORD_SQL] [BASE1] > /home/[USER]/save/mysql/[BASE1].sql mysqldump -u [USER_SQL] --password=[PASSWORD_SQL] [BASE2] > /home/[USER]/save/mysql/[BASE2].sql
Rendre exécutable le script :
chmod a+x data-dump.sh
Création du script de transfert FTP
nano ftpback.sh
Contenu du script ([USER]
, [USER_FTP]
, [PASSWORD_FTP]
et [HOST_FTP]
sont à remplacer avec vos informations) :
#!/bin/bash Numjour=`date +%u` FTPHost='[HOST_FTP]' FTPLogin='[USER_FTP]' FTPPass='[PASSWORD_FTP]' FTPConnectstring="open -u $FTPLogin -p $FTPPass $FTPHost" FTPCommands=" cd $Numjour/www lcd /home/[USER]/save/www put * cd ../mysql lcd /home/[USER]/save/mysql put * " echo -e "$FTPConnectstring\n$FTPCommands\nexit\nno" | ncftp
Rendre exécutable le script :
chmod a+x ftpback.sh
Test des scripts
On teste un à un les scripts pour s’assurer de leur bon fonctionnement
./site-save.sh ./data-dump.sh ./ftpback.sh
Création du script principal
nano nightly-save.sh
Contenu du script ([USER]
sont à remplacer avec vos informations) :
#!/bin/bash renice 19 -p $$ &>/dev/null /home/[USER]/bin/site-save.sh /home/[USER]/bin/data-dump.sh /home/[USER]/bin/ftpback.sh
Rendre exécutable le script :
chmod a+x nightly-save.sh
Test du script principal :
./nightly-save.sh
Automatisation du script principal via cron
Ouverture de la crontab :
crontab -e
Ajout de la ligne permettant de lancer le script principal tout les jour à 4h ([USER]
sont à remplacer avec vos informations).
0 4 * * * /home/[USER]/bin/nightly-save.sh
Merci beaucoup pour ce tuto qui m’a bien dépanné !
J utilise ce systeme depuis plusieurs mois sur un serveur Debian OVH, avec un espace Dropbox gratuit, et je confirme que cela fonctionne parfaitement, je recupere bien mes sauvegardes tous les jours. Comme je possede deux kimsufi J ai adapter le scripts ftp pour qu il pointe sur le serveur ftp d un kimsufi.