X-Git-Url: https://git.p6c8.net/nextcloud-backup-restore.git/blobdiff_plain/8009ba2016c480677ed9c32ac6b33f9203989429..c255038f93ab4dae3a2733be5449d1dd7a5d3321:/NextcloudBackup.sh?ds=inline diff --git a/NextcloudBackup.sh b/NextcloudBackup.sh index c038f33..6cb6b0e 100644 --- a/NextcloudBackup.sh +++ b/NextcloudBackup.sh @@ -4,7 +4,7 @@ # Bash script for creating backups of Nextcloud. # Usage: ./NextcloudBackup.sh # -# The script is based on an installation of Nextcloud using nginx and MariaDB, see https://decatec.de/home-server/nextcloud-auf-ubuntu-server-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/ +# The script is based on an installation of Nextcloud using nginx and MariaDB, see https://decatec.de/home-server/nextcloud-auf-ubuntu-server-18-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/ # # @@ -17,20 +17,25 @@ currentDate=$(date +"%Y%m%d_%H%M%S") # TODO: The directory where you store the Nextcloud backups backupMainDir="/mnt/Share/NextcloudBackups/" -# The actual directory of the current backup - this is is subdirectory of the main directory above with a timestamp +# The actual directory of the current backup - this is a subdirectory of the main directory above with a timestamp backupdir="${backupMainDir}/${currentDate}/" # TODO: The directory of your Nextcloud installation (this is a directory under your web root) nextcloudFileDir="/var/www/nextcloud" # TODO: The directory of your Nextcloud data directory (outside the Nextcloud file directory) +# If your data directory is located under Nextcloud's file directory (somewhere in the web root), the data directory should not be a separate part of the backup nextcloudDataDir="/var/nextcloud_data" +# TODO: The service name of the web server. Used to start/stop web server (e.g. 'service start') +webserverServiceName="nginx" # TODO: Your Nextcloud database name nextcloudDatabase="nextcloud_db" # TODO: Your Nextcloud database user dbUser="nextcloud_db_user" # TODO: The password of the Nextcloud database user dbPassword="mYpAsSw0rd" -# TODO: Your webserver user +# TODO: Your web server user webserverUser="www-data" +# TODO: The maximum number of backups to keep (when set to 0, all backups are kept) +maxNrOfBackups=0 # File names for backup files # If you prefer other file names, you'll also have to change the NextcloudRestore.sh script. @@ -69,13 +74,15 @@ cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --on cd ~ echo "Done" +echo # -# Stop webserver +# Stop web server # -echo "Stopping nginx..." -service nginx stop +echo "Stopping web server..." +service "${webserverServiceName}" stop echo "Done" +echo # # Backup file and data directory @@ -83,9 +90,12 @@ echo "Done" echo "Creating backup of Nextcloud file directory..." tar -cpzf "${backupdir}/${fileNameBackupFileDir}" -C "${nextcloudFileDir}" . echo "Done" +echo + echo "Creating backup of Nextcloud data directory..." tar -cpzf "${backupdir}/${fileNameBackupDataDir}" -C "${nextcloudDataDir}" . echo "Done" +echo # # Backup DB @@ -93,18 +103,45 @@ echo "Done" echo "Backup Nextcloud database..." mysqldump --single-transaction -h localhost -u "${dbUser}" -p"${dbPassword}" "${nextcloudDatabase}" > "${backupdir}/${fileNameBackupDb}" echo "Done" +echo # -# Start webserver +# Start web server # -service nginx start +echo "Starting web server..." +service "${webserverServiceName}" start +echo "Done" +echo # # Disable maintenance mode # +echo "Switching off maintenance mode..." cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --off cd ~ +echo "Done" +echo + +# +# Delete old backups +# +if (( ${maxNrOfBackups} != 0 )) +then + nrOfBackups=$(ls -l ${backupMainDir} | grep -c ^d) + + if (( ${nrOfBackups} > ${maxNrOfBackups} )) + then + echo "Removing old backups..." + ls -t ${backupMainDir} | tail -$(( nrOfBackups - maxNrOfBackups )) | while read dirToRemove; do + echo "${dirToRemove}" + rm -r ${backupMainDir}/${dirToRemove} + echo "Done" + echo + done + fi +fi +echo echo "DONE!" echo "Backup created: ${backupdir}"