#!/bin/bash ############### ###Variables### ############### #backup of the WWW folder WWWBACKUPDIR="/backup/WWW/" #backup of the Let's Encrypt folder LEBACKUPDIR="/backup/LE/" #Databases (MariaDB / MySQL) DBBACKUPDIR="/backup/DBs/" DBUSER="root" DBPASSWORD="rootpassword" #External FTP storage ROOTFOLDER="/backup/*" FTPSERVER="server" FTPUSER="user" FTPPASS="pass" #Archives password and folder ARCHIVEPASSWORD="password1" ARCHIVEFOLDER="/home/someuser/" #GPG options GPGPASSPHRASE="password2" GPGALGO="twofish" GPGDIGEST="SHA512" #Storing old archive name days=30 ################################################### ### !!! Don't edit anything above this line !!! ### ################################################### #Storing old archive name datediff=`date -d "today - "$days" days" +%Y%m%d`.full.7z.gpg datediffsha1=`date -d "today - "$days" days" +%Y%m%d`.full.7z.sha512 datediffsha2=`date -d "today - "$days" days" +%Y%m%d`.full.7z.gpg.sha512 ################### ###Creating dirs### ################### mkdir -p $WWWBACKUPDIR mkdir -p $LEBACKUPDIR mkdir -p $DBBACKUPDIR ############################## ###backup of the WWW folder### ############################## #Go to working dir cd $WWWBACKUPDIR #Create a backup of all the /var/www/ dir tar -czf `date +%Y%m%d`.www.tar.gz /var/www/ ############################# ###backup of the LE folder### ############################# #Go to working dir cd $LEBACKUPDIR #Create a backup of all the possible Let's Encrypt dir if [ -d "/etc/letsencrypt/" ]; then tar -czf `date +%Y%m%d`.le.etc.tar.gz /etc/letsencrypt/ fi if [ -d "/opt/letsencrypt/" ]; then tar -czf `date +%Y%m%d`.le.opt.tar.gz /opt/letsencrypt/ fi ############################# ###backup of the databases### ############################# #Go to working dir cd $DBBACKUPDIR #Extract all databases databases=`mysql -u $DBUSER -p$DBPASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` #Backup all databases for db in $databases; do if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump -u $DBUSER -p$DBPASSWORD --databases $db > `date +%Y%m%d`.$db.sql fi done ############################## ###Create protected archive### ############################## #Creating 7zip-aes encrypted archive mkdir -p /tmp/backupworkingdir/ cd /tmp/backupworkingdir/ 7za a -y -tzip -p$ARCHIVEPASSWORD -mem=AES256 `date +%Y%m%d`.full.7z $ROOTFOLDER sha512sum `date +%Y%m%d`.full.7z > `date +%Y%m%d`.full.7z.sha512 #Creating gpg-twofish encrypted file if [ -f "/usr/bin/gpg2" ]; then gpg2 -c --passphrase $GPGPASSPHRASE --batch --no-tty --yes --cipher-algo $GPGALGO --s2k-digest-algo $GPGDIGEST `date +%Y%m%d`.full.7z else gpg -c --passphrase $GPGPASSPHRASE --batch --no-tty --yes --cipher-algo $GPGALGO --s2k-digest-algo $GPGDIGEST `date +%Y%m%d`.full.7z fi sha512sum `date +%Y%m%d`.full.7z.gpg > `date +%Y%m%d`.full.7z.gpg.sha512 #move to archive folder for sending mv `date +%Y%m%d`.full.7z.gpg $ARCHIVEFOLDER mv `date +%Y%m%d`.full.7z.sha512 $ARCHIVEFOLDER mv `date +%Y%m%d`.full.7z.gpg.sha512 $ARCHIVEFOLDER ################################## ###Send to external FTP storage### ################################## cd $ARCHIVEFOLDER #Sending archive and SHA512sums to FTP storage curl -T $ARCHIVEFOLDER`date +%Y%m%d`.full.7z.gpg.sha512 ftp://$FTPSERVER --user $FTPUSER:$FTPPASS curl -T $ARCHIVEFOLDER`date +%Y%m%d`.full.7z.sha512 ftp://$FTPSERVER --user $FTPUSER:$FTPPASS curl -T $ARCHIVEFOLDER`date +%Y%m%d`.full.7z.gpg ftp://$FTPSERVER --user $FTPUSER:$FTPPASS #Purge old files curl --quote "-dele $datediff" ftp://$FTPSERVER --user $FTPUSER:$FTPPASS curl --quote "-dele $datediffsha1" ftp://$FTPSERVER --user $FTPUSER:$FTPPASS curl --quote "-dele $datediffsha2" ftp://$FTPSERVER --user $FTPUSER:$FTPPASS #Delete local files rm -f `date +%Y%m%d`.full.* ##################################### ###Deleting all local backup files### ##################################### rm -rf $WWWBACKUPDIR rm -rf $LEBACKUPDIR rm -rf $DBBACKUPDIR rm -rf /tmp/backupworkingdir/