Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
linux_faq:wiki_backup [2019/11/25 12:49] adminlinux_faq:wiki_backup [2023/11/24 11:15] (current) – [Бекап на удаленный ftp] admin
Line 1: Line 1:
 +====== Бекап на удаленный ftp ======
 +Скрипт для бекапа сайта на удаленный сервер по **FTP**. \\
 +Скрипт бекапит всю рабочую директорию пофайлово (для того, чтобы сайт сразу после бекапа был доступен ан резервной площадке - бесплатного хостера), а также делает общий шифрованный архив, разбивает его на небольшие куски и кладет в директорию с текущей датой. \\
 +Скрипт проверяет, что глубина архива (число директорий с полным шифрованным архивом) не превышает заданного лимита и удаляет старое.
 +<code>
 +#!/bin/bash
 +dir_to_backup=/pve-data/kubernetes_volumes/wiki-data
 +backup_name_prefix=wiki
 +ftpserver=ftp.server.com
 +username=ftp_login
 +password=ftp_pass
 +currentdate=$(date +%d-%m-%Y_%H_%M)
 +remote_www_dir=/htdocs
 +backup_depth_days=10
 +encryption_password=enc_pass
 +tmp_dir=/pve-data/tmp
 +tmp_arc_dir=$tmp_dir/$backup_name_prefix_$currentdate
  
 +
 +#Get list of directories with full encrypted backups
 +dirs=`echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; cls --sort=date $remote_www_dir/$backup_name_prefix; bye;' ftp://$username:$password@$ftpserver" | /bin/bash`
 +dirs=(${dirs// / })
 +#check number of directories and delete oldest
 +if [[ ${#dirs[@]} -gt $backup_depth_days ]]; then
 +        for ((i = $backup_depth_days; i < ${#dirs[@]}; i++))
 +        {
 +                echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; rm -r -f ${dirs[$i]}; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +        }
 +fi
 +
 +#Create tmp folder
 +mkdir --parents $tmp_arc_dir
 +#Disable URL rewrites
 +sed -i '/userewrite/s/1/0/' $dir_to_backup/conf/local.php
 +#Make ENCRYPTED archive
 +tar -cpf - --use-compress-program=pigz $dir_to_backup | openssl enc -aes-192-cbc -pass pass:$encryption_password -out $tmp_arc_dir/$backup_name_prefix-$currentdate.tar.gz
 +#Enable URL rewrites
 +sed -i '/userewrite/s/0/1/' $dir_to_backup/conf/local.php
 +#Split archive to small parts
 +cd $tmp_arc_dir
 +split -d -a 3 -b 8000000 ./$backup_name_prefix-$currentdate.tar.gz
 +#Calculate md5 checksum
 +md5sum $tmp_arc_dir/$backup_name_prefix-$currentdate.tar.gz > $tmp_arc_dir/$backup_name_prefix-$currentdate.tar.gz.md5
 +rm -f $tmp_arc_dir/$backup_name_prefix-$currentdate.tar.gz
 +#Put archive parts to remote ftp and remove tmp dir
 +echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mkdir $remote_www_dir/$backup_name_prefix; mkdir $remote_www_dir/$backup_name_prefix/$currentdate; mirror -c -R $tmp_arc_dir $remote_www_dir/$backup_name_prefix/$currentdate; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +rm -Rf $tmp_arc_dir
 +
 +#Mirror current site to remote server
 +echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror --use-pget-n=10 -c -R -e --exclude=data/tmp/captcha/ --exclude=data/cache/  $dir_to_backup $remote_www_dir; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +#Disable URL rewrites
 +sed -i '/userewrite/s/1/0/' $dir_to_backup/conf/local.php
 +#replace remote conf.php with disabled rewrites
 +echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; put -O $remote_www_dir/conf $dir_to_backup/conf/local.php; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +#Enable URL rewrites
 +sed -i '/userewrite/s/0/1/' $dir_to_backup/conf/local.php
 +</code>
 +
 +====== Восстановление из текущей живой копии у внешнего хостера======
 +<code>
 +#!/bin/bash
 +backup_name_prefix=wiki
 +ftpserver=ftp.unaux.com
 +username=unaux_user
 +password=superpassword
 +remote_www_dir=/htdocs
 +encryption_password=superencryptionpassword
 +
 +echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c $remote_www_dir $dir_to_backup; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +</code>
 +
 +====== Восстановлние из полного шифрованного архива ======
 +<code>#!/bin/bash
 +backup_name_prefix=wiki
 +ftpserver=ftp.unaux.com
 +username=unaux_user
 +password=superpassword
 +remote_www_dir=/htdocs
 +encryption_password=superencryptionpassword
 +
 +restore_dir=~/restore
 +
 +dirs=`echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; cls --sort=date $remote_www_dir/$backup_name_prefix; bye;' ftp://$username:$password@$ftpserver" | /bin/bash`
 +dirs=(${dirs// / })
 +latest_backup_dir=${dirs[0]}
 +
 +mkdir -p $restore_dir
 +echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c $latest_backup_dir $restore_dir; bye;' ftp://$username:$password@$ftpserver" | /bin/bash
 +
 +archive_filename=`ls $restore_dir/*md5 | sed 's/.md5//'`
 +cat $restore_dir/x* > $archive_filename
 +
 +openssl enc -in $archive_filename -d -aes-192-cbc -pass pass:$encryption_password | sudo tar -xzvf - -C $restore_dir
 +</code>
  • linux_faq/wiki_backup.txt
  • Last modified: 2023/11/24 11:15
  • by admin