[WordPress] sauvegarder son site en ligne sur un support extérieur

Objectif : sauvegarder les données de l’ensemble du site (configuration, et base de données) de manière hebdomadaire sur le serveur et transférer la backup sur le disque dur externe du raspberry qui me tient lieu de centre de stockage.

Sauvegarde automatique sur le serveur

Utilisation de Backup-Manager : nous commençons par l’installer

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install backup-manager

Puis nous indiquons le répertoire de destination de la sauvegarde, j’ai laissé la valeur par défaut : /var/archives

Puis l’on indique les répertoires que l’on souhaite sauvegarder.

J’ai touché légèrement à la configuration de backup-manager, pour cela il faut éditer le fichier suivant : nano /etc/backup-manager.conf

  • BM_REPOSITORY_USER pour que cela soit récupéré par mon utilisateur (sans sudo)
  • BM_REPOSITORY_GROUP idem
  • BM_ARCHIVE_METHOD avec la valeur "tarball-incremental mysql"
  • BM_MYSQL_DATABASES avec le nom de la base à exporter

pour lancer la sauvegarde, il faut lancer la commande suivante : sudo backup-manager ; le mieux est de programmer la sauvegarde de manière automatique avec le cron. Pour cela il faut se rendre de /etc/cron.daily créer un fichier backup-manager et mettre à l’intérieur les lignes suivantes :

#!/bin/sh
# cron script for backup-manager
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager

Cela aura pour conséquence de faire un sauvegarde journalière. Pour les tests, je l’ai laissé à cette endroit, à l’avenir je le déplacerai vers /etc/cron.weekly

Les problèmes rencontrés : j'ai eu un mysqldump: Got error: 1044: "Access denied for user 'root'@'localhost' to database 'information_schema'" when using LOCK TABLES. Il a donc fallu upgrader les droits de root sur la base de donnée, avec la commande suivante : mysql -u root -p et entrer : GRANT SELECT,LOCK TABLES ON DBNAME.* TO 'username'@'localhost';
Autre problème lors de la récupération de la sauvegarde, les fichiers incremental.bin sont à l'utilisateur root. J'ai donc fait un second script pour contourner ce problème. 
#!/bin/sh
cd /home/<path jusqu\'au backup>/backup
for file in *.incremental.bin; do
    cp $file $file.txt
    chown <user>:<group> $file.txt
done

Je l’ajoute également au cron, juste avant que ne se déclenche le rsync de la partie suivante.

Sources :

récupération de la sauvegarde

Connexion au serveur sans utiliser de mot de passe

Pour se connecter au serveur et récupérer les sauvegardes il faut pouvoir le faire de manière sécurisé et sans avoir à taper de mot de passe pour l’automatisation, la première étape est donc de mettre en place un couple de clef.

Sur le serveur local, chez moi le raspberry, je vais d’abord créer des clefs rsa privée et public avec la commande suivante :

ssh-keygen -t rsa -b 4096 -C <votreCommentaire>

Les clefs se trouve dans ~/.ssh. Puis on envoie directement la clef sur le serveur distant : `

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> <nom>@<ip>

Cela aura pour conséquence de copier la clef public sur le serveur.

Sources :

Copie d’un serveur à l’autre

# -a = tout de manière recursive
# --stats pour avoir un résumer 
# --progress pour voir la progression
# --delete supprime les différences avant le transfert
# -e 'ssh -p <port>' permet d'utiliser un autre port que le 22
# source
# destination
rsync -a --stats --progress --delete -e 'ssh -p <port>' <nom>@<ip>:/home/<nom>/backup /media/<nom>/backup_wordpress

Suite à cette commande sur le serveur de destination, la copie commence. Ensuite il reste à automatiser la tâche. Dans le dossier /home/ je mets un script nommé backup.sh avec pour contenu :

#!/bin/bash

echo '==========================================='
echo '| Lancement du script de sauvegarde RSYNC |'
echo '==========================================='
echo ''

# Date du jour & création du fichier de log
date='date +"%c"'
date_fichier_log=$(date +"%d.%m.%y")
log='/home/<nom>/logs/rsync/rsync_'$date_fichier_log'.log'

touch $log

echo '===============================================================' >> $log
echo -n 'Nouvelle sauvegarde : ' >> $log
date >> $log
echo '' >> $log

function backup_home {
  rsync -a --stats --progress --delete -e 'ssh -p <port>' <nom>@<ip>:/home/<nom>/backup /media/<nom>/backup_wordpress | tee -a $log
}

echo -e '\n\tSauvegarde du dossier wordpress'
echo -e '\t==========================\n'
backup_home 

Puis avec crontab -e on édite le cron en rajoutant la tâche suivante :

0 1 * * * sh /home/<nom>/script/backup.sh.

La synchronisation se fera toutes les nuits.

Sources :

2 commentaires sur “[WordPress] sauvegarder son site en ligne sur un support extérieur”

Les commentaires sont fermés.