Sauvegarder les données d'un site web personnel: Bonjour BackupMonitor !
Dans le billet précédent j'expliquais pourquoi BackupMonitor est devenu désuet sur mon bureau Ubuntu où DejaDup résout déjà le problème des sauvegardes.
Cependant il restait un type de sauvegarde auquel je ne m'étais pas intéressé: la sauvegarde de données présentes sur un serveur distant (typiquement celles d'un site web).
Vous me direz que ce genre de sauvegarde peut certainement être pris en charge (moyennant quelques frais supplémentaires) par mon hébergeur internet, et ce serait en fait tout à fait exact ! Cependant, j'aime bien l'idée d'avoir mes données "à la maison", et s'arranger pour que ce soit le cas n’exclue pas bien évidemment de faire des sauvegarde via d'autre système (plus il y en a, mieux c'est).
Je vais donc expliquer rapidement comment j'ai configuré une sauvegarde automatique de ce type.
L'idée de départ c'est donc de jeter à la poubelle tout ce qui est au cœur de BackupMonitor et de ne conserver que les fonctionnalités triviales suivantes:
Ce script est assez simple mais a, pour cela, deux pré-requis:
Le paquet suivant backup_monitor_servers.tar.gz regroupe les deux scripts ainsi que le fichier de configuration spécifique de BackupMonitor qu'il faut copier dans ~/.config/backup-monitor/.
Bien sûr je pourrais aussi bien utiliser BackupMonitor pour faite l'ensemble de toutes les sauvegardes (sauvegarde du site web et sauvegarde locale). Ce serait plus élégant et ça m'éviterait de gérer deux outils différents pour faire des choses aussi proches.
Cependant, j'espère surtout qu'un nouvel outil pratique apparaîtra (ou peut-être tout simplement de nouvelles fonctionnalités de DejaDup) qui m'aidera à faire toutes ces sauvegardes et me permettra d'arrêter de maintenir les petits bouts de code qui constituent BackupMonitor.
En attendant, je devrais pouvoir utiliser la même astuce (mais avec des scripts différents) pour faire la sauvegarde d'autres données personnelles distantes, telles que celles des réseaux sociaux (Delicious, Google, Facebook, LastFM etc).
- rappel régulier par notification de la nécessité d'une sauvegarde
- rajout simple de nouveau scripts
- une GUI simpliste qui permet de lancer la sauvegarde via un gros bouton et d'avoir des retours sur les succès ou les erreurs du processus
#!/bin/bash # Backup data from a remote server # where backups are stored # in a directory indicated # by $HOME/backups/Latest # # WARNING: requires that you set a # ssh key allowing to access your remote # server without a password ! # # Author: Thibauld Nion # License: Public Domain # A name that will identify the data once backed up BKP_NAME=example.com # Server access configuration USERNAME=myusername SERVER_NETLOC=server.example.com # Direcotry where stuff will be downloaded BACKUP_DOWNLOAD_DIR=$BACKUP_MONITOR_DESTINATION_FOLDER/$BKP_NAME if [ -d $BACKUP_DOWNLOAD_DIR ] then echo "Removing previously created download directory $BACKUP_DOWNLOAD_DIR" rm -r $BACKUP_DOWNLOAD_DIR fi echo "Preparing to download remote backup from $SERVER_NETLOC to $BACKUP_DOWNLOAD_DIR" scp -rq $USERNAME@$SERVER_NETLOC:/home/$USERNAME/backups/Latest $BACKUP_DOWNLOAD_DIR echo "Download finished"
- qu'une clé ssh (et éventuellement un ssh-agent) soit utilisée pour accéder au serveur du site web de telle sorte que l'utilisateur n'ait pas à entrer de mot de passe.
- que, du côté serveur, un script fasse régulièrement une sauvegarde des fichiers régulier et du contenu des base de données, dans un dossier appelé $HOME/backups/Latest
- gérer plusieurs dossiers
- gérer plusieurs base de données
- créer et mettre à jour le lien symbolique "$HOME/backups/Latest" pointant vers le dernier dossier de backup
#!/bin/bash # Site backup # Adapted from http://www.dockstreetmedia.com/2011/03/automatic-site-backups-using-cron-jobs-in-dreamhost/ # specific config variables (EDIT THESE) # # Space separated list of the names of folders # below your home directory, that you want to backup DIRNAMES="topFolderA topFolderB topFolderC" # host for your site's database(s) DBHOST=mysql.example.com # user name for this mysql server DBUSER=myusername # corresponding password (the same you gave # to the applications powering your site (like wordpress etc) DBPASS=xxx # Space separated list of the names of dbs # within DBHOST that you want to backup DBNAMES="sitedb_one sitedb_two sitedb_three" # other config variables(DO NOT EDIT THESE) NOWDATE=$(date +"%y%m%d") NOWDAY=$(date +"%d") BACKUPDIR=backups MYSQLDUMP="$(which mysqldump)" LOGFILE=$HOME/$BACKUPDIR/log.txt TARGETPATH=$HOME/$BACKUPDIR/$NOWDAY LINK_TO_LATEST=$HOME/$BACKUPDIR/Latest # check to see if target path exists – if so, delete the old one and create a new one, otherwise just create it if [ -d $TARGETPATH ] then # print a message for the logfile / output email echo "$NOWDATE - Removing previous backup $TARGETPATH" | tee -a $LOGFILE rm -r $TARGETPATH mkdir -p $TARGETPATH else mkdir -p $TARGETPATH fi for SITEDIR in $DIRNAMES do # create a GZIP of the directory inside the target path tar -zcf $TARGETPATH/${SITEDIR}_$NOWDATE.tar.gz $HOME/$SITEDIR # print a message for the logfile / output email echo "$NOWDATE - $SITEDIR has been backed up" | tee -a $LOGFILE done for DBNAME in $DBNAMES do # dump the data into a SQL file inside the target path $MYSQLDUMP -u $DBUSER -h $DBHOST -p$DBPASS $DBNAME | gzip > $TARGETPATH/${DBNAME}_$NOWDATE.sql.gz # print a message for the logfile / output email echo "$NOWDATE - $DBNAME has been backed up" | tee -a $LOGFILE done # Put a link to the latest backup if [ -e $LINK_TO_LATEST ] then rm $LINK_TO_LATEST fi ln -s $TARGETPATH $LINK_TO_LATEST