From 66642ba90513eb4df891efb3b945147a382a72fd Mon Sep 17 00:00:00 2001 From: Roxie Gibson Date: Mon, 31 May 2021 15:42:43 +0100 Subject: [PATCH] feat: functional backup & semi-functional restore Restore is limited until I can test just dumping the sql file in the db Backup works fully and rescans files. Patch is part of the backup initiative to solidify our backup strategy --- abra.sh | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 3 deletions(-) diff --git a/abra.sh b/abra.sh index 51825b7..6ee8be7 100644 --- a/abra.sh +++ b/abra.sh @@ -1,5 +1,101 @@ +NC_APP_DIR="app:/var/www/html" + sub_occ(){ - abra__service_="app" - abra___user="www-data" - sub_app_run php /var/www/html/occ "$@" + # shellcheck disable=SC2034 + abra__service_="app" + # shellcheck disable=SC2034 + abra___user="www-data" + sub_app_run php /var/www/html/occ "$@" } + +_backup_app() { + # Copied _abra_backup_dir to make UX better on restore and backup + { + abra__src_="$1" + abra__dst_="-" + } + + # shellcheck disable=SC2154 + FILENAME="$(basename "$1").tar" + + debug "Copying '$1' to '$FILENAME'" + + silence + mkdir -p /tmp/abra + sub_app_cp > /tmp/abra/$FILENAME + unsilence +} + +next_maintenance_on() { + silence + sub_occ maintenance:mode --on > /dev/null + unsilence + debug "Nextcloud maintenance mode enabled" +} + +next_maintenance_off() { + silence + sub_occ maintenance:mode --off > /dev/null + unsilence + debug "Nextcloud maintenance mode disabled" +} + +abra_backup_app() { + # shellcheck disable=SC2154 + ARK_FILENAME="$ABRA_BACKUP_DIR/${abra__app_}_app_$(date +%F).tar.gz" + # Cant be FILENAME as that gets changed by something + next_maintenance_on + _backup_app $NC_APP_DIR/config + _backup_app $NC_APP_DIR/data + _backup_app $NC_APP_DIR/themes + # Combine archives + tar -Af /tmp/abra/config.tar /tmp/abra/data.tar + tar -Af /tmp/abra/config.tar /tmp/abra/themes.tar + gzip /tmp/abra/config.tar -c > "$ARK_FILENAME" + rm /tmp/abra/*.tar + success "Backed up 'app' to $ARK_FILENAME" + next_maintenance_off +} + +abra_backup_db() { + next_maintenance_on + _abra_backup_mysql "db" "nextcloud" + next_maintenance_off +} + +abra_backup() { + abra_backup_app && abra_backup_db +} + + +abra_restore_app() { + next_maintenance_on + # shellcheck disable=SC2034 + { + abra__src_="-" + abra__dst_=$NC_APP_DIR + } + + zcat "$@" | sub_app_cp + + next_maintenance_off + sub_occ files:scan --all > /dev/null # Needs to be run in normal mode + success "Restored 'app'" +} + +# abra_restore_db() { +# warning "Restoring the database is on a existing app and not a new one has not been tested. Use with caution." +# next_maintenance_on +# # 3wc: unlike abra_backup_db, we can assume abra__service_ will be 'db' if we +# # got this far.. + +# # shellcheck disable=SC2034 +# abra___no_tty="true" + +# DB_PASSWORD=$(sub_app_run cat /run/secrets/db_password) + +# zcat "$@" | sub_app_run mysql -u root -p"$DB_PASSWORD" wordpress + +# success "Restored 'db'" +# next_maintenance_off +# }