From de05d31ffa77d846d71b6fe3ad089a8dd8c36ed0 Mon Sep 17 00:00:00 2001 From: MilesTEG Date: Tue, 13 Apr 2021 23:53:40 +0200 Subject: [PATCH] =?UTF-8?q?Script=20de=20backup=20des=20donn=C3=A9es=20de?= =?UTF-8?q?=20Gitea.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose/gitea/gitea-backup.sh | 184 +++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 docker-compose/gitea/gitea-backup.sh diff --git a/docker-compose/gitea/gitea-backup.sh b/docker-compose/gitea/gitea-backup.sh new file mode 100644 index 0000000..27f738b --- /dev/null +++ b/docker-compose/gitea/gitea-backup.sh @@ -0,0 +1,184 @@ +##============================================================================================== +## ## +## Script gitea-backup.sh ## +## ## +##============================================================================================== +## ## +## gitea-backup.sh [] ## +## est facultatif. S'il n'est pas spécifié, on fait les deux ! ## +## = gitea_dump ## +## = archive_dossier ## +## ## +##============================================================================================== +##============================================================================================== +## ## +## Objectif du script : faire une sauvegarde de l'installation Gitea @ Docker ## +## Il y a aura un shutdown du conteneur le temps de la sauvegarde afin que la base de ## +## données ne soit pas modifiée pendant le backup, puis le conteneur sera redémarré. ## +## ## +## Il faudra créer une tâche planifiée pour lancer la sauvegarde toutes les nuits, par ## +## exemple à 3h du matin. ## +## ## +##============================================================================================== +## ## +## Une méthode officielle de backup de la base de données est présente ici : ## +## https://docs.gitea.io/en-us/backup-and-restore/#backup-command-dump ## +## ## +##============================================================================================== + + + +# Récupération des arguments qu'on place dans des variables constantes +declare -r nb_arg=$# # Nombre d'argument(s) fourni(s) au script. +declare -r methode="$1" # 1er argument fourni + +if [ $methode = "--help" -o $methode = "-help" -o $methode = "--h" -o $methode = "-h" ]; then + echo "Le script gitea-backup.sh permet de faire une sauvegarde des données du conteneur Gitea." + echo "Utilisation : gitea-backup.sh []" + echo "L'argument est facultatif. S'il n'est pas spécifié, on fait les deux !" + echo " = gitea_dump" + echo " = archive_dossier" + echo + exit 0 +fi + +mode_backup=0 # 0 = aucune méthode indiquée ; 1 = gitea_dump ; 2 = archive_dossier + +##──── ──────────────────────────────────────────────────────────────────────────────────────── +##──── ──────────────────────────────────────────────────────────────────────────────────────── +## ## +## VALEURS À PERSONNALISER ## +## ## +## Chemin d'accès vers votre dossier docker et vers le dossier de backup de gitea ## + +# Chemin du dossier qui contient le dossier des données (data) et des backups (backup-data) +GITEA_DOCKER_DIR=/volume1/docker/gitea + +# Les noms des dossiers montés dans le conteneur doivent êtres identiques à ceux présents sur la machine hôte. Sinon faudra modifier le script... +# Nom du dossier contenant les backups qui doit exister car il doit être monté dans le conteneur à l'aide du docker-compose.yml. +GITEA_BACKUP_DIR=backup-data + +# Nom du dossier contenant les donneés de Gitea (data) +GITEA_DATA_DIR=data + +# Nom du conteneur +NOM_CONTENEUR=gitea + +# ID de l'utilisateur du NAS qui a les droits sur le conteneur +ID_USER_NAS=1060 + +##──── ──────────────────────────────────────────────────────────────────────────────────────── +##──── ──────────────────────────────────────────────────────────────────────────────────────── + + +echo "$(date "+%R:%S - ") Script de sauvegarde des données du conteneur Gitea" + + +##============================================================================================== +## Vérification de la présence des dossiers du conteneur ## + +cd $GITEA_DOCKER_DIR +num_erreur=$? # On stocke le code de retour de la commande précédente. +if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. + echo " Le chemin '$GITEA_DOCKER_DIR' est invalide ! Veuillez vérifier le chemin d'accès..." + echo " Abandon, avec code d'erreur $num_erreur" + exit $num_erreur +fi + +if [ ! -d "$GITEA_BACKUP_DIR" -o ! -d "$GITEA_DATA_DIR" ]; then # Au moins un des dossiers n'existe pas + + if [ ! -d "$GITEA_BACKUP_DIR" ]; then # Le dossier $GITEA_BACKUP_DIR n'existe pas ! + echo " Le dossier '$GITEA_BACKUP_DIR' n'existe pas !" + fi + if [ ! -d "$GITEA_DATA_DIR" ]; then # Le dossier $GITEA_DATA_DIR n'existe pas ! + echo " Le dossier '$GITEA_DATA_DIR' n'existe pas !" + fi + echo " Abandon, avec code d'erreur $num_erreur" + exit 999 + +else + echo "-- Les dossiers $GITEA_BACKUP_DIR et $GITEA_DATA_DIR existent bien. On peut continuer." +fi +##============================================================================================== + + +##============================================================================================== +## ## +## Définition du mode de backup à faire en fonction de la méthode donnée en argument ## +case $methode in + gitea_dump) # Méthode gitea_dump sélectionnée ## + mode_backup=1 + #echo "mode_backup=$mode_backup" + ;; + + archive_dossier) # Méthode archive_dossier sélectionnée ## + mode_backup=2 + #echo "mode_backup=$mode_backup" + ;; + + *) # Aucune méthode sélectionnée ## + mode_backup=0 + #echo "mode_backup=$mode_backup" + ;; +esac +##============================================================================================== + + +##============================================================================================== +## ## +## Partie concernant les sauvegardes ## +if [ $mode_backup -eq 0 -o $mode_backup -eq 1 ]; then + # Aucune méthode n'est choisie ou bien méthode gitea_dump sélectionnée + + # Rappel des variables : + # GITEA_DOCKER_DIR=/volume1/docker/gitea + # GITEA_BACKUP_DIR=backup-data + # GITEA_DATA_DIR=data + # NOM_CONTENEUR=gitea + # ID_USER_NAS=1060 + + echo "-- Sauvegarde via Gitea dump. (un peu chiant à restaurer...)" + echo "###############################################################################" + # Dans la commande suivante, les chemins d'accès donnés en paramètres sont des chemins d'accès à l'intérieur du conteneur, montés avec le docker-compose.yml. + # Exemple de commande sans variables : + # docker exec -u 1060 -it -w /backup-data $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini' + docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini" + num_erreur=$? # On stocke le code de retour de la commande précédente. + if [ $num_erreur -ne 0 ]; then # Si ce code n'est pas 0, il y a eu une erreur, on arrète le script. + echo " Erreur lors de la commande de backup gitea dump." + echo " Commande lancée :" + echo " docker exec -u $ID_USER_NAS -it -w /$GITEA_BACKUP_DIR $(docker ps -qf "name=$NOM_CONTENEUR") bash -c "/app/gitea/gitea dump -c /$GITEA_DATA_DIR/gitea/conf/app.ini"" + echo " Abandon, avec code d'erreur $num_erreur" + exit $num_erreur + fi + echo "###############################################################################" + echo "-- Sauvegarde via Gitea dump terminée." +fi + + +if [ $mode_backup -eq 0 -o $mode_backup -eq 2 ]; then + # Aucune méthode n'est choisie ou bien méthode archive_dossier sélectionnée + echo "-- Sauvegarde par création d'une archive de tout le dossier $GITEA_DATA_DIR" + echo "###############################################################################" + echo "-- Extinction du conteneur $NOM_CONTENEUR" + cd $GITEA_DOCKER_DIR # Même si on est censé déjà être là... + docker stop $NOM_CONTENEUR + + tar -czf $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.tar.gz ./$GITEA_DATA_DIR + # On Linux/Unix, in order to backup directories you must use tar : + # - to backup a directory : tar cf - directory | 7z a -si directory.tar.7z + # - to restore your backup : 7z x -so directory.tar.7z | tar xf - + tar cf - ./$GITEA_DATA_DIR | 7z a -si $GITEA_BACKUP_DIR/Gitea-Data-Backup-`date +%Y-%m-%d--%Hh%Mm%Ss`.7z + echo "-- Archive de tout le dossier $GITEA_DATA_DIR créée." + + echo "-- Redémarrage du conteneur Gitea..." + docker start $NOM_CONTENEUR + echo "###############################################################################" + echo "-- Processus de sauvegarde par création d'archive terminé." + +fi + +echo "$(date "+%R:%S - ") Fin du script de sauvegarde des donneés du conteneur Gitea" +exit 0 +## ## +##============================================================================================== \ No newline at end of file