Sauvegarde WordPress : Guide complet pour sauvegarder et restaurer votre site WordPress

Introduction

La sauvegarde et la récupération sont une partie importante de la gestion d’un site Web.

Quelle que soit la taille de ton site, des erreurs peuvent se produire et des données peuvent être perdues.

Avoir ta propre sauvegarde wordpress te permet de t’assurer que ton site Web peut être restauré même en cas de problème avec ton hébergement.

Dans un tel cas (qui arrive plus souvent qu’on ne le croit) tu seras très très content d’avoir des sauvegardes du site pour le restaurer à son état antérieur.

Il est important de noter que même si ton hébergeur stocke des sauvegardes, il est recommandé de conserver également une copie et de la remplacer régulièrement. (Possible de faire un script pour ça)

sauvegarde wordpress et restauration sur linux et docker

Ton pire cauchemar

Thomas, entrepreneur, perd son précieux site WordPress suite à une attaque de hackers.

Son hébergeur ne parvient pas à restaurer les données corrompues.

N’ayant pas de sauvegarde personnelle, Thomas perd des mois de travail.

Leçon à retenir : sauvegardez régulièrement votre site et testez les procédures de restauration.

bob à peur car il n'a pas de sauvegarde wordpress

Sauvegarde WordPress

Présentation des différentes manières de sauvegarder WordPress

Pour sauvegarder son site wordpress voici 2 solutions :

  • Faire un dump de la base de données wordpress et récupérer le dossier wordpress (généralement dans /var/www/).
  • Utiliser un plugin de sauvegarde comme UpdraftPlus, BackupBuddy ou VaultPress. Ces plugins permettent de programmer des sauvegardes régulières et de stocker tes sauvegardes en ligne.

Dans cet article j’utilise la première solution et je l’automatise avec du scripting (tu trouveras le script à la fin ⬇️).

Script de sauvegarde

Voici un script hyper simple qui permet de faire une sauvegarde de son site wordpress :

#!/bin/bash

DATE=$(date +%Y-%m-%d-%H-%M-%S)
db_name="wordpress_db"
db_user="wordpress_user"
db_password="password"
db_host="localhost"
dump_name="wp_db_${DATE}.sql"
src_path="/var/www/"
folder_dest="/var/backups"
archive_name="wp_${DATE}.tar"

mkdir -p /var/backups

# Exporter la base de données
mysqldump -u $db_user -p$db_password -h $db_host $db_name > $folder_dest/$dump_name

# Exporter les sources
tar -czvf $folder_dest/$archive_name $src_path

Ce script crée un dump de la base de données et une archive du dossier wp qui iront dans /var/backups.

Plugins de sauvegarde

Je te présente les plugins de sauvegarde que je connais et je fais un petit comparatif :

UpdraftPlus :

UpdraftPlus plugin wordpress

Très apprécié il permet de planifier des sauvegardes automatiques et de les stocker dans plusieurs services de stockage en ligne (Dropbox, Google Drive, Amazon S3) .

UpdraftPlus propose également une version premium offrant des fonctionnalités supplémentaires, comme le clonage de site et le support prioritaire.

BackupBuddy:

BackupBuddy plugin de sauvegarde wordpress

BackupBuddy est un plugin de sauvegarde wordpress complet qui te permet de sauvegarder, restaurer et migrer ton site WordPress.

Il peut également effectuer des sauvegardes wordpress en temps réel et planifier des sauvegardes automatiques.

La licence de BackupBuddy est payante et inclut des mises à jour et un support technique.

VaultPress (Jetpack Backup):

Jetpack Backup plugin pour sauvegarder et restaurer wordpress

VaultPress, le service de sauvegarde wordpress intégré dans le plugin Jetpack, est un service de sauvegarde automatisé en temps réel proposé par Automattic, la société derrière WordPress.com.

Il offre des sauvegardes incrémentielles, une restauration en un clic et une protection contre les attaques de force brute.

VaultPress nécessite un abonnement mensuel ou annuel à Jetpack.

Comparatif :

CritèreUpdraftPlusBackupBuddyVaultPress (Jetpack Backups)
Facilité d’utilisationFacilePlus complexe pour les débutantsFacile
PrixGratuit (fonctionnalités de base) / Premium (payant)Achat unique + mises à jour annuellesAbonnement (mensuel ou annuel)
Stockage en lignePlusieurs servicesDivers services (extensions supplémentaires pour certains)Service de stockage propriétaire
SupportLimité (version gratuite) / Dédié (version premium)Support techniqueSupport technique

Planification de sauvegarde wordpress avec cron

Maintenant qu’on a un script de sauvegarde, il serait intéressant de planifier le déclenchement du script pour avoir des sauvegardes régulièrement.

Comme d’hab sur linux quand on veut planifier quelque chose, on utilise notre ami CRON :

Cron est the planificateur de tâches sous Linux, il permet d’exécuter des commandes ou des scripts à des moments précis ou à intervalles réguliers.
Il est très utilisé pour automatiser des tâches récurrentes, comme la sauvegarde de données, la mise à jour de bases de données ou l’envoi de rapports par e-mail.

On crée le fichier save_cron dans /etc/cron.d/ qui doit contenir :

0 2 * * * /bin/bash /opt/restore_wp/save.wp
0 3 * * * find /var/backups -type f -name "wp_*" -mtime +7 -delete
  • première ligne : on déclenche notre script de sauvegarde tous les jours à 2h.
  • seconde ligne : tous les jours à 3h on fait le ménage dans nos sauvegardes, on supprime toutes les sauvegardes qui ont plus de 7 jours d’ancienneté. Tu peux augmenter la durée de rétention selon tes besoins.

Fréquence des sauvegardes wordpress

Dans mon exemple les sauvegardes sont effectuées une fois par jour mais ce n’est qu’un exemple, tu dois planifier la fréquence de tes sauvegardes selon plusieurs paramètres :

  • criticité du site
  • espace de stockage possédé
  • fréquence de mise à jour du site.

Suggestions

  • Quotidiennes : Si ton site est mis à jour régulièrement, avec de nouveaux articles ou des modifications fréquentes, des sauvegardes quotidiennes sont recommandées pour éviter de perdre trop de travail en cas de problème.
  • Hebdomadaires : Pour un site avec des mises à jour moins fréquentes alors des sauvegardes hebdomadaires peuvent suffire.
  • Mensuelles : Si ton site est plutôt statique et que les mises à jour sont rares, tu peux opter pour des sauvegardes mensuelles peuvent être appropriées.

Restaurer WordPress

restaurer wordpress ou migrer un site wordpress

Imagine un scénario où tu perds soudainement toutes les données de ton site à cause d’une erreur technique, d’une attaque malveillante ou d’une simple erreur humaine (ça arrive plus souvent que tu ne le crois !).

Pas de panique !

Si tu as pris soin de planifier des sauvegardes automatique de ton site, la restauration de WordPress te permettra de récupérer rapidement et efficacement tout ce que tu as perdu.

Les sauvegardes ne sont utiles que si tu es capable de les restaurer correctement.

Je te recommande donc de tester régulièrement tes sauvegardes pour être sûre qu’elles sont complètes et fonctionnelles.

Les étapes à suivre pour restaurer WordPress à partir d’une sauvegarde, selon les cas :

Restaurer une sauvegarde sur le même serveur :

  1. Supprimer les fichiers du dossier wordpress (généralement dans /var/www/)
  2. Décompresser l’archive wp dans le dossier wordpress
  3. Supprimer la base de données
  4. Recréer la base de données
  5. Importer le dump sql dans la base nouvellement crée.

Restaure une sauvegarde sur un autre serveur / Migration wordpress:

  1. Installer les prérequis de wordpress (php, apache, mysql)
  2. Décompresser l’archive wp dans le dossier du serveur web (/var/www)
  3. Créer la base de données
  4. Importer le dump sql dans la base nouvellement crée.
  5. Modifier les informations de connexion à la base de données dans le fichier wp-config.php (DB_NAME, DB_USER, DB_PASSWORD, DB_HOST)

Test de restauration automatisé avec docker

docker wordpress

Et pour les feignants comme moi, j’ai conçu un script pour automatiser des tests de restauration, tout est-là dedans : restore-wp.

C’est un petit projet qui crée un conteneur docker wordpress qui restaure ton site wordpress en utilisant tes dernières sauvegardes.

Pour utiliser le script :

  1. Cloner le repo
  2. Copier le dump sql et l’archive de wp dans le repo téléchargé
  3. Se positionner dans le repo et lancer la commande :
./run-docker-wp.sh

Bonus si tu utilise l’hébergement web OVH

Si tu utilises l’hébergement web de OVH, j’ai mis une option dans le script pour qu’il télécharge le dernier dump sql et les fichiers WordPress, pour cela il faut créer un fichier .env avec les variables :

host="nom_du_serveur_ou_IP"
port=22 # pour le ssh
username="user"
sftp_pass="mdp_sftp"
application_key="XXXXXX"
application_secret="XXXXXXX"
consumer_key="XXXXX"
web_service_name=""
web_db=""

Puis tu lance le script avec argument full_update :

./run-docker-wp.sh full_update

Pour les curieux : fonctionnement du script de test de restauration automatique avec docker

Le fameux script run-docker-wp.sh qui chapeaute tout :

docker rm -f wp
docker image rm debian-wp

source .env

if [[ "$1" == "update_db" ]]; then
  python3 dl_last_db.py
fi

if [[ "$1" == "update_source" ]]; then
  bash dl_src.sh
fi

if [[ "$1" == "full_update" ]]; then
  bash dl_src.sh
  python3 dl_last_db.py
fi

archive_wp=$(ls -1 wp_*.tar | sort -r | head -n 1)
db_wp=$(ls -1 wp_*.sql | sort -r | head -n 1)
docker build  -t debian-wp --build-arg archive_wp=$archive_wp --build-arg db_wp=$db_wp --build-arg domain_name=$domain_name .

docker run -tid --name wp -p 443:443 debian-wp

Explication du script

Première étape:

docker rm -f wp
docker image rm debian-wp

Pour commencer le script supprime le conteneur nommé wp et l’image docker debian-wp, tout simplement pour partir sur de bonne base si le script a déjà été joué.

Seconde étape

source .env

Si le fichier de variables .env est présent, on initialise ses variables.

Troisième étape

if [[ "$1" == "update_db" ]]; then
  python3 dl_last_db.py
fi

if [[ "$1" == "update_source" ]]; then
  bash dl_src.sh
fi

if [[ "$1" == "full_update" ]]; then
  bash dl_src.sh
  python3 dl_last_db.py
fi

Cette section du script permet d’ajouter les argument optionnels update_db, update_source et full_update.

Ces arguments sont utiles seulement si tu utilises l’offre d’hébergement Web de OVH.

  • update_db : pour télécharger et utiliser le dernier dump SQL.

  • update_source : télécharge le dossier wordpress via SFTP sur votre service Web OVH puis le compresse afin de l’utiliser pour la restauration dans le conteneur docker

  • full_update : pour faire update_db + update_source

Quatrième étape

archive_wp=$(ls -1 wp_*.tar | sort -r | head -n 1)
db_wp=$(ls -1 wp_*.sql | sort -r | head -n 1)
docker build  -t debian-wp --build-arg archive_wp=$archive_wp --build-arg db_wp=$db_wp --build-arg domain_name=$domain_name .

docker run -tid --name wp -p 443:443 debian-wp

D’abord on crée les variables archive_wp et db_wp qui sont respectivement le plus récent fichier dump sql et la plus récente archive wp.

Puis on envoi ces variables dans le Dockerfile et on construit l’image docker avec ce dockerfile (on utilise aussi la variable domain_name qu’on a récupéré avec source .env).

Enfin on lance le conteneur docker wordpress à partir de cette nouvelle image et on connecte le port 443 du conteneur sur le port 443 de la machine hôte.

Le Dockerfile

Le dockerfile utilisé par le script run-docker-wp.sh :

FROM debian:10

ARG archive_wp
ARG db_wp
ARG domain_name

RUN apt-get update && apt-get install -y default-mysql-server apache2 libapache2-mod-php openssl php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php7.3-mysql vim
COPY $db_wp /opt/$db_wp
COPY setup_db.sh /opt/setup_db.sh
RUN bash /opt/setup_db.sh

COPY edit_wp_config.sh /opt/edit_wp_config.sh
COPY vhost.conf /etc/apache2/sites-enabled/000-default.conf
COPY $archive_wp /opt/$archive_wp
RUN a2enmod ssl
RUN a2enmod rewrite
RUN openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /opt/hostname.key -out /opt/hostname.crt -subj "/C=FR/ST=France/L=Paris/O=entreprise/CN=fqdn"
RUN tar -xvf /opt/$archive_wp -C /var/
RUN bash /opt/edit_wp_config.sh


CMD apache2ctl start && mysqld
  • On démarre sur une base Debian 10
ARG archive_wp
ARG db_wp
ARG domain_name
  • On retrouve les arguments utilisé dans le script précédent. Ils serviront à spécifier les noms des fichiers d’archive WordPress, de la base de données ainsi que le nom de domaine.
RUN apt-get update && apt-get install -y default-mysql-server apache2 libapache2-mod-php openssl php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php7.3-mysql vim
  • Installation de tous les paquets necessaires pour WordPress, Apache et MySQL.
COPY $db_wp /opt/$db_wp
COPY setup_db.sh /opt/setup_db.sh
RUN bash /opt/setup_db.sh
  • On envoi le dernier dump sql et le script setup_db.sh qui va configurer MySQL (création de la base, création utilisateur wordpress, etc…).
  • On lance le script setup_db.sh.
COPY edit_wp_config.sh /opt/edit_wp_config.sh
COPY vhost.conf /etc/apache2/sites-enabled/000-default.conf
COPY $archive_wp /opt/$archive_wp
  • On envoi au conteneur :
    • le script edit_wp_config.sh (sert à modifier l’archive wordpress pour être fonctionnel sur un conteneur docker).
    • le Vhost apache
    • l’archive wordpress la plus récente.
RUN a2enmod ssl
RUN a2enmod rewrite
RUN openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /opt/hostname.key -out /opt/hostname.crt -subj "/C=FR/ST=France/L=Paris/O=entreprise/CN=fqdn"
  • Configuration des modules Apache + génération de certificats SSL auto-signée
RUN tar -xvf /opt/$archive_wp -C /var/
RUN bash /opt/edit_wp_config.sh
CMD apache2ctl start && mysqld

Enfin, cette dernière ligne démarre Apache et MySQL lorsque le conteneur est lancé.

Aller plus loin

Maintenant que tu maîtrises les bases de la sauvegarde de ton site WordPress, voici quelques pistes pour aller encore plus loin et optimiser tes pratiques en matière de sauvegarde et de sécurité.

Sauvegardes incrémentielles

Plutôt que de sauvegarder l’intégralité de ton site à chaque fois, tu peux opter pour des sauvegardes incrémentielles. Cette méthode consiste à ne sauvegarder que les fichiers qui ont été modifiés depuis la dernière sauvegarde, ce qui te permet de gagner du temps et de l’espace de stockage.

Besoin d’aide ?

Si tu rencontres des difficultés lors de la sauvegarde ou de la restauration de ton site WordPress, n’hésites pas à me contacter pour obtenir de l’aide ==> page de contact .

Je suis également disponibles pour toute question ou problème concernant ton serveur en général.

Je met à ta disposition mon expertise pour t’accompagner dans la gestion de votre site et de votre infrastructure.

Le partage nous aide à nous faire connaître, merci pour ton partage 🫀

Laisser un commentaire