C’est fait !
Je me suis décidé à backuper mon site linuxtips en faisant une copie régulière via une tâche cron sur le disque dur de mon serveur.
J’ai ainsi un historique de 5 jours de mon site et de la base de données pour pouvoir revenir en arrière.
Mais en cas de crash disque dur ?
Eh bien j’ai tout perdu 🙁
Cela m’est déjà arrivé une fois avec un autre site, et j’étais un peu vert de devoir tout refaire…
Donc c’est décidé, je m’envoie par mail le contenu de mon site web compressé !
Problème après quelques articles créés avec des pièces jointes : Le mail devient trop gros et mon serveur postfix refuse de l’expédier car il dépasse 10Mo.
Je vais augmenter la limite de mon serveur de mail !
Mais cette fois, c’est le serveur distant qui refuse de recevoir le message…
J’ai donc pensè à un de mes sites hébergé par FREE que je n’utilise pas pour publier des infos.
Je peux l’utiliser comme stockage ( 100Mo ou 1 Go suivant l’option prise chez FREE ).
Voici le script que j’ai utilisé pour ma sauvegarde.
Il se nomme /root/scripts/backup, pensez à le rendre exécutable avec la commande « chmod +x /root/scripts/backup ».
Prérequis :
Avoir la commande lftp installée sur la machine.
Avoir créé un dossier backup à la racine du site ftp dans mon cas.
Adaptez ceci à vos besoins…
Identifier les choses à sauver, ici :
– ma base de données
– mon dossier de conf apache /etc/apache2 ( sur debian, /etc/httpd pour centos ou redhat like )
– le dossier contenant le site proprement dit, ici /var/www/linuxtips
Le script de sauvegarde
J’ai commenté le script pour ne pas avoir à ré-expliquer chaque ligne.
#!/bin/bash
# Ce script sauvegarde mon site web, et ma conf apache
# sur le disque dur et sur un serveur ftp distant
# Je donne les infos personnelles que je vais utiliser dans le script
email=mon_email@mon_fai.fr
srv_ftp=ftpperso.free.fr
login_ftp=mon_login
password_ftp=mon_password
mon_password_mysql="mon_password"
# Je détermine la date du jour
jour=`date +%d-%m-%Y`
# Je détermine le dossier où je stoque les données et je le crée
racine=/root/backup
dossier=$racine/$jour/linuxtips
mkdir -p $dossier
# Je conserve les backups pendant 5 jours seulement
# Donc, je vire les dossiers plus anciens
#
ancien=`date +%d-%m-%Y -d "5 days ago"`
rm -rf $racine/$ancien
#
# backup de la base mysql
#
mkdir -p $dossier/mysql
mysqldump -u root -p$mon_password_mysql -A -a --opt>$dossier/mysql/mysqldump-$jour.sql
# Je compresse la base
cd $dossier/mysql
gzip -f mysqldump-$jour.sql
#
# backup conf Apache
#
mkdir -p $dossier/apache
tar cvfz $dossier/apache/confwww.tgz /etc/apache2
#
# Mon site se trouve dans le dossier /var/www/linuxtips
#
# Or ce dossier est en fait un lien symbolique vers
# /var/www/linuxtips.dotspip.
#
# Ce lien peut changer en fonction du squelette spip que j'utilise.
#
# Dans un premier temps, je backupais donc /var/www/linuxtips,
# or j'obtenais le backup d'un lien, ce qui n'est pas très gros.
#
# Pour backuper le dossier linuxtips du moment sans modifier le script
# j'ai contourné le problème du lien symbolique en récupérant le nom
# du dossier en cours.
#
asauver=`ls -l /var/www/linuxtips | cut -d '>' -f 2 |tr -d ' '`
#
# Je backupe le site web
#
mkdir -p $dossier/site
tar cvfz $dossier/site/sitelinuxtips-$jour.tgz /var/www/$asauver
# Je compresse le tout dans l'archive que je vais envoyer par ftp
tar cvfz /tmp/backup-Linuxtips-$jour.tgz $dossier
RETVAL=$?
if [ "$RETVAL" -eq "0" ]; then
echo "Sauvegarde Site et Base Linuxtips OK"
# envoi email remplacé par ftp car mail trop gros
#
# echo "Sauvegarde Linuxtips OK" | mutt -x -a /tmp/backup-Linuxtips-$jour.tgz -s "Backup Site Linuxtips" $email;
# Création du fichier de commandes ftp
echo "cd backup" >/tmp/putftp
echo "put /tmp/backup-Linuxtips-$jour.tgz" >>/tmp/putftp
echo "rm backup-Linuxtips-$ancien.tgz" >>/tmp/putftp
echo "quit" >>/tmp/putftp
# Envoi du fichier par ftp sur free
lftp -e "source /tmp/putftp" -u $login_ftp,$password_ftp $srv_ftp
#
# Nettoyage des fichiers
rm -f /tmp/putftp
rm -f /tmp/backup-Linuxtips-$jour.tgz
else
echo "Sauvegarde Site Linuxtips echoué" | mutt -x -s "Backup Site et Base Linuxtips" $email;
rm -f /tmp/backup-Linuxtips-$jour.tgz
fi
Automatisation
Ce script est plannifié avec cron.
Pour cela, exécutez « crontab -e » en tant que root et ajoutez la ligne suivante :
5 0 * * * /root/scripts/backup
Cela lance mon script tous les jours à 0h05.
Je suis d’accord, ce script n’est pas super propre, il peut être amélioré et le sera certainement…
quand j’aurais du temps…
un jour… 🙂
Ceci dit, vous pouvez l’améliorer vous même, alors tout va bien…