New script with rotation

This commit is contained in:
Romain de Laage 2020-11-06 09:46:45 +01:00
parent 8769a7e3f1
commit 75fac0ccae
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
8 changed files with 120 additions and 114 deletions

View File

@ -1,5 +1,5 @@
BACKUP_LOCATION="CHANGEME"
SCRIPT_LOCATION="CHANGEME"
SERVICES="gitea miniflux prosody privatebin nextcloud"
BACKUP_DIR="CHANGEME"
GITEA_EXE="CHANGEME"
MF_DBHOST="CHANGEME"
MF_DBPORT=5432

View File

@ -1,30 +0,0 @@
#! /bin/bash
DATE=$(date +%m-%d-%Y)
if [ -f backup.env ]
then
export $(cat backup.env | sed 's/#.*//g' | xargs)
else
echo "Error, backup.env doesn't exist"
exit 1
fi
if [ -z "$DATE" ] || [ -z "$SCRIPT_LOCATION" ] || [ -z "$GITEA_EXE" ] || [ -z "$MF_DBHOST" ] || [ -z "$MF_DBPORT" ] || \
[ -z "$BACKUP_LOCATION" ] || [ -z "$MF_DBNAME" ] || [ -z "$MF_DBUSER" ] || [ -z "$MF_DBPASSWD" ] || [ -z "$NC_DBHOST" ] || \
[ -z "$NC_DIR" ] || [ -z "$NC_DBPORT" ] || [ -z "$NC_DBNAME" ] || [ -z "$NC_DBUSER" ] || [ -z "$NC_DBPASSWD" ] || \
[ -z "$LOG" ] || [ -z "$PB_DIR" ] || [ -z "$PROSODY_DBHOST" ] || [ -z "$PROSODY_DBPORT" ] || [ -z "$PROSODY_DBNAME" ] || \
[ -z "$PROSODY_DBUSER" ] || [ -z "$PROSODY_DBPASSWD" ]
then
echo "Error, please check your configuration in backup.env"
exit 2
fi
echo "" >> $LOG
echo "===== $DATE =====" >> $LOG
source $SCRIPT_LOCATION/gitea.sh >> $LOG
source $SCRIPT_LOCATION/miniflux.sh >> $LOG
source $SCRIPT_LOCATION/nextcloud.sh >> $LOG
source $SCRIPT_LOCATION/privatebin.sh >> $LOG
source $SCRIPT_LOCATION/prosody.sh >> $LOG

118
backup_rotation.sh Executable file
View File

@ -0,0 +1,118 @@
#! /bin/bash
TODAY=$(date --date="today" +"%m-%d-%Y")
if [ -f backup.env ]; then
export $(cat backup.env | sed 's/#.*//g' | xargs)
else
echo "Error, backup.env doesn't exist"
exit 1
fi
# Cette fonction appelle les fonctions qui s'occupent du daily, du weekly et du monthly
function main_backup
{
mkdir -p $BACKUP_DIR/{daily,weekly,monthly}
if [ -d "$BACKUP_DIR" ]; then
JOUR=$(date --date="today" +"%j")
if [ "$JOUR" = "01" ]; then
daily_backup
weekly_backup
monthly_backup
elif [ "$JOUR" = "08" -o "$JOUR" = "15" -o "$JOUR" = "22" ]; then
daily_backup
weekly_backup
else
daily_backup
fi
else
echo "Ce répertoire n'existe pas !"
fi
}
# Cette fonction s'occupe de faire un backup des services chaque jour en faisant un appel au script de backup spécifique du service
# Elle supprime également le backup qui a 7 jours (pour ne garder que 7 backups)
function daily_backup
{
TOREMOVEDATE=$(date --date="7 days ago" +"%m-%d-%Y")
for service in $(echo $SERVICES); do
backup_$service "$BACKUP_DIR/daily/$service-$TODAY"
done
rm -f $BACKUP_DIR/daily/*-$TOREMOVEDATE.*
}
# Cette fonction copie le backup du jour de chaque service du dossier daily dans le dossier weekly
# Aussi, elle supprime le backup qui date d'un mois qui est défini comme périmé
function weekly_backup
{
TOREMOVEDATE=$(date --date="1 month ago" +"%m-%d-%Y")
for service in "$SERVICES"; do
if [ -f "$BACKUP_DIR/daily/$service-$TODAY.*" ]; then
cp "$BACKUP_DIR/daily/$service-$TODAY.*" weekly
else
echo "$BACKUP_DIR/daily/$service-$TODAY.* n'existe pas !"
fi
done
rm -f $BACKUP_DIR/weekly/$service-$TODAY.*
}
# Cette fonction copie le backup du jour de chaque service du dossier daily dans le dossier monthly
# Elle supprime également le backup qui date de 4 mois car il est périmé
function monthly_backup
{
TOREMOVEDATE=$(date --date="4 month ago" +"%m-%d-%Y")
for service in "$SERVICES"; do
if [ -f "$BACKUP_DIR/daily/$service-$TODAY.*" ]; then
cp "$BACKUP_DIR/daily/$service-$TODAY.*" monthly
else
echo "$BACKUP_DIR/daily/$service-$TODAY.* n'existe pas !"
fi
done
rm -f $BACKUP_DIR/monthly/$service-$TODAY.*
}
function backup_gitea
{
echo "===== Sauvegarde de gitea ====="
sudo -u git $GITEA_EXE dump -f "$1.zip"
}
function backup_miniflux
{
echo "===== Sauvegarde de miniflux ====="
PGPASSWORD=$MF_DBPASSWD pg_dump -h $MF_DBHOST -d $MF_DBNAME -p $MF_DBPORT -U $MF_DBUSER | bzip2 -z > "$1.bz2"
}
function backup_prosody
{
echo "===== Sauvegarde de prosody ====="
PGPASSWORD=$PROSODY_DBPASSWD pg_dump -h $PROSODY_DBHOST -d $PROSODY_DBNAME -p $PROSODY_DBPORT -U $PROSODY_DBUSER | bzip2 -z > "$1.bz2"
}
function backup_privatebin
{
echo "===== Sauvegarde de privatebin ====="
tar -C $PB_DIR -czf "$1.tar.gz" cfg data
}
function backup_nextcloud
{
TMP_DIR=$(mktemp -d)
echo "===== Sauvegarde de nextcloud ====="
sudo -u www-data php $NC_DIR/occ maintenance:mode --on
PGPASSWORD=$NC_DBPASSWD pg_dump -h $NC_DBHOST -d $NC_DBNAME -p $NC_DBPORT -U $NC_DBUSER > $TMP_DIR/db.pgsql
tar -C $NC_DIR -cf "$1.tar" data themes config
tar -rf "$1.tar" -C $TMP_DIR db.pgsql
bzip2 -z "$1.tar"
sudo -u www-data php $NC_DIR/occ maintenance:mode --off
rm -rf $TMP_DIR
}
main_backup

View File

@ -1,10 +0,0 @@
#! /bin/sh
echo ""
echo "Sauvegarde de Gitea"
#Exécution du backup de Gitea
echo "Exécution du backup de Gitea"
sudo -u git $GITEA_EXE dump -f $BACKUP_LOCATION/gitea-$DATE.zip
echo "Backup effectué !"

View File

@ -1,15 +0,0 @@
#! /bin/sh
echo ""
echo "Sauvegarde de miniflux"
# Backup the database
echo "Dump de la base de données"
PGPASSWORD=$MF_DBPASSWD pg_dump -h $MF_DBHOST -d $MF_DBNAME -p $MF_DBPORT -U $MF_DBUSER > $BACKUP_LOCATION/miniflux-$DATE
# Compress backup
echo "Compression de la sauvegarde"
gzip -f $BACKUP_LOCATION/miniflux-$DATE
echo "Fichier enregistré dans dans $BACKUP_LOCATION/miniflux-$DATE.gz"
echo "Sauvegarde terminée !"

View File

@ -1,31 +0,0 @@
#! /bin/sh
TMP_DIR=$(mktemp -d)
echo ""
echo "Sauvegarde de nextcloud"
# Stop the service
echo "Mise en maintenance du service Nextcloud"
sudo -u www-data php $NC_DIR/occ maintenance:mode --on
# Backup the database
echo "Dump de la base de données"
PGPASSWORD=$NC_DBPASSWD pg_dump -h $NC_DBHOST -d $NC_DBNAME -p $NC_DBPORT -U $NC_DBUSER > $TMP_DIR/db.pgsql
# Create archive file
echo "Mise en archive des données"
tar -C $NC_DIR -cf $BACKUP_LOCATION/nextcloud-$DATE.tar data themes config
echo "Mise en archive du dump de la base de données"
tar -rf $BACKUP_LOCATION/nextcloud-$DATE.tar -C $TMP_DIR db.pgsql
echo "Compression de la sauvegarde"
gzip -f $BACKUP_LOCATION/nextcloud-$DATE.tar
echo "Fichier enregistré dans dans $BACKUP_LOCATION/nextcloud-$DATE.tar.gz"
# Restart the service
echo "Remise en fonctionnement du service Nextcloud"
sudo -u www-data php $NC_DIR/occ maintenance:mode --off
rm -rf $TMP_DIR
echo "Sauvegarde terminée !"

View File

@ -1,11 +0,0 @@
#! /bin/sh
echo ""
echo "Sauvegarde de privatebin"
# Create archive file
echo "Compression de la sauvegarde"
tar -C $PB_DIR -czf $BACKUP_LOCATION/privatebin-$DATE.tar.gz cfg data
echo "Fichier enregistré dans dans "$BACKUP_LOCATION"/privatebin-"$DATE".tar.gz"
echo "Sauvegarde terminée !"

View File

@ -1,15 +0,0 @@
#! /bin/sh
echo ""
echo "Sauvegarde de prosody"
# Backup the database
echo "Dump de la base de données"
PGPASSWORD=$PROSODY_DBPASSWD pg_dump -h $PROSODY_DBHOST -d $PROSODY_DBNAME -p $PROSODY_DBPORT -U $PROSODY_DBUSER > $BACKUP_LOCATION/prosody-$DATE
# Compress backup
echo "Compression de la sauvegarde"
gzip -f $BACKUP_LOCATION/prosody-$DATE
echo "Fichier enregistré dans dans $BACKUP_LOCATION/prosody-$DATE.gz"
echo "Sauvegarde terminée !"