Files
VPS-scripts_Backup-Util/Backup-Util.sh
Bram Prieshof 4e4f52bc1d Add: post-backup hook Renamed:setup cms-handeler
Added funtion for runing script after Backup
Renamed bck-util cms-handeler to CMSHook-conf for future compatibility
2021-02-10 12:03:10 +01:00

207 lines
7.0 KiB
Bash

#Check for Backup-Util config file
ScriptLocation="`dirname \"$0\"`"
if [ ! -f "$ScriptLocation/Backup-Util.conf" ]; then
echo "Config file does not exist."
echo "Expected config location: $ScriptLocation/Backup-Util.conf"
echo "Exiting"
exit
fi
function SiteBackup () {
WPUPDATE=0
AI1=0
SITEBACKENC=0
TEMP=`getopt -a -o d: -l sn:,db:,sd:,ext-files:,ai1,wpupdate,nodb,snotar,srsync,srsyncdel,tarenc -- "$@"`
eval set -- "$TEMP"
while true ; do
case "$1" in
-d )
DOMAIN=$2
shift 2
;;
--sn )
SITENAME=$2
shift 2
;;
--db )
DBNAME=$2
shift 2
;;
--sd )
SITEDIR=$2
shift 2
;;
--ext-files )
SITEEF=$2
shift 2
;;
--ai1 )
AI1=1
shift 1
;;
--wpupdate )
WPUPDATE=1
shift 1
;;
--nodb )
NODB=1
shift 1
;;
--snotar )
SNOTAR=1
shift 1
;;
--srsync )
SRSYNC=1
shift 1
;;
--srsyncdel )
SRSYNCDEL=1
shift 1
;;
--tarenc )
SITEBACKENC=1
shift 1
;;
--ext-files )
SITEEF=$2
shift 2
;;
*)
break
;;
esac
done;
DBARRY=($DBNAME)
echo "Making backup of $SITENAME"
if [ ! -f "$ScriptLocation/key.bin" ] && [ $SITEBACKENC -eq 1 ] ; then
echo "Encription key not found"
exit
fi
##SITE Run
#creating folder
SITESENDDIR="$SENDDIR/$TODAY/$SITENAME/"
mkdir -p $SITESENDDIR
#Creating AI1M file
if [ "$AI1" = "1" ]; then
sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update all-in-one-wp-migration-unlimited-extension
sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update all-in-one-wp-migration
sudo -u "$SITENAME" wp --path="$SITEDIR" ai1wm backup
if [ $SITEBACKENC -eq 1 ] ; then
find "$SITEDIR"/wp-content/ai1wm-backups/ -name "*.wpress" -printf "%P\n"| tar -czf - --no-recursion -C "$SITEDIR"/wp-content/ai1wm-backups/ -T - | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-ai1wm.tar.gz #Create ai1wm tar File
cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-ai1wm.key.enc
else
find "$SITEDIR"/wp-content/ai1wm-backups/ -name "*.wpress" -printf "%P\n"| tar -czf /"$SITESENDDIR"/"$SITENAME"-ai1wm.tar.gz --no-recursion -C "$SITEDIR"/wp-content/ai1wm-backups/ -T - #Create ai1wm tar File
fi
rm -f "$SITEDIR"/wp-content/ai1wm-backups/*.wpress
fi
#Dumping DataBase(es)
if [ "$NODB" != "1" ]; then
for i in "${DBARRY[@]}"
do
mysqldump -u "$DBUSER" "$i" --password="$DBPASS" --default-character-set=utf8 > "$TMPDIR"/"$SITENAME"-"$i".sql
done
if [ $SITEBACKENC -eq 1 ] ; then
find "$TMPDIR" -name "*.sql" -printf "%P\n"| tar -czf - --no-recursion -C "$TMPDIR" -T - | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-DB.tar.gz #Create tar File
cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-DB.key.enc
else
find "$TMPDIR" -name "*.sql" -printf "%P\n"| tar -czf /"$SITESENDDIR"/"$SITENAME"-DB.tar.gz --no-recursion -C "$TMPDIR" -T - #Create tar File
fi
rm -f /"$TMPDIR"/*.sql
fi
#Taronmogelijking SiteFiles files
if [ "$SNOTAR" != "1" ]; then
if [ $SITEBACKENC -eq 1 ] ; then
tar -zcf - $SITEDIR $SITEEF | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz #Create tar File
cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-Files.key.enc
else
tar -zcf /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz $SITEDIR $SITEEF
fi
fi
#Running WP Update
if [ $WPUPDATE = 1 ]; then
wp cli update
sudo -u "$SITENAME" wp --path="$SITEDIR" core update
sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update --all
sudo -u "$SITENAME" wp --path="$SITEDIR" theme update --all
fi
if [ "$SRSYNC" = "1" ]; then
rsync -e "ssh -p$RSPORT" -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync"
fi
if [ $DOM == $DOMC ] && [ "$SRSYNCDEL" = "1" ]; then
rsync -e "ssh -p$RSPORT" --delete -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync"
fi
unset DOMAIN SITENAME DBNAME SITEDIR SITEEF AI1 WPUPDATE NODB DBARRY SNOTAR SRSYNC SRSYNCDELL
}
#Setting static Vars and getting Configuration
RMDAYS=$(sed -n '/RMDAYS/p' "$ScriptLocation/Backup-Util.conf" | sed -n 's/RMDAYS=//p' | head -n 1 | grep -o -E '[0-9]+')
LFTP=/usr/bin/lftp #Path to binary
TMPDIR=$(mktemp -d) #Your archives are here
SENDDIR=$(mktemp -d) #Sends everything in this folder to ftp
TODAY=$(date "+%d-%m-%Y") #Today's date like DD-MM-YYYY
RMDATE=$(date "+%d-%m-%Y" -d "$RMDAYS days ago") #TODAY minus X days - too old files
DOM=`date '+%d'` #Day of the month
source "$ScriptLocation/Backup-Util.conf"
echo "Making backup of System"
#SYSTEM run
if [ ! -f "$ScriptLocation/key.bin" ] && [ $SYSBACKENC -eq 1 ] ; then
echo "Encription key not found"
exit
fi
#Taring SiteFiles files
SYSSENDDIR="$SENDDIR/$TODAY/System/"
mkdir -p $SYSSENDDIR
if [ $SYSBACKENC -eq 1 ] ; then
tar -zcf - $SYSTEMFILES | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz
cp "$ScriptLocation"/key.bin.enc /"$SYSSENDDIR"/$(hostname -s)-Files.key.enc
else
tar -zcf /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz $SYSTEMFILES
fi
echo "Sending files to remote server"
if [ $BACKUPSERVICE = ftp ]; then
#Uploading and remove first backup on FTP
lftp -c "open -u ${REMOTEUSER},${FTPPW} ftp://${REMOTESERVER}:${REMOTEPORT}; mirror -p -O ${REMOTEPATH} -R -F ${SENDDIR}/*; rm -rf ${REMOTEPATH}/${RMDATE}"
#Checking and running monthly backup to FTP
if [ $DOM == $DOMC ]; then
lftp -c "open -u ${REMOTEUSER},${FTPPW} ftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly/; mirror -p -O /${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*"
fi
elif [ $BACKUPSERVICE = sftp ]; then
#Uploading and remove first backup on SFTP
lftp -c "open -u ${REMOTEUSER}, sftp://${REMOTESERVER}:${REMOTEPORT}; mirror -p -O ${REMOTEPATH} -R -F ${SENDDIR}/*; rm -rf ${REMOTEPATH}/${RMDATE}"
#Checking and running monthly backup to SFTP
if [ $DOM == $DOMC ]; then
lftp -c "open -u ${REMOTEUSER}, sftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly/; mirror -p -O ${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*"
fi
fi
#Deletes Temp Folder
echo "Clean UP"
rm -r "$SENDDIR" && rm -r "$TMPDIR"
#Check for after Backup hook script
if test -f "$ScriptLocation/Post-backup-hook.sh"; then
source "$ScriptLocation/Post-backup-hook.sh"
fi