wrapper backup script

This commit is contained in:
julien 2025-01-19 16:51:01 +01:00
parent 122549f077
commit 907cf4215b
6 changed files with 68 additions and 56 deletions

View File

@ -1,3 +1,5 @@
# scripts
Execute `sync.sh` to copy scripts on the server.
> `vol-restore` is not yet finished !

43
sbin/vol-backup Normal file
View File

@ -0,0 +1,43 @@
#!/bin/bash
#
# Run this script as root inside a service directory.
#
if [ -d "volumes" ]; then
# Dump mysql
if [ -d "volumes/mysql" ]; then
CONTAINER_NAME=$(echo ${PWD##*/} | sed -e 's/\.//g')_mariadb
DB_USER=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_USER"')
DB_PASSWORD=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_PASSWORD"')
DB_NAME=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_DATABASE"')
DUMP_NAME=$CONTAINER_NAME.sql
nerdctl exec -e MYSQL_PWD=$DB_PASSWORD $CONTAINER_NAME mariadb-dump -u $DB_USER $DB_NAME > volumes/$DUMP_NAME
fi
# Dump postgres
if [ -d "volumes/postgres" ]; then
CONTAINER_NAME=$(echo ${PWD##*/} | sed -e 's/\.//g')_postgres
DB_USER=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_USER"')
DB_PASSWORD=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_PASSWORD"')
DB_NAME=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_DATABASE"')
DUMP_NAME=$CONTAINER_NAME.sql
nerdctl exec -e PGPASSWORD=$DB_PASSWORD $CONTAINER_NAME pg_dump -U $DB_USER $DB_NAME > volumes/$DUMP_NAME
fi
# Compress all volumes excerpt mysql and postgres
BACKUP=${PWD##*/}.tar.zst
tar --zstd -cf /tmp/$BACKUP -C volumes .
# Put it into the storage box (pubkey needed)
STORAGE_BOX=u442569@u442569.your-storagebox.de
TODAY=$(date +%F)
ssh -p23 $STORAGE_BOX "mkdir -p $TODAY"
scp -P 23 /tmp/$BACKUP $STORAGE_BOX:/home/$TODAY
# Clean
if [ -f "volumes/$DUMP_NAME" ]; then
rm volumes/$DUMP_NAME
fi
rm /tmp/$BACKUP
fi

6
sbin/vol-backup-all Normal file
View File

@ -0,0 +1,6 @@
#!/bin/bash
for dir in /srv
cd $dir
vol-backup
done

View File

@ -1,46 +0,0 @@
#!/bin/bash
#
# Run this script as root inside a service directory.
#
if [ ! -d "volumes" ]; then
echo 'There is no data to archive ! Make sure you are in a service directory with persistent data (ie. must be a "volumes" directory there).'
exit
fi
# Dump mysql
if [ -d "volumes/mysql" ]; then
CONTAINER_NAME=$(echo ${PWD##*/} | sed -e 's/\.//g')_mariadb
DB_USER=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_USER"')
DB_PASSWORD=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_PASSWORD"')
DB_NAME=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$MYSQL_DATABASE"')
DUMP_NAME=$CONTAINER_NAME.sql
nerdctl exec -e MYSQL_PWD=$DB_PASSWORD $CONTAINER_NAME mariadb-dump -u $DB_USER $DB_NAME > volumes/$DUMP_NAME
fi
# Dump postgres
if [ -d "volumes/postgres" ]; then
CONTAINER_NAME=$(echo ${PWD##*/} | sed -e 's/\.//g')_postgres
DB_USER=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_USER"')
DB_PASSWORD=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_PASSWORD"')
DB_NAME=$(nerdctl exec $CONTAINER_NAME bash -c 'echo "$POSTGRES_DATABASE"')
DUMP_NAME=$CONTAINER_NAME.sql
nerdctl exec -e PGPASSWORD=$DB_PASSWORD $CONTAINER_NAME pg_dump -U $DB_USER $DB_NAME > volumes/$DUMP_NAME
fi
# Compress all volumes excerpt mysql and postgres
BACKUP=${PWD##*/}.tar.zst
tar --zstd -cf /tmp/$BACKUP -C volumes .
# Put it into the storage box (pubkey needed)
STORAGE_BOX=u442569@u442569.your-storagebox.de
TODAY=$(date +%F)
ssh -p23 $STORAGE_BOX "mkdir -p $TODAY"
scp -P 23 /tmp/$BACKUP $STORAGE_BOX:/home/$TODAY
# Clean
if [ -f "volumes/$DUMP_NAME" ]; then
rm volumes/$DUMP_NAME
fi
rm /tmp/$BACKUP

View File

@ -1,10 +0,0 @@
#!/bin/bash
ARCHIVE=${PWD##*/}.tar.zst
if [ -d "volumes" ]; then
rm -r volumes
fi
mkdir volumes
tar --zstd --same-owner -xvf $ARCHIVE -C volumes
# Add import .sql if db

17
sbin/vol-restore Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
#
# Run this script as root inside a service directory.
# The backup have to be in the same directory.
#
BACKUP=${PWD##*/}.tar.zst
if [ -d "volumes" ]; then
rm -r volumes
fi
mkdir volumes
tar --zstd --same-owner -xvf $BACKUP -C volumes
# Todo :
# Import .sql if there
# rm volumes/*.sql