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 :
Valider par un retour à la ligne : le script s’installe. Reste à installer 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.
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.
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 :
Les lignes suivantes vont contenir les descriptions des sites à sauvegarder, sous la forme :
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 :
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 :
Lancer le script
Il ne reste plus qu’à lancer le script via :
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
.
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 :
# 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
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.