La machine en question ne dispose que de 40Go d’espace disque, du coup on est trop juste pour appliquer nos scripts de backup habituels.
Le nouvelle méthode se base sur un script unique qui reprend le fonctionnement du script précédent pour la sauvegardes des bases SQL et qui utilise rsync pour la sauvegarde des fichiers des sites.
Les sauvegardes sont effectuées sur un hébergement mutualisé d’OVH.
Mise en place des clés SSH
Afin de permettre à rsync de se connecter au serveur de backup, on va mette en place des clés SSH sur celui-ci. [1]
Depuis le serveur de production, logué en tant que root, générez une clé RSA (sans préciser de passphrase) et affichez son contenu :
ssh-keygen -t rsa -b 2048
cat ~/.ssh/id_rsa.pub
Copiez le contenu de la clé et loguez-vous sur le serveur de backup en ssh.
À la racine de l’hébergement mutualisé, créez un répertoire .ssh et appliquez lui les droits suffisants :
mkdir .ssh
chmod 700 .ssh
Créez le fichier contenant les clés autorisées et collez-y le contenu de la clé copiée depuis le serveur de production :
nano .ssh/authorized_keys
Puis, réglez les droits du fichier en question :
chmod 644 .ssh/authorized_keys
Et voilà, vous pouvez utiliser rsync depuis votre serveur de production vers le serveur de backup sans avoir à entrer de mot de passe.
Script de backup
Voici le script que j’utilise pour envoyer les sauvegardes vers le répertoire state situé à la racine du serveur de backup :
https://gist.github.com/brunob/2861a663967ba5796d89
Ce que fait le script :
- sauvegarde de toutes les bases de données dans un sous répertoire de /var/state (à créer s’il n’existe pas)
- synchronisation du répertoire /var/www en excluant les répertoires tmp/ et local/ des sites SPIP hébergés
- synchronisation du répertoire /etc/apache2/sites-available pour sauvegarder les vhosts d’Apache
- transfert des dumps SQL avec lftp puis suppression de l’ancienne archive sur le serveur de backup et en local
Notez la subtilité lftp -u ${user_ftp},dumb
dans la commande lftp, qui permet de passer un mot de passe "bidon" à lftp afin qu’il utilise notre clé SSH pour l’identification (au lieu d’afficher une demande de mot de passe). Ainsi on ne stocke pas de mot de passe dans le script.