Chemin principal : Accueil > SPIP > Automatiser la sauvegarde de son site en local

Autre chemin : (Aller directement au contenu de l'article)

  • Accueil > Python > Automatiser la sauvegarde de son site en local

Automatiser la sauvegarde de son site en local

vendredi 6 décembre 2013, par Maïeul
Suivre la vie du site RSS 2.0 Forum

En théorie, un bon hébergeur est censé avoir une copie des données dans un autre local, en cas d’accident. Mais par précaution, avoir soi-même une copie des données de son site sur son ordinateur peut toujours être utile, comme le prouve une mésaventure arrivée à Teddy Payet.

Comme c’est une opération régulière, autant avoir un script qui permette d’automatiser la tâche. J’en ai créé un pour moi, que je vous propose ici.

Objectifs

  • Pouvoir récupérer les documents aussi bien via FTP que via SSH + clefs publique/privée.
  • Ne récupérer que les documents modifiés depuis la dernière récupération.
  • Inutile de garder en local un état du site à chaque sauvegarde : on s’appuie sur notre outil de sauvegarde locale.
  • Pouvoir ajouter facilement un nouveau site à sauvegarder en précisant quels sont les fichiers à sauvegarder.
  • Pouvoir utiliser le trousseau d’accès du système pour stocker les mots de passe FTP.
  • Pouvoir récupérer une dump .sql de la base de données MySql.

    Outils

Pour remplir les deux premiers objectifs, je me sers de rsync et de lftp. Le premier est installé sous Mac OS X et a priori sous Linux [1]. Le second en revanche n’est pas installé sous Mac Os X par défaut. Mais son installation est très simple, pour peu que l’on n’ait pas peur d’ouvrir une fenêtre de terminal [2].

D’abord installer brew si on ne l’a pas déjà fait. Brew est un programme en ligne de commande qui permet d’installer facilement d’autres programmes en ligne de commande. Dans son terminal, mettre :

  1. ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

Valider par un retour à la ligne : le script s’installe. Reste à installer lftp:

  1. brew install lftp

Il me restait à gérer les autres conditions. J’ai décidé d’écrire cela en python, parce que je le connais mieux que bash [3] et que c’est un langage simple mais puissant.

Python est installé sous Linux et Os X par défaut, donc pas de souci. En revanche il faut installer un module complémentaire keyring, qui permettra de sauvegarder les mots de passe dans le trousseau.

  1. sudo easy_install keyring

Bref, les pré-requis sont là, il ne reste plus qu’à passer au script.

Enfin, pour récupérer le dump de la base de données, j’utilise le plugin spip saveauto, en configurant pour que les sauvegardes soient faites tous les jours dans le dossier tmp/dump.

Installation et configuration du script

Télécharger le zip [4], le décompresser, installer le dossier à l’emplacement de son choix.

Zip -
Script de sauvegarde
Dernière version stable

Passons maintenant à la configuration du script. Dans son dossier, à côté de sauvegarde-site.py, créer un fichier config.py, qui contiendra les paramètres du fichier.

La première ligne contient le chemin absolu vers le dossier où sera stocké toutes les sauvegardes des sites. Par exemple chez moi :

  1. dossier = "/Users/maieul/Sites/sauvegarde"

Les lignes suivantes vont contenir les descriptions des sites à sauvegarder, sous la forme :

  1. sites=[
  2. {
  3. parametre pour un site
  4. },
  5.  
  6. {
  7. parametres pour un autre site
  8. },
  9. etc
  10. ]

Télécharger

Un paramètre est une « clef » mise entre guillemets, suivi de «  : » puis suivi de sa valeur. Soit généralement une chaîne entre guillemets, ou à défaut une liste de chaîne entre crochets. Chaque paramètre est séparé du suivant par une virgule.

Ainsi donc :

  1. {
  2. "param1" : "valeur 1",
  3. "param2" : "valeur 2",
  4. "param3" : ["valeur3a","valeur3b"]
  5. }

Télécharger

Le script fonctionne avec sept paramètres :

  • "mode" qui indique comment on récupère les fichiers. Deux valeurs sont possibles "SSH" ou "FTP".
  • "login" qui indique le login du serveur où l’on récupère les fichiers. Par exemple : "toto"
  • "serveur" qui indique l’adresse du serveur où l’on récupère les fichiers, par exemple : "ftp.toto.net"
  • "base" qui indique le chemin sur le serveur du dossier où se trouve le site, par exemple : "www/sites/toto"
  • "recuperation" qui indique les chemins, depuis la base du site, des dossiers à récuperer. Typiquement avec SPIP : ['IMG','tmp/dump'].
  • "exclure" qui indique les dossiers à ne pas récupérer. Typiquement avec SPIP : 'exclure':['article_PDF','distant','.svn','.ok']
  • "dossier" qui indique dans quel sous-dossier vont être rangés les fichiers récupérés. Par exemple "toto".

Ainsi un fichier config.py minimum pourra être le suivant :

  1. dossier = "/Users/maieul/Sites/sauvegarde"
  2. sites=[
  3. {
  4. 'mode':'FTP',
  5. 'login':'toto',
  6. 'serveur':'ftp.toto.org',
  7.  
  8. 'base':'www/sites/toto',
  9. 'recuperation':['IMG','tmp/dump'],
  10. 'exclure':['article_PDF','distant','.svn','.ok'],
  11.  
  12. 'dossier':'toto'
  13. }
  14. ]

Télécharger

Lancer le script

Il ne reste plus qu’à lancer le script via :

  1. python chemin-du-fichier-sauvegarde-sites.py

Le script récupère l’ensemble des sites en les mettant chacun dans le dossier correspondant :

  • la première fois qu’il rencontre un site à récupérer par ftp, il s’interrompt et vous demande le mot de passe.
  • les fois suivantes, il ne récupère que les fichiers modifiés, et, le cas échéant, supprime de la version locale les fichiers supprimés de la version distante [5].
  • à la fin, ils vous indique les sites dont la sauvegarde a échoué. Ils ne vous indique pas plus en détails les causes de l’échec, mais les informations sont indiqués plus haut, dans les messages affichés au cour de l’exécution.

Pour ma part, je lance le script tous les matins en arrivant au travail, et je me suis créé un alias bash.

Limites

  • Script non conçu pour Windows. En particulier je me base sur l’hypothèse que les chemins de fichiers sont indiqués avec des / et non des \.
  • Si vous demandez à récupérer par FTP un dossier qui n’existe pas, vous récupérez l’ensemble du site.
  • Si votre mdp FTP a changé, il vous faut le supprimer dans le trousseau d’accès. Il est enregistré avec un titre sous la forme : sauvegarde login@serveur.

P.-S.

Ce script est beaucoup plus simple et puissant que mon précédent, que je n’avais osé publier, même si j’en avais donné des prémisses.

Notes

[1Pour Windows, je n’en sais fichtre rien.

[2De toute façon il faudra le faire pour lancer mon script.

[3Auquel je ne comprend rien.

[4Ou cloner le projet depuis Github.

[5Encore une fois, mon script est simple : pour avoir un historique du site, on s’appuiera sur le système de sauvegarde local.

Vos commentaires

  • Le 5 novembre 2014 à 06:01, par Peetdu En réponse à : Automatiser la sauvegarde de son site en local

    Bonjour,

    Mon objectif est de mettre à jour mes sites SPIP en local et ce tuto tombe très bien :)

    Est-il possible de préciser pour chaque site les répertoires dans lesquels il doit faire la synchro/sauvegarde ? C’est à dire faire un lien entre le paramètre ’recuperation’ et le paramètre ’dossier’ ?

    Quelque chose comme ça :

    1. recuperation_IMG : ['IMG'],
    2. recuperation_dump : ['tmp/dump'],
    3.  
    4. 'dossier_IMG' : 'toto/IMG'
    5. 'dossier_dump' : 'toto/tmp/dump'

    Télécharger

  • Le 5 novembre 2014 à 08:42, par Maïeul En réponse à : Automatiser la sauvegarde de son site en local

    pour le moment le script est prévu pour stocker l’ensemble des sauvegardes dans un même dossier, avec des sous dossiers. On pourrait l’améliorer pour prévoir un dossier différent, mais il faudrait avoir le temps de le faire...

  • Le 2 octobre 2015 à 03:42, par touti En réponse à : Automatiser la sauvegarde de son site en local

    Merci Maïeul, ça marche toujours aussi bien. Installer lftp vec macports : sudo port install lftp

  • Le 2 octobre 2015 à 10:34, par Maïeul En réponse à : Automatiser la sauvegarde de son site en local

    tant mieux.

  • Le 11 novembre 2016 à 16:24, par touti En réponse à : Automatiser la sauvegarde de son site en local

    Bonjour Maïeul, depuis peu j’ai ce message qui m’empêche de réaliser la sauvegarde

    cd: Erreur fatale: Certificate verification: self signed certificate (66:69:41:36:…………:D9:F5:A0:56)
    mirror: Erreur fatale: Certificate verification: self signed certificate (66:69:41:36:…………D9:F5:A0:56)

    est-ce que tu as une idée ? merci !

  • Le 18 novembre 2016 à 16:25, par Maïeul En réponse à : Automatiser la sauvegarde de son site en local

    ca c’est un souci au niveau de l’accès ftps de ton hébergeur.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

À propos

Titulaire d’un master en sciences religieuses de l’Université de Strasbourg, je suis depuis août 2012 assistant-diplômé en histoire du christianisme antique et littérature apocryphe chrétienne à l’Université de Lausanne, où je prépare une thèse sous la direction de Frédéric Amsler.

Dans le cadre de la rédaction de mon mémoire de master, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul