Sauvegarder sur le NAS un site internet

Après avoir sauvegarder les données du Nas, Sauvegarder sur le NAS

Finalement un NAS, au delà du stockage doit aussi permettre de servir de système de sauvegarde. Alors lorsque l’on dispose d’un site internet, et même si l’on fait confiance à son hébergeur, il est prudent de disposer de plusieurs copies de son site. Le sauvegarder sur le NAS est alors un bon moyen de le sécuriser.

Pour toute sauvegarde, il est convenu que si celle-ci n’est pas exercée automatiquement, elle finit par ne plus l’être du tout. Donc le challenge posé est d’automatiser le backup complet du contenu hébergé. Sauvegarder sur le NAS l’ensemble des données et ensuite faire que ce contenu soit pris en charge par le système de sauvegarde du NAS déjà décrit.

J’ai fait quelques recherches sur internet, me disant que je ne devais pas avoir la primeur de l’idée. Pas mal de réponses sont sorties sur la manière de faire. J’ai fini par m’inspirer de plusieurs d’entre elles pour mettre en oeuvre ma solution.

Comment j’ai fait ?

Il faut sauvegarder les pages et les documents posés sur l’hébergement. Donc du php, du html, des textes et des images etc. Mais aussi le contenu de la base Mysql qui contient, à la fois des données généalogiques mais aussi le contenu dynamique du blog. Ramener ces contenus automatiquement et sur une fréquence journalière sur les disques dur du NAS. Les stocker dans un nouveau répertoire partagé et enfin sauvegarder celui ci.

La solution est très largement inspirée par les solutions décrites par Maël sur ce billet de cobestran.com et sur celui la.

Elle repose sur l’utilisation de lftp pour effectuer des transferts de fichier de type miroir, en conservant donc à l’identique un répertoire du NAS par rapport au contenu du site distant. Attention, pour pouvoir utiliser lftp, il vous faut l’installer via IPKG.

Parcours en trois étapes.

D’abord installer IPKG, Je vous laisse trouver un tuto pour cette installation.
Ensuite, vider la base de données coté hébergeur. La, je pense que la solution est dépendante de l’hébergeur et des outils qu’il met à disposition. Dans mon cas, OVH propose tout ce qu’il faut pour écrire un script permettant le vidage automatisé de la base de donnée.

Enfin,  rédiger le script permettant de transférer en mode miroir un certain nombre de répertoires du site vers le NAS. Automatiser le déroulement de ce script.

Alors concrètement comment sauvegarder sur le Nas ?

Extraction de la base de donnée.

On écrit un tout petit script php que l’on va placer sur le serveur. Pour l’exécuter tous les jours on ajoute ce script dans le cron du serveur.

<?
$nomdestination        = "nomdestination".date("YmdHis").".sql";
$cmd = "mysqldump --host=mysqlx-xx --user=username --password=password databasename >".$nomdestination;
echo "Votre base est en cours de sauvegarde ...<br />";
echo $cmd;
system($cmd);
echo "<br />C'est fini. Vous pouvez recuperer la base par FTP<br />";
echo "<br />le fichier se nomme : ".$nomdestination;
?>

il faut bien entendu remplacer

  • mysqlx-xx par le nom du serveur contenant la base de donnée
  • username par nom du user autorisé à accéder à la base
  • password par le … mot de passe 😉
  • databasename par le nom de votre base de donnée.

Reste à planifier l’exécution du script chez l’hébergeur que vous aurez choisi.
A ce moment, tous les jours à l’heure choisie, une extraction de la base de donnée sera faite. Elle sera stockée dans le répertoire indiqué dans le script.

Ramener depuis l’hébergeur les données à sauvegarder sur le NAS.

Cette fois le script sera écrit en Shell et s’exécutera sur le NAS. Il lit, tout d’abord, un fichier contenant la liste des répertoires à ramener. Ensuite il utilise lftp pour faire des miroirs successifs des répertoires choisis. Bien sur, ne pas oublier le répertoire dans lequel on a extrait la base de donnée.

#!/bin/sh
######################################################################################
##### Sauvegarde des repertoires des sites web depuis l'Hebergement
####  Les repertoires a sauvegarder sont contenus dans le fichier repertoires2
####  Ce n'est pas une sauvegarde incrementale mais un miroir
######################################################################################

# CONFIGURATION
ficLog=/volume1/documents/logsvg2_ovh.txt
servFTP=NOMSERVEURFTP
userFTP=USERFTP
passFTP=PASSWORDFTP
repIgnore="-x wp-content/cache -x /wp-content/supercache"
MAIL_FR=/usr/syno/synoman/webman/texts/fre/mails

######################################################################################
# debut shell
######################################################################################
echo "+-- Deb Sauvegarde $(date) ---" >> ${ficLog}
cp /usr/syno/synoman/webman/texts/fre/mails /usr/syno/synoman/webman/texts/fre/mails.orig
##
echo "
[BackupGood]
Subject: Mirroring depuis OVH
" >> $MAIL_FR
##
while read ligne
do
## Temps d'execution du script
START=$(date +%s)
set $(echo $ligne)
repFTP="/www/"$ligne"/"
repLocal="/volume1/Sauvegarde_OVH/"$ligne"/"

# commande de copie miroir ftp vers local
/opt/bin/lftp ftp://${userFTP}:${passFTP}@${servFTP} -e "mirror -e ${repIgnore} ${repFTP} ${repLocal} ; quit" >> ${ficLog}
echo "/opt/bin/lftp ftp://"${userFTP}":"${passFTP}"@"${servFTP}" -e mirror -e" ${repIgnore} ${repFTP} ${repLocal}" ; quit " >> ${ficLog}

## Afficher le temps d'execution
STOP=$(date +%s)
RUNTIME=`expr $STOP - $START`

res=$?
echo "Resultat : "${res} >> ${ficLog}
echo "Duree Execution : "$RUNTIME >> ${ficLog}
if [ ${res} -eq 0 ]
then
echo -n " Pour $ligne le $(date +"%d-%m-%Y a %H:%M")" >> $MAIL_FR
printf " Mirror realise en %02d:%02d:%02d \n" $((RUNTIME/3600)) $((RUNTIME/60%60)) $((RUNTIME%60)) >> $MAIL_FR

else
echo -n " Pour $ligne : " >> $MAIL_FR
printf "Mirror en echec : Code erreur : %s \n" $res >> $MAIL_FR
fi
done < /volume1/@script/repertoires2

# fin shell
echo "--- Fin Sauvegarde $(date) ---" >> ${ficLog}
/usr/syno/bin/synomail BackupGood
sleep 3
cp /usr/syno/synoman/webman/texts/fre/mails.orig /usr/syno/synoman/webman/texts/fre/mails
######################################################################################

La commande Synomail est utilisée pour donner le résultat final de l’ensemble des transferts.
Synomail est la commande utilisée aussi par le système de notification du desktop synology.

Le texte des mails envoyé par la commande synomail, est configuré dynamiquement tout au long du script. Au début on copie le fichier contenant les modèles pour le sauvegarder. Puis, à chaque répertoire sauvegardé, on ajoute les lignes au bout du fichier avec un index « BackupGood ». Une fois l’ensemble des répertoires traités, on utilise la commande Synomail avec ce même index pour faire la notification.

Après un délai d’attente (sleep 3) pour laisser le temps d’envoyer le message, le fichier original des modèles est remis en place. Pour pouvoir éventuellement débugguer un soucis, je crée, en parallèle, un fichier de logs avec une copie de la commande exécutée.

 

Asavar

Un commentaire

  1. Bonjour,

    Je viens d’avoir un Nas DS415play. Je suis intéressé pour mettre en place une politique de sauvegarde journalière pour mon site internet. Je viens de suivre ce tutoriel a la lettre mais je rencontre qqs difficultés.

    J’ai édité le fichier sauvegarde_ftp.sh
    Je l’ai placé dans /volume1/Sauvegardes/

    ficLog=/volume1/Sauvegardes/sauvegardes_ftp.txt
    servFTP= »ftp.xxxxxxx.fr »
    userFTP= »xxxx »
    passFTP= »xxxx »
    repIgnore= »-x Cache »
    MAIL_FR=/usr/syno/synoman/webman/texts/fre/mails
    repLocal= »/volume1/Sauvegardes/mon_site/ »$ligne »/ »

    Le fichier de log est bien créé et indique:

    +– Deb Sauvegarde Mon Dec 22 17:33:06 CET 2014 —
    — Fin Sauvegarde Mon Dec 22 17:33:06 CET 2014 —

    Mais tout est vide, le répertoire de sauvegarde, le fichier de log ne contint pas de détail et aucun mail reçu.

    Pouvez vous me donner un petit coup de main ?
    Je vous remercie d’avance,

    Grégory.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.