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 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