From 2d034b4d6d53840e08bada7bdb63960efdcaed48 Mon Sep 17 00:00:00 2001 From: ZoopaMario Date: Mon, 2 Sep 2024 00:21:06 +0200 Subject: [PATCH] Create and intergrate portainer backup procedure - Add to full-backup.sh script execution --- full-backup.sh | 2 +- portainer/portainer-backup.sh | 45 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100755 portainer/portainer-backup.sh diff --git a/full-backup.sh b/full-backup.sh index cc8fecb..f47168d 100755 --- a/full-backup.sh +++ b/full-backup.sh @@ -3,7 +3,7 @@ SCRIPT_ABS_LOCATION=$(realpath "$(dirname "${0}")") # Define an array of application names -declare -a apps=("cryptpad" "immich" "duplicati" "nextcloud" "vaultwarden" "forgejo") +declare -a apps=("cryptpad" "immich" "duplicati" "nextcloud" "vaultwarden" "forgejo" "portainer") # Function to execute the backup script for each application backup_app() { diff --git a/portainer/portainer-backup.sh b/portainer/portainer-backup.sh new file mode 100755 index 0000000..0441641 --- /dev/null +++ b/portainer/portainer-backup.sh @@ -0,0 +1,45 @@ +#!/bin/bash +SCRIPT_ABS_LOCATION=$(realpath "$(dirname "${0}")") + +source $SCRIPT_ABS_LOCATION/portainer-backup.env +source $SCRIPT_ABS_LOCATION/../logger.sh + +# Container Names +APP_CONTAINER="portainer" +BACKUP_CONTAINER="duplicati" + +SOURCE_DIR="/volumes/portainer" +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/portainer-backup.log" + +# Stop portainer container +log "Stopping portainer container..." +docker stop $APP_CONTAINER || { log "Error: Failed to stop portainer."; exit 1; } + +# Backup all files to target destination +log "Backing up portainer files (including the SQLite database)..." +docker exec $BACKUP_CONTAINER \ + duplicati-cli backup \ + ssh://$BACKUP_DESTINATION \ + $SOURCE_DIR \ + --backup-name="portainer backup" \ + --keep-versions=7 \ + --auth-username=$SFTP_USERNAME \ + --auth-password=$SFTP_PASSWORD \ + --passphrase=$BACKUP_ENCR_PASSPHRASE \ + --ssh-fingerprint="$SFTP_FINGERPRINT" \ + --prefix="portainer" || { log "Error: Failed to backup portainer files and database."; exit 1; } + +# Turn off Maintenance Mode +log "Starting portainer container..." +docker start $APP_CONTAINER || { log "Error: Failed to start portainer container."; exit 1; } + +log "portainer backup completed successfully."