Fin 2015 je suis passé de chez 1and1 en hébergement mutualisé à OVH en VPS (Virtual Private Server) pour la gestion de mes différents sites. Je me suis donc lancé sur leur offre VPS SSD et bien que j’en sois très satisfait je trouve qu’elle manque d’une chose importante pour tout admin système: les backups automatique. En effet cette fonctionnalité étant en option j’ai donc opté pour une solution « maison » permettant de mettre en place facilement l’automatisation de backups de sites, bases de données, configurations logicielles, etc. et de les sauvegarder dans n’importe quel cloud.

1. Création de backups journaliers

Dans un premier temps il faut archiver ses sites, pour cela rien de plus simple puisqu’il suffit de créer une tâche CRON journalière par site :

  1. touch /etc/daily.cron/backup
  2. chmod +x /etc/daily.cron/backup
  3. vim /etc/daily.cron/backup

Complétez et collez le code suivant :

#!/bin/sh

THESITE="NOM_DU_SITE"
THEDB="BDD_DU_SITE"

THEDBUSER="root"
THEDBPW="MDP_MYSQL"
THEDATE=`date +%d%m%y%H%M`

mysqldump -u $THEDBUSER -p${THEDBPW} $THEDB | gzip > /var/backups/files/dbbackup_${THEDB}_${THEDATE}.bak.gz

tar -czf /var/backups/files/sitebackup_${THESITE}_${THEDATE}.tar /var/www/vhost/$THESITE
gzip /var/backups/files/sitebackup_${THESITE}_${THEDATE}.tar

find /var/backups/files/site* -mtime +5 -exec rm {} \;
find /var/backups/files/db* -mtime +5 -exec rm {} \;

Dans les premières lignes on définit les paramètres nécessaires à l’archivage : nom du site, nom de la base de données, identifiants de connexion à MySQL.

Ligne 10 on exporte la base de données, puis dans les lignes 12-13 on créé l’archive des fichiers : vous devez également modifier le chemin vers le dossier de votre site par exemple.

Toutes les archives de backups sont donc stockées dans /var/backups/files, les archives vieilles de plus de 5 jours sont effacées pour éviter de prendre trop de place.

J’ai donc un fichier de ce type par site à sauvegarder, mais j’en ai également d’autres que j’ai adapté pour sauvegarder mes configurations nginx par exemple, à vous de décider ce que vous souhaitez sauvegarder 😉

2. Installation de Rclone

Maintenant que les archives sont créées automatiquement, on va installer RClone :  un programme en ligne de commande permettant de se connecter à de nombreux services de cloud (Google Drive, amazon S3, Dropbox, Amazon Cloud Drive, Microsoft One Drive, Hubic, etc.) afin de synchroniser des dossiers !

La démarche à suivre est simple :

  1. Récupérer l’url du fichier binaire de rclone adapté à votre distribution ici : http://rclone.org/downloads/
  2. Télécharger et installer le binaire sur votre plateforme

Ce qui donne par exemple :

wget http://downloads.rclone.org/rclone-v1.23-linux-amd64.zip
unzip rclone-v1.23-linux-amd64.zip
cd rclone-v1.23-linux-amd64
#copy binary file
sudo cp rclone /usr/sbin/
sudo chown root:root /usr/sbin/rclone
sudo chmod 755 /usr/sbin/rclone
#install manpage
sudo mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1/
sudo mandb 
rm rclone-v1.23-linux-amd64.zip

3. Configurer Rclone avec Google Drive (ou le cloud de votre choix)

Maintenant que Rclone est installé, il faut le lier au service cloud de votre choix pour synchroniser vos archives. La documentation d’utilisation est détaillée pour chaque plateforme : par exemple pour utiliser Google Drive j’ai simplement suivi les instructions définies ici.

La démarche est plutôt simple, dans le cas d’un serveur distant il faut choisir « N » à l’option « Use auto config? » : Rclone va vous donner un lien à ouvrir dans votre navigateur afin de l’autoriser à accéder au service souhaité, ce dernier vous donnera alors une clé d’authentification qui sera à renseigner dans le prompt de votre invite de commande.

4. Utiliser Rclone pour synchroniser vos sauvegardes avec votre cloud

Désormais pour synchroniser le dossier « /var/backups/files » de votre serveur vers le dossier « vps_backup » de Google Drive par exemple il suffit d’utiliser la commande :

 rclone sync local:/var/backups/files google_drive:vps_backup

Cette commande peut alors être utilisée dans une tâche CRON journalière pour que tout soit automatique 🙂

Commentaires