#!/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" DB_PASSWORD="$DB_PASSWORD" SOURCE_DIR="/mnt/data/nextcloud" BACKUP_DESTINATION="$BACKUP_DESTINATION" BACKUP_ENCR_PASSPHRASE="$BACKUP_ENCR_PASSPHRASE" # Cloud Storage Authentication SFTP_USERNAME="$SFTP_USERNAME" SFTP_PASSWORD="$SFTP_PASSWORD" SFTP_FINGERPRINT="$SFTP_FINGERPRINT" # Log file LOG_FILE="$SCRIPT_ABS_LOCATION/nextcloud-backup.log" # 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."