Backup quotidien de son site sur le Cloud

Comme à chaque création de site, se pose rapidement la question de la sauvegarde des données. Après la mise en ligne de mon dernier site, la sauvegarde sur le cloud me sembla être la bonne solution : fiable, sûre et peu coûteuse… seul problème : trouver la solution pour automatiser ces sauvegardes. Après recherche, la solution me semblant le plus adaptée fut Amazon S3 (« Simple Storage Service ») un des leaders du marché. Prix raisonnable (0,1$ le Go), interface web, mais surtout critère déterminant : Amazon S3 dispose d’un client en ligne de commande pour transférer ses données : S3cmd.

Installation de S3cmd

La première étape est donc d’ouvrir son compte sur Amazon S3, puis ensuite de créer son premier « bucket » depuis l’interface d’administration. Un bucket étant un « conteneur qui détient un ensemble de fichiers ». Pour être plus clair : 1 bucket = 1 projet.

La seconde étape est donc d’installer S3cmd sur votre serveur. La procédure est expliquée sur leur site. Pour Ubunutu / Debian c’est assez simple :

wget -O- -q http://s3tools.org/repo/deb-all/stable/s3tools.key | sudo apt-key add -
sudo wget -O/etc/apt/sources.list.d/s3tools.list http://s3tools.org/repo/deb-all/stable/s3tools.list
sudo apt-get update && sudo apt-get install s3cmd

Backup de sa base de données sur Amazon S3

Il faut ensuite faire un export de notre base. Même si ce n’est pas vraiment le but du billet, voici la commande à utiliser (pour plus d’infos je vous conseille ce tuto) :

mysqldump -h localhost -u USER -pPASSWORD -r/home/mydb.sql BASE

Pour gagner un peu de place, et donc en temps de transfert / cout d’hébergement, nous allons compresser le fichier sql :

tar zcvf /home/mydb.tar.gz /home/mydb.sql

Une fois crée, il suffit d’appeler la ligne suivante pour envoyer l’archive en ligne :

s3cmd put /home/mydb.tar.gz s3://mybucket/bdd/`date +%d%m%y`.tar.gz

Ainsi un fichier à la date du jour (par exemple 20072013.tart.gz) sera alors envoyé dans le répertoire /bdd (dynamiquement crée) du bucket « mybucket ». Vous pouvez immédiatement retourner sur l’interface web et vérifier que votre base est bien au frais sur le cloud.

Interface Web Amazon S3

Plutôt simple non ? :)

Synchroniser ses fichiers sur Amazon S3

Chantier suivant : la sauvegarde des fichiers. S3cmd permet pour cela de faire des sauvegardes incrémentales : seulement les fichiers crées ou modifiés depuis le dernier transfert sont transférés. Cette commande S3cmd, plus ou moins équivalente à rsync sur unix, s’appelle sync et s’utilise de la manière suivante :

s3cmd sync /var/www/* s3://mybucket/files/`date +%m%y`/

Il est aussi possible d’exclure certains dossiers qui n’ont pas de raison d’être sauvegardé, comme par exemple le répertoire contenant le cache ou les logs du site :

s3cmd sync /var/www/* --exclude 'cache/*' --exclude 'logs/*' s3://mybucket/files/`date +%m%y`/

Ainsi l’ensemble des fichiers du site se trouveront dans un répertoire à la date du mois (par exemple : /072013). Cela permet ainsi d’avoir une copie exacte du site par mois, le mois courant se mettant à jour quotidiennement.

On automatise la procédure

Reste à compiler toute cette procédure dans un fichier backup.sh, puis de programmer son appel (sh backup.sh) une fois par jour, à 4h du matin par exemple, via une tâche cron :

Pour récap, voici le fichier final :

#!/bin/bash
mysqldump -h localhost -u USER -pPASSWORD -r/home/mydb.sql BASE
tar zcvf /home/mydb.tar.gz /home/mydb.sql
s3cmd put /home/mydb.tar.gz s3://mybucket/bdd/`date +%d%m%y`.tar.gz
s3cmd sync /var/www/* --exclude 'cache/*' --exclude 'logs/*' s3://mybucket/files/`date +%m%y`/

Ce script est bien sûr un simple exemple, et peut être adapté et amélioré !

3 commentaires
  1. gui dit :

    Merci pour le coup de main avec s3 , ce serait cool de parachevé tout ca avec un exemple de restauration !
    Sous debian,en admetant qu’on veuille restaurer une sauvegarde de tout le system ou une duplication
    pour une migration vers nouveau serveur , comment on procéderait ?!
    SI ta un moment pour aprofondir tout ca, je suis preneur ! :)

    guillaume

  2. gui dit :

    juste une note , pour sincroniser completement, il faut spécifier –delete-removed dans la comande,
    sinon, les fichiers locaux qui ont été suprimé apres avoir été déjà uploadé sur s3 ne seront pas suprimé sur s3.
    Pour avoir une image identique de la source et destination , il faut donc rajouter l’option –delete-removed;
    voila, au cas ou ca peut etre util.

    guillaume

  3. MrManchot dit :

    Bonjour gui,

    Pas trop le temps pour le moment pour un tuto, désolé. Pour récupérer la base de données le plus simple c’est d’aller sur ton interface ( https://console.aws.amazon.com/s3/home ) d’aller sur ton dernière archive de BDD et faire clic droit > enregistrer :)

    Pour les fichiers c’est un peu plus compliqué, mais une commande du type devrait a peu près marcher :

    s3cmd get s3://mybucket/files/*

Laisser une réponse