En louant des serveurs dédiés lowcost de type Kimsufi (OVH) ou Dedibox (Online.net/Free), la plus grande source de stress (pour ma part) est que le serveur devienne inaccessible, tombe en panne, ou qu'il y ait carrément pertes de données... l'offre de service étant restreinte au minimum, il faut faire avec les moyens du bord.
Si votre serveur est sous debian, je vous propose donc un petit script shell à intégrer, qui:
- passe votre site internet "en maintenance" (remplacement de fichiers .htaccess) ;
- nécessaire: à la racine de votre site /var/www/
- .htaccess
- .htaccess_maintenance (redirigeant vers une page maintenance.htm)
- effectue une maintenance de toutes les tables MySQL (optimize/repair/etc.) ;
- nécessaire: script PHP de maintenance des tables (cf. Post "Maintenance des tables d'une base de données MySQL")
- archive et compresse le système sous un nom de fichier daté (format TGZ) ;
- transfère l'archive vers votre serveur FTP tiers, dans des répertoires classés par date ;
- nécessaire: package "yafc" (client FTP)
- supprime les archives vieilles de plus de 30 jours (à régler en fonction de la capacité de votre FTP) ;
- nécessaire: tâche cron quotidienne (sinon, redéfinir un nombre de jour facteur de la fréquence de la tâche cron)
- vous envoie un email de notification au démarrage et à la fin d'exécution du script ;
Voici le contenu du script "/cron/backup.sh" à ajuster selon votre configuration :
#file: /cron/backup.sh
#source: http://y-thot.blogspot.com/
#Email de notif
email_notif="adresse@email.com"
#Configuration du FTP
ftp_login="login"
ftp_password="password"
ftp_host="adresse"
phpscript_optimisation="/var/www/maintenance_sql.php password all all"
echo 'Demarrage : ' `date`
echo "Backup commencé à " `date` | mail -s "Backup report" $email_notif
#Configurer les différents fichiers .htaccess pour la redirection vers une page maintenance.htm
echo 'Setting site to : Maintenance (htaccess moves)'
mv /var/www/.htaccess /var/www/.htaccess_moved
mv /var/www/.htaccess_maintenance /var/www/.htaccess
#Date du jour
NOW="$(date +"%d-%m-%Y")"
# Emplacement du dossier de backup local
Dir_backup_local="/ftp_backup"
[ ! -d "/var"$Dir_backup_local/ ] && mkdir -p "/var"$Dir_backup_local/ || :
echo "Optimisations des tables"
php $phpscript_optimisation
echo "Fermeture du service mysql"
service mysql stop
File_db="/var"$Dir_backup_local"/backup.$NOW.tgz"
echo "Enregistrement/compression de / :" $File_db
tar -czf $File_db / --exclude="/var"$Dir_backup_local --exclude=/proc --exclude=/dev --exclude=/sys --exclude=/mnt
#nbre de jour de backup a conserver
nbjours_backup=30
j_a_delete=$(date +%d-%m-%Y --date "$nbjours_backup days ago")
## Conf des rep de backup pour le ftp
Dir_backup_ftp="/backup/"
echo "Transfert au FTP"
## Upload sur le ftp
yafc $ftp_login:$ftp_password@$ftp_host <<EOF
mkdir $Dir_backup_ftp
cd $Dir_backup_ftp
mkdir $NOW
cd $NOW
lcd "/var"$Dir_backup_local/
put -nr *
cd ..
rm -r $j_a_delete
bye
EOF
if [ "$Dir_backup_local" != "" ]; then
cd /var/
echo "Suppression des backup locaux"
rm -r "/var"$Dir_backup_local/
fi
echo "Démarrage de mysql"
service mysql start
echo "ReOptimisations des tables"
php $phpscript_optimisation
echo 'Setting site to : Production (htaccess moves)'
mv /var/www/.htaccess /var/www/.htaccess_maintenance
mv /var/www/.htaccess_moved /var/www/.htaccess
echo 'Fin : ' `date`
echo "Backup terminé à " `date` | mail -s "Backup report" $email_notif
Une fois, le fichier créé, n'oubliez pas de lui donner les droits d'exécution en entrant dans la console :
root@ksXXXXXX:/# chmod u+x /cron/backup.sh
Au passage, vérifiez que votre script fonctionne.
Si tout est ok, il ne reste alors, plus qu'à configurer une nouvelle tache cron pour lancer quotidiennement le script. Pour se faire, lancez le programme de configuration des tâches cron:
root@ksXXXXXX:/# crontab -e
Puis ajoutez la ligne suivante (par exemple) afin de lancer l'opération de maintenance tous les jours à 05h10 du matin avec création de log :
10 05 * * * /cron/backup.sh >> /cron/backup.log
C'est fini !
Afin d'éviter de vilaines erreurs, je vous invite à ne pas
recopier directement tout le script mais à l'étudier et l'adapter en
fonction de vos besoins et de votre configuration.
Et ne lésinez pas sur les tests !
Aucun commentaire:
Enregistrer un commentaire