J’ai de plus en plus de mal à comprendre les sites web, mais le plus souvent de petites communautés, qui ne rouvrent qu’après un certain temps hors-ligne, ou pire, qu’elles ferment en raison de l’absence d’une sauvegarde après un problème avec leur hébergeur. Comment cela peut-il être possible à l’heure du cloud, où toutes nos données nous sont accessibles d’un bout du monde à l’autre, via des services gratuits ?
Si je conçois qu’il est contraignant de faire une sauvegarde régulière de son FTP et des bases de données composant un site web, il est primordial de mettre en place un système le faisant pour nous, un bon informaticien étant de base fainéant optimisant chacune de ses actions.
Pour ce faire, quoi de plus naturel qu’utiliser la solution de sauvegarde cloud la plus répandue, Google Drive ? A raison de 15 Go par compte gratuit, il serait dommage de s’en priver.
Nous considérerons que le serveur où vous hébergez vos données est un serveur Debian et que vous avez les privilèges administrateurs sur votre machine.
Pour ce faire, nous allons utiliser Grive2, petit utilitaire écrit en C++ avec la librairie Boost pour synchroniser les dossiers local et distant dans lesquels se trouveront les sauvegardes.
Installation des dépendances :
sudo apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev
Récupération du script sur GitHub, compilation et installation :
cd /var/dossier_ou_seront_les_sauvegardes
git clone https://github.com/vitalif/grive2
mkdir build
cd build
cmake ..
make -j4
sudo make install
grive -a
La dernière ligne vous donnera un lien à visiter avec le compte sur lequel vous souhaitez effectuer la sauvegarde pour récupérer une clé API pour sauvegarder dans votre compte Google Drive. Copiez la clé obtenue. Le “-a” n’est nécessaire que la première fois.
Maintenant, vous pouvez mettre en place vos tâches cron, par exemple en copiant le fichier suivant dans /etc/cron.daily
#!/bin/bash
cd /var/dossier_ou_seront_les_sauvegardes
for i in nom_de_la_bdd nom_de_la_seconde_bdd; do
## On sauvegarde nos bdd en SQL
mysqldump --user=Utilisateur_BDD --password=Mdp_Utilisateur $i > ${i}_`date +"%Y-%m-%d"`.sql
## On compresse le fichier obtenu
tar jcf ${i}_`date +"%Y-%m-%d"`.sql.tar.bz2 ${i}_`date +"%Y-%m-%d"`.sql
## On supprime les SQL
rm ${i}_`date +"%Y-%m-%d"`.sql
done
## Grive
/usr/local/bin/grive
On peut reprendre le même modèle pour une sauvegarde de FTP :
#!/bin/bash
#
## on se place dans le repertoire
#
cd /var/dossier_ou_seront_les_sauvegardes
## Compression récursive
tar -zcvf ftp_`date +"%Y-%m-%d"`.tar.gz /var/www
## Grive
/usr/local/bin/grive
où /var/www est le répertoire de vos sites web.
Pensez bien à rendre les dossiers exécutables par l’utilisateur qui lancera les cron et à ne pas donner d’extension aux fichiers :).