From ba909944a6b646d34e4d01af2f742bb14ce317e4 Mon Sep 17 00:00:00 2001 From: Bram Prieshof Date: Thu, 11 Jun 2020 14:03:14 +0200 Subject: [PATCH] Local to Git migration --- Backup-Util.conf.example | 31 +++++++++ Backup-Util.sh | 139 +++++++++++++++++++++++++++++++++++++++ apt.list | 1 + conf.sh | 67 +++++++++++++++++++ 4 files changed, 238 insertions(+) create mode 100644 Backup-Util.conf.example create mode 100644 Backup-Util.sh create mode 100644 apt.list create mode 100644 conf.sh diff --git a/Backup-Util.conf.example b/Backup-Util.conf.example new file mode 100644 index 0000000..072edea --- /dev/null +++ b/Backup-Util.conf.example @@ -0,0 +1,31 @@ +##General Configuration +RMDAYS=14 #Days until first backup gets removed +DOMC=01 #Day of month for monthly backups +SYSTEMFILES="/etc/nginx/ /etc/apache2/ /etc/php/ /etc/mysql/ /etc/crontab /opt/" #Folders and files that will be backed + +#Remote +BACKUPSERVICE=sftp #Transfer prtocal use ftp or sftp + +REMOTESERVER= #Addres of Remote Server +REMOTEUSER= #User for Remote Server +FTPPW= #Password for FTP Server ##Comment out if SFTP is used## +REMOTEPATH=/home #Path were backup wil be stored on FTP and a site sub-folder will be made + +#SQL +DBUSER='root' #MySQL Username +DBPASS='' #MySQL Root password (syntax '') + +##SiteBackup site backup command, multiple commands are allowed +#example: SiteBackup -d domain.com -sn domain -db wp_093 -sd "/var/www/domain.com/html" -ext-files "/ext/test.txt" -ai1 -wpupdate +# +# -d "domain.com" #Site Domain name +# -sn "domain" #Sitename for storage +# -db "db_1" #Site database,single database "db_1" ,multiple databses is posible using the following contex "db_1 db_2 db3" +# -sd "/var/www/domain.com/html" #Site folder +# -ext-files "" #Extra files to get added to the site backup +# -ai1 #Enable WP all in one migration backup +# -wpupdate #Enable WP updatedb +# -nodb #Disable databse backup + + + diff --git a/Backup-Util.sh b/Backup-Util.sh new file mode 100644 index 0000000..1d5247d --- /dev/null +++ b/Backup-Util.sh @@ -0,0 +1,139 @@ +#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 + +TEMP=`getopt -a -o d: -l sn:,db:,sd:,ext-files:,ai1,wpupdate,nodb -- "$@"` +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 + ;; + *) + break + ;; + esac +done; + +DBARRY=($DBNAME) + +echo "Making backup of $SITENAME" + +##SITE Run +#creating folder +SITESENDDIR="$SENDDIR/$TODAY/$SITENAME/" +mkdir -p $SITESENDDIR + +#Creating AI1M file +if [ "$AI1" = "1" ]; then + sudo -u www-data wp --path="$SITEDIR" plugin update all-in-one-wp-migration-unlimited-extension + sudo -u www-data wp --path="$SITEDIR" plugin update all-in-one-wp-migration + sudo -u www-data wp --path="$SITEDIR" ai1wm backup + 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 + 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 + find "$TMPDIR" -name "*.sql" -printf "%P\n"| tar -czf /"$SITESENDDIR"/"$SITENAME"-DB.tar.gz --no-recursion -C "$TMPDIR" -T - #Create tar File + rm -f /"$TMPDIR"/*.sql +fi + +#Taronmogelijking SiteFiles files +tar -zcf /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz $SITEDIR $SITEEF + +#Running WP Update +if [ $WPUPDATE = 1 ]; then + wp cli update + sudo -u www-data wp --path="$SITEDIR" core update + sudo -u www-data wp --path="$SITEDIR" plugin update --all + sudo -u www-data wp --path="$SITEDIR" theme update --all +fi + +unset DOMAIN SITENAME DBNAME SITEDIR SITEEF AI1 WPUPDATE NODB DBARRY +} + +#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 +#Taring SiteFiles files +SYSSENDDIR="$SENDDIR/$TODAY/System/" +mkdir -p $SYSSENDDIR +tar -zcf /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz $SYSTEMFILES + + +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}; 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} ${REMOTESERVER}; 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}; 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}; 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" diff --git a/apt.list b/apt.list new file mode 100644 index 0000000..620b82e --- /dev/null +++ b/apt.list @@ -0,0 +1 @@ +lftp diff --git a/conf.sh b/conf.sh new file mode 100644 index 0000000..5d9f212 --- /dev/null +++ b/conf.sh @@ -0,0 +1,67 @@ +mrepo=https://git.ictmaatwerk.com/VPS-scripts/MySQL +mbranch=master + +if [ -z ${ignphpcms+x} ]; then ignphpcms=0;fi + if [ $ignphpcms != 1 ]; then +############ +# lftp # +############ + +sed -i -e '$a set ssl:verify-certificate no' /etc/lftp.conf +sed -i -e '$a set sftp:auto-confirm yes' /etc/lftp.conf + +############## +# wp-cli # +############## + +cd /opt +wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -O /opt/wp-cli.phar +wget https://raw.githubusercontent.com/wp-cli/wp-cli/v1.5.1/utils/wp-completion.bash -O /opt/wp-completion.bash +chmod +x /opt/wp-cli.phar +mv /opt/wp-cli.phar /usr/local/bin/wp + +################### +# Backup-UTIL # +################### + +mkdir -p /opt/BackupUtil +sed -i -e '$a source /opt/wp-completion.bash' ~/.bash_profile +source ~/.bash_profile +sed -i "\$a30 3 * * * root bash /opt/BackupUtil/Backup-Util.sh >/dev/null 2>&1" /etc/crontab +systemctl restart cron +wget -q -t7 "$mrepo"/raw/branch/"$mbranch"/Backup-Util.sh -O /opt/BackupUtil/Backup-Util.sh +wget -q -t7 "$mrepo"/raw/branch/"$mbranch"/config/Backup-Util/Backup-Util.unconfigured -O /opt/BackupUtil/Backup-Util.confs + +sed -i -e 's/PASSword/'$password'/g' -e 's/HOSTNAME/'$(hostname -s)'/g' /opt/BackupUtil/Backup-Util.conf +fi + +############################## +# Backup-util Site Setup # +############################## +wget -q -t7 "$mrepo"/raw/branch/"$mbranch"/config/Motd/50-bckupnotice -O /etc/update-motd.d/50-bckupnotice +chmod +x /etc/update-motd.d/50-bckupnotice + +#CMS WP +if [ $CMS = "wordpress" ]; then + echo "SiteBackup -d $domain -sn ${domain%*.*} -db $db_name -sd /var/www/$domain/html -ai1 -wpupdate" >> /opt/BackupUtil/Backup-Util.conf + #MOTD Notice + echo 'printf $red "Please run bash ~/wp-backup-Init.sh after initialisation of WP"' >> /etc/update-motd.d/50-bckupnotice + echo 'printf "\n"' >> /etc/update-motd.d/50-bckupnotice + sed -i -e 's/DOMAINname/'$domain'/' /root/wp-backup-Init.sh + wget -q -t7 "$mrepo"/raw/branch/"$mbranch"/config/Motd/wp-backup-Init.sh -O /root/wp-backup-Init.sh +fi +#CMS None +if [ $CMS = "none" ]; then + echo "SiteBackup -d $domain -sn ${domain%*.*} -sd /var/www/$domain/html -nodb" >> /opt/BackupUtil/Backup-Util.conf +fi +#CMS Nextcloud, Full non rsync +if [ $CMS = "nextcloud" ]; then + echo "SiteBackup -d $domain -sn ${domain%*.*} -db $db_name -sd /var/www/$domain/html" >> /opt/BackupUtil/Backup-Util.conf + #MOTD Notice + echo 'printf $red "Please note that Backup-Util is not optimized for Nextcloud"' >> /etc/update-motd.d/50-bckupnotice + echo 'printf "\n" >> /etc/update-motd.d/50-bckupnotice + +fi + + +