Sauvegarder WordPress et sa base de données dans une archive ZIP

Les sauvegardes, c’est important. On ne le dira jamais assez, mais il faut faire des sauvegardes. Encore et encore. Il faut aussi vérifier qu’elles fonctionnent, car une sauvegarde inutilisable n’est pas très utile, vous en conviendrez. Cela mériterait un article complet, car quelques pratiques simples vous permettent de vous protéger et de dormir tranquille. Le nombre de personnes que j’ai dépanné ou plutôt essayer de dépanner, mais il était déjà trop tard … Le disque dur avec toutes les photos de l’ordinateur familial qui est mort, le WordPress qui se fait hacker, le téléphone qui tombe dans les toilettes, les exemples sont nombreux.

Pourtant, on a beau entendre très souvent ce conseil d’être un fou de la sauvegarde, l’absence de sauvegarde occasionne malheureusement chaque jour de nombreuses victimes dans le monde. Quoi de plus rageant de perdre à jamais ses précieux fichiers.

Aujourd’hui, nous allons voir comment sauvegarder très facilement un site WordPress à l’aide d’un script. Vous pouvez bien évidemment le faire à la main et selon votre hébergeur, des options de snapshot ou de téléchargement d’archive complète de votre site sont parfois proposés. Par exemple, les snapshot de chez Digital Ocean fonctionnent très bien, mais c’est payant et selon la taille de votre site, ce sera plus ou moins cher.

Ici, on va donc parler d’un script bash que j’ai concocté qui permet de faire cela et l’avantage, c’est que vous pouvez automatiser cette sauvegarde avec une tache cron. Je pars donc du principe que votre site est hébergé sur un serveur dédié ou VPS sous une distribution Linux. Dans mon cas, j’utilise Ubuntu, mais cela n’a pas grande importance, cela devrait fonctionner sur la plupart des distributions. Une fois votre sauvegarde faite, vous pouvez même l’envoyer directement vers un autre serveur pour la stocker durablement.

Avant de commencer, si vous n’avez jamais eu besoin d’utiliser zip sur votre serveur, il faudra peut-être l’installer à l’aide de la commande suivante :

sudo apt-get install zip

Script bash pour sauvegarder tout le contenu d’un WordPress et la base de données :

Passons au vif du sujet, le script en lui-même :

#!/bin/bash

# Vérification du paramètre
if [ -z "$1" ]; then
  echo "Usage: $0 <nom_du_dossier_du_site>"
  exit 1
fi

# Paramètres de la base de données
DB_USER="your_db_username"
DB_PASSWORD="your_db_password"
DB_NAME="your_db_name"

# Dossier du site
SITE_DIR="/var/www/$1"

# Vérification de l'existence du dossier du site
if [ ! -d "$SITE_DIR" ]; then
  echo "Le dossier du site n'existe pas: $SITE_DIR"
  exit 1
fi

# Création d'un dossier temporaire pour la sauvegarde
TEMP_BACKUP_DIR="/tmp/wordpress_backup_$1_$(date +%Y%m%d%H%M%S)"
mkdir -p "$TEMP_BACKUP_DIR"

# Sauvegarde de la base de données
echo "Sauvegarde de la base de données..."
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "${TEMP_BACKUP_DIR}/database.sql"

# Vérification de la sauvegarde de la base de données
if [ $? -ne 0 ]; then
  echo "Erreur lors de la sauvegarde de la base de données."
  exit 1
fi

# Copie des fichiers du site
echo "Sauvegarde des fichiers du site..."
cp -R "$SITE_DIR" "${TEMP_BACKUP_DIR}/site_files"

# Compression de la sauvegarde
echo "Compression de la sauvegarde..."
zip -r "${1}_backup_$(date +%Y%m%d%H%M%S).zip" "$TEMP_BACKUP_DIR"

# Suppression du dossier temporaire
rm -rf "$TEMP_BACKUP_DIR"

echo "Sauvegarde terminée avec succès."

Ce script va donc ajouter l’ensemble des fichiers de votre site dans une archive et faire aussi un export de la base de données. Vous obtenez alors une belle archive zip toute propre avec l’ensemble du contenu de votre site dedans. N’oubliez pas de changer les valeurs DB_USER, DB_PASSWORD, DB_NAME.

Il est bien sur possible de fortement l’améliorer, mais je pense que c’est une bonne base si vous voulez facilement sauvegarder votre WordPress ou même tout autre site directement en dur. J’aime bien maîtriser les choses plutôt que de faire confiance aux fonctions proposées par les hébergeurs. Au moins, ici, je sais que ça marche et bien. Puis ça permet de faire un peu de script bash que j’aime bien utiliser directement sur les serveurs. Enfin, c’est totalement gratuit et pour un site qui pèse son poids, c’est appréciable.

Pour lancer le script, si vous utilisez ngninx et que vos sites de trouvent dans le dossier classique /var/www/, vous pouvez mettre ce script à la racine de ce dossier et lancer :

cd /var/www/
./script_save_zonetuto.sh nom_du_dossier_du_site

Il va alors créer une archive zip dans votre dossier de site. N’hésitez pas à me dire si vous souhaitez des améliorations et je modifierai en conséquence l’article pour aider le plus grand nombre de personnes qui passeront ici !

Laisser un commentaire