diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/README.md b/README.md index 9719b66..c7a3d98 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,46 @@ +
+ # Backup-CloudPanel-Nextcloud -*BorgBackup Script - CloudPanel, Nextcloud +#### BorgBackup Script - CloudPanel, Nextcloud -[![foxly.de](https://foxly.de/media/223-github-logo-png/)](https://foxly.de) +[![Commits](https://img.shields.io/github/last-commit/foxly-it/Backup-CloudPanel-Nextcloud?style=flat-square)](https://github.com/foxly-it/Backup-CloudPanel-Nextcloud/commits/main) [![GitHub release](https://img.shields.io/github/release/foxly-it/Backup-CloudPanel-Nextcloud?style=flat-square)](https://github.com/foxly-it/Backup-CloudPanel-Nextcloud/releases) [![GitHub license](https://img.shields.io/github/license/foxly-it/Backup-CloudPanel-Nextcloud?style=flat-square&color=lightgray)](LICENSE.md) [![GitHub file size in bytes](https://img.shields.io/github/size/foxly-it/Backup-CloudPanel-Nextcloud/backup.sh?style=flat-square)](https://github.com/foxly-it/Backup-CloudPanel-Nextcloud/blob/main/Backup-CloudPanel-Nextcloud.sh) +--- +[![foxly.de](https://foxly.de/media/232-png-bild-png/)](https://foxly.de) +--- +
-[![Blog](https://img.shields.io/static/v1.svg?color=FF6C54&labelColor=55555&logoColor=ffffff&style=for-the-badge&label=Foxly.de&message=IT-Blog)](https://foxly.de "How-To guides, opinions and much more!") -[![GitHub](https://img.shields.io/static/v1.svg?color=FF6C54&labelColor=55555&logoColor=ffffff&style=for-the-badge&label=Foxly.de&message=GitHub)](https://github.com/foxly-it "view the source for all of our repositories.") -[![CloudPanel](https://img.shields.io/static/v1.svg?color=398fdb&labelColor=55555&logoColor=ffffff&style=for-the-badge&label=CloudPanel.io&message=Nextcloud)](https://foxly.de/category-article-list/5-nextcloud/ "Installation Guides.") +This script is designed for [CloudPanel](CloudPanel.io). It backs up all data located in ```/home/cloudpanel``` to a Borgbackup repository. Furthermore, before the actual backup process, all databases that are specified are backed up and stored in ```/home/cloudpanel/backup```. In the script itself you have to define which database is used, e.g. MySQL/MariaDB or PostgreSQL. Adjustments that need to be changed in the script are marked with TODO. +In the script a Nextcloud instance is also considered, should this function not be used, it can simply be commented out. +Of course, this script can be adapted to other systems. -This backupscript is designed to be simple. It is adapted for [CloudPanel](CloudPanel.io). Of course there is also a focus on Nextcloud. - -It backs up both the databases and the files. - +--- ## Usage -First, a BorgBackup repository must be created. +In order to back up data, a repository must first be created. This can be created locally or on a remote computer via ssh. +*local:* ``` borg init --encryption=repokey /path/to/backup ``` +*remote:* +``` + borg init --encryption=repokey user@server.ip.or.domain:/path/to/backup +``` -Now you can adjust the script to your needs. +--- + +## Features + +* MariaDB/MySQL support +* PostgreSQL support +* Nextcloud support + +--- + +### Operating System + +#### Recommended + +* Debian 10 (__Buster__) +* Raspbian 10 (__Buster__) diff --git a/backup.sh b/backup.sh index b3173a1..f5a11c9 100644 --- a/backup.sh +++ b/backup.sh @@ -20,8 +20,10 @@ NUM_CORES=$(nproc || echo 1) #################### # Helper functions # #################### + backup_VER="v1.2.2" + str_repeat() { printf -v v "%-*s" "$1" "" echo "${v// /$2}" @@ -105,7 +107,8 @@ domain="nextcloud.domain.tld" # Here you can assign a password (Borg passphrase) for the Borg backup archive. backupPassword="P@ssw0rd" # Here you have to specify the path to the Borg repository. -backupRepo="/mnt/backup/path" + +backupRepo="/path/to/Repo" ##################################################### # TODO Database - MariaDB/MySQL or PostgreSQL # @@ -133,6 +136,7 @@ echo -e "\e[93mStart PostgreSQL database backup" databases="DATABASENAME" mkdir -p /home/cloudpanel/backups/$databases # postbackupdir="/home/cloudpanel/backups/$databases" # + sudo -u postgres pg_dump $databases > $postbackupdir/BBNC-$(date +%d-%m-%Y_%H-%M-%S).sql # echo -e "${FGREEN}Backup has been finished successfully after $(displaytime $(($(date +%s) - START)))!${FEND}" # ######################################################################################################################################################################### @@ -161,7 +165,7 @@ export BORG_REPO=$backupRepo export BORG_PASSPHRASE=$backupPassword info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } -trap 'echo $( date ) Backup unterbrochen >&2; exit 2' INT TERM +trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM info "Start backup" @@ -181,12 +185,12 @@ backup_exit=$? echo "" sudo -u $user php$phpversion $clpLocation$domain/occ maintenance:mode --off echo "" -echo "Ende des Backups:" +echo "End of the backup:" echo "Storage space usage of the backups:" echo "" df -h ${backupRepo} -info "Loeschen von alten Backups" +info "Delete old backups" # Automatically delete old backups borg prune \ --prefix '{hostname}-' \ @@ -200,10 +204,10 @@ prune_exit=$? global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) if [ ${global_exit} -eq 0 ]; then - echo -e "${FGREEN}Backup und/oder Prune erfolgreich beendet nach $(displaytime $(($(date +%s) - START)))!${FEND}" + echo -e "${FGREEN}Backup and/or Prune successfully completed after $(displaytime $(($(date +%s) - START)))!${FEND}" elif [ ${global_exit} -eq 1 ]; then - echo -e "${FYELLOW}Backup und/oder Prune beendet mit Warungen nach $(displaytime $(($(date +%s) - START)))!${FEND}" + echo -e "${FYELLOW}Backup and/or Prune ends with warnings after $(displaytime $(($(date +%s) - START)))!${FEND}" else - echo -e "${FRED}Backup und/oder Prune beendet mit Fehlern nach $(displaytime $(($(date +%s) - START)))!${FEND}" + echo -e "${FRED}Backup and/or Prune exits with errors after $(displaytime $(($(date +%s) - START)))!${FEND}" fi exit ${global_exit}