#!/bin/bash

# on verifie que l'utilisateur du script soit bien "root"
# sinon arret du script
if [[ $EUID -ne 0 ]]; then
  echo "Vous devez être root." 1>&2
   exit 1;
fi

# on récupère la date et l'heure actuelles
# sous plusieurs formats utilisables plus tard
BACKUP_DAY=$(date +'%F')
NOW="$(date)"
DATE=$(date +'%F_%H%M%S')

# on definit ensuite les dossiers qui vont etre utilisés

# dossier à sauvegarder
DIR_TO_BACKUP="/var/www/www.mywebsite.com/htdocs"
# dossier qui contient toutes les sauvegardes
BACKUP_ROOT_DIR="/var/www/www.mywebsite.com/backups/roulement"
# dossier de destination de la sauvegarde avec la date du jour
BACKUP_DIR="${BACKUP_ROOT_DIR}/${BACKUP_DAY}"
# fichier de log (pour garder une trace de l'etat des sauvegardes)
LOG_FILE="/var/www/www.mywebsite.com/log/backup.log"

# on vérifie si le dossier à sauvegarder existe bien
# sinon arret du script
[ ! -d ${DIR_TO_BACKUP} ] && exit 1

# on vérifie si le dossier de sauvegarde existe bien
# sinon on le crée
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}

# on vérifie si le fichier de logs existe déjà
# sinon on le crée
[ ! -f ${LOG_FILE} ] && touch ${LOG_FILE}

# on construit maintenant le nom du fichier de sauvegarde avec la date et l'heure
TAR_FILE="${BACKUP_DIR}/mywebsite-${DATE}.tgz"

# c'est parti pour la sauvegarde

# on ecrit l'info dans le fichier de log
echo "==================================
[${NOW}] > Début" | tee -a ${LOG_FILE}

# on se déplace vers le dossier à sauvegarder
cd ${DIR_TO_BACKUP}
# on compresse le dossier
tar czf ${TAR_FILE} .
# on revient dans le dossier dans lequel on était
# mais sans affichier le résultat
cd - > /dev/null

# on ecrit l'info dans le fichier de log
# le nom du fichier compressé et sa taille
echo "[$(date)] > TAR file: ${TAR_FILE} : $(du -sh ${TAR_FILE}) " | tee -a ${LOG_FILE}

# si on a plus de deux sauvegardes on supprime la plus ancienne
for i in $(ls -1t ${BACKUP_ROOT_DIR} | tail -n +3); do
  rm -vrf ${BACKUP_ROOT_DIR}/${i}
  # on écrit l'info dans le fichier de log
  echo "[$(date)] > Suppression de: ${i}" | tee -a ${LOG_FILE}
done

# on envoie la dernière sauvegarde vers le serveur ftp

# mais avant on définit les variables de connexion
# le login et le pass sont définis dans le fichier /root/.netrc
HOST="dedibackup-dc3.online.net"
LOGIN="auto"
PASSWORD="auto"
EXCLUDED="*.*~"

# commande ftp
lftp -c "set ftp:list-options -a;
open ${HOST};
lcd ${BACKUP_DIR};
cd backups;
mirror --reverse \
--delete-first \
--verbose \
--exclude-glob $EXCLUDED";

# on écrit l'heure de fin dans le fichier de log
echo "[$(date)] > Fin" | tee -a ${LOG_FILE}