Forked from ronanguilloux/script-bash-redmine-backups
Last active
February 15, 2021 09:42
-
-
Save ZerooCool/b06925403f94960e32c3c52f2db81b01 to your computer and use it in GitHub Desktop.
Script de sauvegarde journalier & mensuel pour Redmine (Fichiers + Base de données)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/bash | |
# sudo sh backup_redmine.sh | |
# Last version by Zer00CooL - www.visionduweb.fr | |
# Modified by [email protected] | |
# Inspiration: https://gist.github.com/gabrielkfr/6432185 | |
# Distribué sous les termes de la licence MIT. | |
## Premier stockage en local. | |
## Créer une seule fois les dossiers qui vont stocker les sauvegardes en local. | |
# mkdir -p $HOME/backup/fichiers/redmine | |
# mkdir -p $HOME/backup/sql/redmine | |
# sudo chmod -R 640 $HOME/backup/ | |
## Deuxième stockage en local pour la synchronisation avec DropBox. (Facultatif !) | |
## Créer une seule fois les dossiers qui vont permettre la synchronisation avec DropBox. | |
# mkdir -p $HOME/Dropbox/backup/fichiers/redmine | |
# mkdir -p $HOME/Dropbox/backup/sql/redmine | |
# sudo chmod -R 640 $HOME/Dropbox/ | |
############################################################# | |
# Etape 1 - Sauvegarder la base de données MySQL de Redmine # | |
############################################################# | |
REDMINE_BDD_NOM=........................................................................ | |
REDMINE_BDD_UTILISATEUR=................................................................ | |
REDMINE_BDD_UTILISATEUR_PASSWORD=....................................................... | |
REPERTOIRE_UTILISATEUR=......................................................./home/utilisateur | |
REDMINE_REPERTOIRE_BACKUP_SQL=$REPERTOIRE_UTILISATEUR/backup/sql/redmine/ | |
REDMINE_REPERTOIRE_DROPBOX_SQL=$REPERTOIRE_UTILISATEUR/Dropbox/backup/sql/redmine/ | |
DATE_FR=$(date +%d-%m-%y_%Hh) | |
REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL=sauvegarde_sql_redmine_$DATE_FR.sql | |
PASSWORD_ARCHIVE_CHIFFREE=............................................................... | |
echo "Sauvegarder la base de données MySQL de Redmine :" | |
mysqldump --single-transaction -h localhost --user=$REDMINE_BDD_UTILISATEUR --password=$REDMINE_BDD_UTILISATEUR_PASSWORD $REDMINE_BDD_NOM > "${REDMINE_REPERTOIRE_BACKUP_SQL}${REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL}" | |
echo "La sauvegarde de la base de données est réalisée dans le dossier backup." | |
# Chiffrer la base de données. | |
# Attention un mot de passe complexe consomme d'avantage de ressources système, pouvant faire planter le script. | |
# Attention à l'heure de création de la base de données pour ne pas bloquer la sauvegarde si le fichier est mal nommé. | |
cd $REDMINE_REPERTOIRE_BACKUP_SQL | |
7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -mhe=on -p$PASSWORD_ARCHIVE_CHIFFREE $REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL.7z $REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL | |
# Télécharger la sauvegarde manuellement pour la tester en la plaçant à la racine du site. | |
# La décompression fonctionne, les chmod seront à modifier pour pouvoir lire le contenu de l'archive. | |
echo "Le chiffrement de la base de données est réalisé." | |
# Décompresser l'archive. | |
# 7z x archive.7z | |
# Supprimer l'archive non chiffrée devenue inutile du dossier de backup. | |
rm $REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL | |
echo "La sauvegarde non chiffrée de la base de données a été supprimée." | |
# Copier l'archive chiffrée de la base de données du dossier backup redmine vers Dropbox en local. | |
cp ${REDMINE_REPERTOIRE_BACKUP_SQL}${REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL}.7z ${REDMINE_REPERTOIRE_DROPBOX_SQL}${REDMINE_NOM_SAUVEGARDE_FICHIER_EXTENSION_SQL}.7z | |
echo "La sauvegarde chiffrée a été copiée vers le dossier DropBox en local." | |
################################################# | |
# Etape 2 - Sauvegarder les fichiers de Redmine # | |
################################################# | |
REPERTOIRE_PROGRAMME_REDMINE=................................./path/redmine | |
REDMINE_REPERTOIRE_BACKUP_FICHIERS=$REPERTOIRE_UTILISATEUR/backup/fichiers/redmine/ | |
REDMINE_REPERTOIRE_DROPBOX_FICHIERS=$REPERTOIRE_UTILISATEUR/Dropbox/backup/fichiers/redmine/ | |
REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ=sauvegarde_fichiers_redmine_$DATE_FR.tar.gz | |
RED_FICHIERS_CONF1=$REPERTOIRE_PROGRAMME_REDMINE/config/configuration.yml | |
RED_FICHIERS_CONF2=$REPERTOIRE_PROGRAMME_REDMINE/config/database.yml | |
RED_FICHIERS_CONF3=$REPERTOIRE_PROGRAMME_REDMINE/config/settings.yml | |
RED_FICHIERS_CONF4=$REPERTOIRE_PROGRAMME_REDMINE/public/stylesheets/application.css | |
RED_FICHIERS_CONF5=$REPERTOIRE_PROGRAMME_REDMINE/public/favicon.ico | |
RED_FICHIERS_FILES=$REPERTOIRE_PROGRAMME_REDMINE/files/ | |
RED_FICHIERS_THEME=$REPERTOIRE_PROGRAMME_REDMINE/public/themes/ | |
RED_FICHIERS_PLUGINS=$REPERTOIRE_PROGRAMME_REDMINE/plugins/ | |
# Sauvegarde journalière des fichiers importants de Redmine. | |
echo "Sauvegarde journalière de tous les fichiers de Redmine." | |
tar zcvf $REDMINE_REPERTOIRE_BACKUP_FICHIERS/$REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ $RED_FICHIERS_CONF1 $RED_FICHIERS_CONF2 $RED_FICHIERS_CONF3 $RED_FICHIERS_CONF4 $RED_FICHIERS_CONF5 $RED_FICHIERS_FILES $RED_FICHIERS_THEME $RED_FICHIERS_PLUGINS | |
echo "La sauvegarde journalière des fichiers importants de Redmine a été réalisée dans le dossier backup." | |
# Chiffrer l'archive contenant les fichiers. | |
# Attention un mot de passe complexe consomme d'avantage de ressources système, pouvant faire planter le script. | |
# Attention à l'heure de création de la base de données pour ne pas bloquer la sauvegarde si le fichier est mal nommé. | |
cd $REDMINE_REPERTOIRE_BACKUP_FICHIERS | |
7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -mhe=on -p$PASSWORD_ARCHIVE_CHIFFREE $REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ.7z $REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ | |
# Télécharger la sauvegarde manuellement pour la tester en la plaçant à la racine du site. | |
# La décompression fonctionne, les chmod seront à modifier pour pouvoir lire le contenu de l'archive. | |
echo "Le chiffrement des fichiers est réalisé." | |
# Décompresser l'archive chiffrée. | |
# 7z x archive.7z | |
# Décompresser l'archive compressée. | |
# tar xzvf fichier.tar.gz | |
# Supprimer l'archive non chiffrée devenue inutile du dossier de backup. | |
rm $REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ | |
echo "La sauvegarde non chiffrée des fichiers a été supprimée." | |
# Copier l'archive chiffrée des fichiers du dossier backup redmine vers Dropbox en local. | |
cp ${REDMINE_REPERTOIRE_BACKUP_FICHIERS}${REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ}.7z ${REDMINE_REPERTOIRE_DROPBOX_FICHIERS}${REDMINE_NOM_SAUVEGARDE_FICHIERS_EXTENSION_TAR_GZ}.7z | |
echo "La sauvegarde chiffrée a été copiée vers le dossier DropBox en local." | |
############################################################################## | |
# Etape 3 - Sauvegarder les fichiers de Redmine totalement une fois par mois # | |
############################################################################## | |
REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ=sauvegarde_mensuelle_fichiers_redmine_$DATE_FR.tar.gz | |
# Sauvegarde mensuelle de tous les fichiers de Redmine. | |
TOMORROW=`date --date=tomorrow +%d` | |
# Si demain est le jour 2 du mois, nous sommes le 1er du mois. | |
if [ $TOMORROW -eq "2" ]; then | |
echo "Début du mois : Sauvegarde mensuelle." | |
tar zcvf $REDMINE_REPERTOIRE_BACKUP_FICHIERS/$REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ $REPERTOIRE_PROGRAMME_REDMINE | |
echo "La sauvegarde mensuelle des fichiers de Redmine a été réalisée." | |
# Chiffrer l'archive contenant la sauvegarde de fichiers mensuelle. | |
# Attention un mot de passe complexe consomme d'avantage de ressources système, pouvant faire planter le script. | |
# Attention à l'heure de création de la base de données pour ne pas bloquer la sauvegarde si le fichier est mal nommé. | |
cd $REDMINE_REPERTOIRE_BACKUP_FICHIERS | |
7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -mhe=on -p$PASSWORD_ARCHIVE_CHIFFREE $REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ.7z $REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ | |
# Télécharger la sauvegarde manuellement pour la tester en la plaçant à la racine du site. | |
# La décompression fonctionne, les chmod seront à modifier pour pouvoir lire le contenu de l'archive. | |
echo "Le chiffrement de la sauvegarde mensuelle des fichiers est réalisé." | |
# Décompresser l'archive chiffrée. | |
# 7z x archive.7z | |
# Décompresser l'archive compressée. | |
# tar xzvf fichier.tar.gz | |
# Supprimer l'archive mensuelle non chiffrée devenue inutile du dossier de backup. | |
# Attention ! Si elle n'existe pas, une erreur est affichée : | |
# rm: impossible de supprimer 'sauvegarde_mensuelle_fichiers_redmine_vdw_05-04-19_05h.tar.gz': Aucun fichier ou dossier de ce type | |
rm $REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ | |
echo "La sauvegarde mensuelle non chiffrée des fichiers a été supprimée." | |
# Copier l'archive mensuelle chiffrée des fichiers du dossier backup redmine vers Dropbox en local. | |
cp ${REDMINE_REPERTOIRE_BACKUP_FICHIERS}${REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ}.7z ${REDMINE_REPERTOIRE_DROPBOX_FICHIERS}${REDMINE_NOM_SAUVEGARDE_MENSUELLE_FICHIERS_EXTENSION_TAR_GZ}.7z | |
echo "La sauvegarde mensuelle chiffrée a été copiée vers le dossier DropBox en local." | |
fi | |
############################################## | |
# Etape 4 - Purger les sauvegardes dépassées # | |
############################################## | |
REDMINE_BACKUP_JOUR_LIVE_TIME=5 | |
REDMINE_BACKUP_MOIS_LIVE_TIME=70 | |
MODEL_DELETE_BKP_SQL_JOUR=sauvegarde_*_redmine_*.sql.7z | |
MODEL_DELETE_BKP_FILE_JOUR=sauvegarde_*_redmine_*.tar.gz.7z | |
MODEL_DELETE_BKP_FILE_MOIS=sauvegarde_mensuelle_*_redmine_*.tar.gz.7z | |
# Purger les sauvegardes dépassées. | |
echo "Purger les sauvegardes dépassées dans le dossier backup." | |
find ${REDMINE_REPERTOIRE_BACKUP_SQL}${MODEL_DELETE_BKP_SQL_JOUR} -mtime +$REDMINE_BACKUP_JOUR_LIVE_TIME -exec rm {} \; | |
find ${REDMINE_REPERTOIRE_BACKUP_FICHIERS}${MODEL_DELETE_BKP_FILE_JOUR} -mtime +$REDMINE_BACKUP_JOUR_LIVE_TIME -exec rm {} \; | |
find ${REDMINE_REPERTOIRE_BACKUP_FICHIERS}${MODEL_DELETE_BKP_FILE_MOIS} -mtime +$REDMINE_BACKUP_MOIS_LIVE_TIME -exec rm {} \; | |
echo "Purger les sauvegardes dépassées dans le dossier DropBox local." | |
find ${REDMINE_REPERTOIRE_DROPBOX_SQL}${MODEL_DELETE_BKP_SQL_JOUR} -mtime +$REDMINE_BACKUP_JOUR_LIVE_TIME -exec rm {} \; | |
find ${REDMINE_REPERTOIRE_DROPBOX_FICHIERS}${MODEL_DELETE_BKP_FILE_JOUR} -mtime +$REDMINE_BACKUP_JOUR_LIVE_TIME -exec rm {} \; | |
find ${REDMINE_REPERTOIRE_DROPBOX_FICHIERS}${MODEL_DELETE_BKP_FILE_MOIS} -mtime +$REDMINE_BACKUP_MOIS_LIVE_TIME -exec rm {} \; | |
################################################################################## | |
# Permettre la synchronisation avec un chmod 755 sur le dossier Dropbox en local # | |
################################################################################## | |
# Une fois les fichiers sauvegardés et chiffrés on peut autoriser la synchronisation avecDropBox. | |
# Donner le droit 755 pour permettre la synchronisation avec le cloud Dropbox. | |
chmod -R 755 ${REPERTOIRE_UTILISATEUR}/Dropbox/ | |
# Le temps de connexion (sleep) est définit dans le script de connexion Dropbox. (3 minutes actuellement. Suffit pour déposer Redmine à distance.) | |
# chmod 640 à la fin du script de connexion Dropbox pour retirer les droits et restreindre l'accès au dossier Dropbox local. | |
# END ! | |
##################################################### | |
##################################################### | |
##################################################### | |
##################################################### | |
# Ajouter ce script dans le dossier de maintenance. # | |
##################################################### | |
# sudo bash | |
# cd ${REPERTOIRE_UTILISATEUR}/maintenance/ | |
# nano sauvegarde_redmine.sh | |
# | |
# Rappel facultatif. | |
# Lancer le script manuellement. | |
# sudo sh maintenance/sauvegarde_redmine.sh | |
##################################################### | |
##################################################### | |
##################################################### | |
########################################## | |
# Lancer le script depuis /usr/local/bin # | |
########################################## | |
# Créer un nouveau script dans le dossier /usr/local/bin. | |
cd /usr/local/bin | |
sudo nano Automatisation-sauvegarde-redmine-cron.sh | |
# Ajouter le code suivant : | |
#!/bin/bash | |
# Effectuer la sauvegarde dans le dossier Backup et Dropbox puis synchroniser vers Dropbox. | |
sudo sh /home/debian/maintenance/sauvegarde_redmine.sh | |
# La connexion Dropbox doit se lancer sans être sudo. | |
sh /usr/local/bin/Demarrer-Arreter-Dropbox.sh | |
# Lancer le script pour effectuer la sauvegarde : | |
# sh /usr/local/bin/Automatisation-sauvegarde-redmine-cron.sh | |
################################################################ | |
# Rappel facultatif : Démarrer et arrêter DropBox manuellement # | |
################################################################ | |
# cd /usr/local/bin | |
# La connexion Dropbox doit se lancer sans être sudo. | |
# sh Demarrer-Arreter-Dropbox.sh | |
# Notes pour une connexion à Dropbox : https://www.visionduweb.eu/wiki/index.php?title=Sauvegarder_et_reinstaller_Linux#Connecter_son_serveur_.C3.A0_Dropbox | |
##################################################### | |
##################################################### | |
##################################################### | |
######## | |
# Cron # | |
######## | |
# Le script doit être rendu exécutable pour une automatisation avec cron. | |
sudo chmod +x /usr/local/bin/Automatisation-sauvegarde-redmine-cron.sh | |
# Ajouter une tâche cron | |
crontab -e | |
# Sauvegarder Redmine - Tous les jours à 5h25 du matin. | |
25 5 * * * /usr/local/bin/Automatisation-sauvegarde-redmine-cron.sh >> /var/log/cron-dropbox.log 2>&1 | |
# Vérifier la présence d'un fichier de journalisation des logs. | |
# cd /var/log/ | |
# Créer le fichier si il n'existe pas déjà. | |
# sudo touch /var/log/cron-dropbox.log | |
# Le propriétaire et le groupe du fichier cron-dropbox.log ont été changés pour l'utilisateur courant du système linux. | |
# sudo chown utilisateur:utilisateur /var/log/cron-dropbox.log |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
J'avais tenté d'utiliser le chiffrement aes comme proposé ici, depuis un serveur debian, mais, il m'était alors impossible de décompresser l'archive depuis Linux Mint : https://ubuntuplace.info/questions/45715/7z-ligne-de-commande-avec-le-cryptage-le-plus-eleve-aes-256
On note dans le tutoriel que 7z n'est pas recommandé pour une sauvegarde Linux, puisqu'il ne conserverait pas les droits sur les fichiers !
Noter également la présence des accès de la base de données, ce qui n'est pas sécuritaire.
Voir à sauvegarder autrement les bases de données. (auto-mysqldump ?)
On peut envisager la création d'un fichier de log, pour confirmer les actions réalisées par la sauvegarde !
On peut envisager de dupliquer la sauvegarde vers un autre serveur, avec lftp sftp://
On peut envisager de dupliquer la sauvegarde vers un autre serveur, avec rsync pour sauvegarder uniquement les modifications !
Notes complémentaires pour améliorer le script :
https://github.com/Mettmett/debian-backup-wp
https://techarea.fr/lsci-8-sauvegarder-son-serveur-web/
https://ludovicscribe.fr/blog/script-bash-sauvegarde-site-web
https://www.memoinfo.fr/tutoriels-linux/script-sauvegarde-linux/
https://www.it-connect.fr/script-sauvegarde-des-bases-de-donnees-sous-linux/
https://openclassrooms.com/fr/courses/213631-le-multiboot-sous-gnu-linux/212934-pratique-la-sauvegarde-en-ligne-de-commande
https://wiki.debian-fr.xyz/Sauvegarder_sa_Debian_en_vue_d%27une_R%C3%A9installation_ou_Reconstruction_-_Racine_et_Home_s%C3%A9par%C3%A9s