On a souvent besoin de faire une sauvegarde d’un site web, c’est-à-dire, la plupart du temps, d’un ensemble de fichiers stockés sur un serveur, chez un hébergeur, comme OVH ou 1and1, et d’une base de données. C’est ainsi si votre site ou votre blog est un wordpress, ou un joomla, un drupal, ou si votre boutique en ligne est faite avec prestashop, par exemple.
Il est bien sûr possible de se connecter en FTP (en fait, désormais, il s’agit généralement de SFTP, qui est une variante du protocole SSH qui se présente à l’utilisateur comme du FTP), récupérer les fichiers, puis se connecter sur phpMyAdmin pour faire un export de la base de données (on parle de dump).
Le script que je vous propose permet d’automatiser ces deux opérations, il est écrit en bash et fonctionne donc nativement sur n’importe quel système Linux (en tout cas les plus répandus) ou MacOS. En installant quelques petites choses, on peut facilement le faire fonctionner sous Windows également.
Comment ça marche ?
Il est divisé en deux parties : une pour la configuration dans laquelle on ne fait qu’affecter des variables, et l’autre pour la sauvegarde en elle-même.
Sur la configuration, il n’y a rien à dire de particulier, j’ai mis en commentaire de quoi comprendre à quoi correspond chaque variable. La partie « Sauvegarde » est plus intéressante, je la commenterai après.
Ainsi, comme vous pouvez le voir, nous commençons par créer le répertoire pour stocker les sauvegardes avec la commande mkdir
. L’option -p
permet de créer les niveaux de répertoires intermédiaire : si par exemple je demande la création d’un répertoire /home/benoit/petits_outils/sauvegardes/mes_sauvegardes_de_sites
mais que sauvegardes
n’existe pas dans petits_outils
, mkdir
seul va me renvoyer une erreur :
Cela signifie (même si ce n’est pas très explicite) que le répertoire sauvegardes
dans lequel j’ai demandé la création du nouveau dossier mes_sauvegardes_de_sites
n’existe pas.
En revanche, si j’ajoute l’option -p
, tous les répertoires intermédiaires utiles sont créés :
En outre, même si le répertoire que j’essaie de créer avec mkdir -p
existe déjà, il n’y a pas d’erreur (contrairement à ce qui se passe sans l’option -p
).
Les différents echo
servent bien sûr à informer l’utilisateur de l’état des opérations et à lui montrer qu’il se passe bien des choses, même si la récupération des données est un peu longue.
La commande ssh
se connecte au serveur et lui envoie la commande passée en paramètre (si aucune commande n’est donnée ainsi, c’est un shell sur la machine distante qui s’ouvre).
En l’occurrence, c’est la commande "mysqldump -u $DB_USER_SITE -p$DB_MDP_SITE -h $DB_HOST_SITE $DB_SITE"
qui est envoyée, c’est-à-dire la commande pour afficher un dump de la base de données. Au lieu d’afficher ces données à l’écran (ce qui ne serait pas très intéressant), nous redirigeons cet affichage vers un fichier en ajoutant > $REP_BACKUP/$SITE/$SITE.sql
. Attention de bien mettre cette redirection hors de guillemets, sinon, c’est sur le serveur que les données seront stockées.
Nous copions ensuite simplement les fichiers en utilisant la commande scp
(pour ‘secure copy’).
Pour l’utiliser chez vous
Téléchargez le script sur votre ordinateur, dans le répertoire de votre choix, en le renommant sauvegarde.sh (ce n’est pas indispensable, mais c’est plus clair). Modifiez ensuite la partie « config » pour l’adapter à votre situation.
Attention ! Chez OVH (et peut-être chez d’autres hébergeurs également), l’accès en SSH n’est pas possible avec l’abonnement le moins cher, il n’est donc pas possible d’utiliser ce script avec un tel abonnement.
Quand vous voudrez l’utiliser :
- Ouvrez un terminal, puis placez-vous dans le répertoire où vous avez mis le script.
- Lancez-le en saisissant :
sh sauvegarde.sh
Et voilà ! Le mot de passe vous sera demandé deux fois, nous verrons dans un prochain billet comment ne pas avoir à le saisir. Nous verrons aussi comment sauvegarder plusieurs sites en une seule fois.