backup-automation/nextcloud/nextcloud-backup.sh
ZoopaMario 0005432b69
Some checks failed
Check Commit Messages / check-commit-message (pull_request) Successful in 15s
Lint Bash Scripts / lint-bash (pull_request) Failing after 24s
Refactor code to make linter runs succeed
This commit refactors the codebase in order to make the shellcheck
workflow pass.

It also makes shellcheck ignore common info messages, specifically:
- https://www.shellcheck.net/wiki/SC1091 -- Not following: ./../logger.sh: op...
- https://www.shellcheck.net/wiki/SC2015 -- Note that A && B || C is not if-t...
2024-12-29 15:18:41 +01:00

57 lines
2 KiB
Bash
Executable file

#!/bin/bash
SCRIPT_ABS_LOCATION=$(realpath "$(dirname "${0}")")
source "$SCRIPT_ABS_LOCATION/nextcloud-backup.env"
source "$SCRIPT_ABS_LOCATION/../logger.sh"
# Container Names
APP_CONTAINER="nextcloud-app"
DB_CONTAINER="nextcloud-db"
BACKUP_CONTAINER="duplicati"
# Database Settings
DB_USER="nextcloud"
SOURCE_DIR="/mnt/data/nextcloud"
# Put Nextcloud in Maintenance Mode
log "Putting Nextcloud in maintenance mode..."
docker exec -u www-data "$APP_CONTAINER" php occ maintenance:mode --on || { log "Error: Failed to put Nextcloud in maintenance mode."; exit 1; }
# Dump Database
log "Dumping Nextcloud database..."
DB_TMP_BAK_NAME="nextcloud-db_$(date +"%Y%m%d").bak"
docker exec "$DB_CONTAINER" /usr/bin/mariadb-dump \
--single-transaction \
-h localhost \
-u "$DB_USER" \
-p"$DB_PASSWORD" \
nextcloud > "$SOURCE_DIR/$DB_TMP_BAK_NAME" || { log "Error: Failed to dump the Nextcloud database."; exit 1; }
# Backup all files to target destination
log "Backing up Nextcloud files and database..."
docker exec "$BACKUP_CONTAINER" \
duplicati-cli backup \
"ssh://$BACKUP_DESTINATION" \
"$SOURCE_DIR/html/data" \
"$SOURCE_DIR/html/config" \
"$SOURCE_DIR/html/themes" \
"$SOURCE_DIR/$DB_TMP_BAK_NAME" \
--backup-name="nextcloud backup" \
--keep-versions=7 \
--auth-username="$SFTP_USERNAME" \
--auth-password="$SFTP_PASSWORD" \
--passphrase="$BACKUP_ENCR_PASSPHRASE" \
--ssh-fingerprint="$SFTP_FINGERPRINT" \
--prefix="nextcloud" || { log "Error: Failed to backup Nextcloud files and database."; exit 1; }
# Turn off Maintenance Mode
log "Turning off Nextcloud maintenance mode..."
docker exec -u www-data "$APP_CONTAINER" php occ maintenance:mode --off || { log "Error: Failed to turn off Nextcloud maintenance mode."; exit 1; }
# Delete temporary backup files
log "Deleting temporary backup files..."
rm "$SOURCE_DIR/$DB_TMP_BAK_NAME" || { log "Error: Failed to delete temporary databse file"; exit 1; }
log "Nextcloud backup completed successfully."