79 lines
2.7 KiB
Bash
79 lines
2.7 KiB
Bash
if [[ ! -z ${MAILCOW_BACKUP_LOCATION} ]]; then
|
|
BACKUP_LOCATION="${MAILCOW_BACKUP_LOCATION}"
|
|
fi
|
|
|
|
if [[ -z ${BACKUP_LOCATION} ]]; then
|
|
while [[ -z ${BACKUP_LOCATION} ]]; do
|
|
read -ep "Backup location (absolute path, starting with /): " BACKUP_LOCATION
|
|
done
|
|
fi
|
|
|
|
if [[ ! ${1} =~ (backup|restore) ]]; then
|
|
echo "First parameter needs to be 'backup' or 'restore'"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ${1} == "backup" && ! ${2} =~ (aitrainer|all|--delete-days) ]]; then
|
|
echo "Second parameter needs to be 'aitrainer', 'all' or '--delete-days'"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_LOCATION=$(echo ${BACKUP_LOCATION} | sed 's#/$##')
|
|
SCRIPT_DIR=/home/bosi/backoffice/aitrainer_backoffice
|
|
COMPOSE_FILE=${SCRIPT_DIR}/docker-compose.yml
|
|
ENV_FILE=${SCRIPT_DIR}/.env
|
|
if [ ! -f ${COMPOSE_FILE} ]; then
|
|
echo "Compose file not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using ${BACKUP_LOCATION} as backup/restore location."
|
|
echo
|
|
|
|
function backup() {
|
|
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
|
|
CMPS_PRJ=aitrainer_backoffice
|
|
mkdir -p "${BACKUP_LOCATION}/aitrainer-${DATE}"
|
|
chmod 755 "${BACKUP_LOCATION}/aitrainer-${DATE}"
|
|
#cp "${SCRIPT_DIR}/../mailcow.conf" "${BACKUP_LOCATION}/mailcow-${DATE}"
|
|
while (( "$#" )); do
|
|
case "$1" in
|
|
gitlab|all)
|
|
docker exec -t <container name> gitlab-backup create
|
|
aitrainer_db|all)
|
|
SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE})
|
|
if [[ -z "${SQLIMAGE}" ]]; then
|
|
echo "Could not determine SQL image version, skipping backup..."
|
|
shift
|
|
continue
|
|
else
|
|
echo "Using SQL image ${SQLIMAGE}, starting..."
|
|
docker exec aitrainer-backup sh -c 'exec mysqldump --all-databases -uroot -p${MYSQL_ROOT_PASSWORD}' > ${BACKUP_LOCATION}/all-databases.sql
|
|
|
|
docker run --name aitrainer-backup --rm \
|
|
#-v $(docker volume ls -qf name=^aitrainer_backoffice_mysql-vol-1$):/var/lib/mysql/:ro,z \
|
|
#-t --entrypoint= \
|
|
#--sysctl net.ipv6.conf.all.disable_ipv6=1 \
|
|
-v ${BACKUP_LOCATION}/aitrainer-${DATE}:/backup:z \
|
|
${SQLIMAGE} /bin/sh -c "mysqldump --host mysql-server --user root --password ${MYSQL_ROOT_PASSWORD} --backup --rsync --target-dir=/backup_mysql ; \
|
|
mysqldump --prepare --target-dir=/backup_mysql ; \
|
|
chown -R 999:999 /backup_mysql ; \
|
|
/bin/tar --warning='no-file-ignored' --use-compress-program='gzip --rsyncable' -Pcvpf /backup/backup_mysql.tar.gz /backup_mysql ;"
|
|
;;&
|
|
fi
|
|
--delete-days)
|
|
shift
|
|
if [[ "${1}" =~ ^[0-9]+$ ]]; then
|
|
find ${BACKUP_LOCATION}/aitrainer-* -maxdepth 0 -mmin +$((${1}*60*24)) -exec rm -rvf {} \;
|
|
else
|
|
echo "Parameter of --delete-days is not a number."
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
}
|
|
|
|
if [[ ${1} == "backup" ]]; then
|
|
backup ${@,,}
|
|
fi |