Sauvegarder un site web

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.

# Config, à personnaliser
# Le nom que vous voulez donner au site
# La sauvegarde sera enregistrée dans 
# un répertoire portant ce nom.
SITE=mon_site
# L'adresse de votre serveur, telle qu'elle vous
# a été donnée par votre hébergeur 
# (c'est l'adresse FTP)
SERVEUR_SITE=ssh.cluster003.ovh.net
# Le nom d'utilisateur pour le FTP
COMPTE_SITE=adnxpzpr
# Le chemin de votre site sur le serveur.
# En général, ce chemin est web ou www
# (si votre site est à la racine de votre
# espace web)
CHEMIN_SITE=www
# Le nom de la base de données
DB_SITE=dbmonsite
# Le nom d'utilisateur de la base de données
DB_USER_SITE=user_dbmonsite
# Le mot de passe de la base de données
DB_MDP_SITE=mOtDePaSsEdB
# Le nom d'hôte du serveur de base de données
# ou son adresse IP
# Ces éléments vous ont été communiqués 
# par l'hébergeur
DB_HOST_SITE=10.0.237.146
# Le répertoire de votre ordinateur 
# dans lequel vous souhaitez stocker
# les sauvegardes.
REP_BACKUP=backup_site

# Ne rien modifier sous cette ligne

# Sauvegarde    
mkdir -p $REP_BACKUP/$SITE
echo $SITE
# Sauvegarde de la BDD
echo Backup BDD
ssh $COMPTE_SITE@$SERVEUR_SITE "mysqldump -u $DB_USER_SITE -p$DB_MDP_SITE -h $DB_HOST_SITE $DB_SITE" > $REP_BACKUP/$SITE/$SITE.sql
# Sauvegarde des fichiers
echo Backup fichiers
scp -r $COMPTE_SITE@$SERVEUR_SITE:$CHEMIN_SITE $REP_BACKUP/$SITE
Script sauvegarde.sh

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 :

benoitbenoit-hp-elitebook-8540p-_027

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 :

benoitbenoit-hp-elitebook-8540p-_030

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 :

  1. Ouvrez un terminal, puis placez-vous dans le répertoire où vous avez mis le script.
  2. 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.

Voir le script sur Github

,,,,,,,,,,,