Бэкап(backup) сайтов на удаленный ftp сервер

Бэкап сайтов на удаленный ftp сервер - пример скрипта

 
 

Бэкап сайтов на удаленный ftp сервер - пример скрипта

 

 

https://youtu.be/WNRNW_gRqIQ

 

 

 

Привет, опять сегодня у нас пример скрипта для бэкапа. Сегодняшний скрипт очень похож на показанный мной ранее. Там мы копиравали файлы на сервер бэкапов, непосредсвенно с этого самого сервера бэкапов, при помощи ftp клиента, подключаясь к хостинговому серверу, тем самым необходимо было использовать 2 скрипта - 1 на хостинге, и 1 на сервере бэкапов. Сегодня же я хочу показать вам подобный скрипт, но в отличии от упомянутого выше, мы будем слать файлы на сервер бэкапов, используя ftp, с хостингового сервера. Т.е. в данном случае ftp сервер у нас - это сервер бэкапов. Так же в этом скрипте реализована простенькая ротация бэкапов.

 

 

Для работы скрита в вашей домашней папке должны быть созданы папки tmp и backup, на удаленном ftp сервере должна быть папка backup_test.

 

Создадим файл 

Например в каталоге opt

nano www-backup.sh

И в ставим в это файл код скрипта. 

папки
web - ее будем бекапить со всем содержимым.

tmp - временная папка.

backup - в нее будут временно помещены архивы бекапов, после выполнения скрипта содержимое этой папки будет удалено.

 

И так сам текст скрипта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#задаем домашнюю папку пользгвателя, узнать ее можно подключившись к хостингу по ssh и набрав команду pwd
HOME=/home/sanglyb
#задаем имя бэкапу
FILE=site_ru_$(date +"%Y-%m-%d_%H:%M").tgz
#старый бэкап, который будет удален с сервера. Подразумевается, что ротация - 30 дневная, значит и старый бэкап будет в имени иметь дату меньше на 30 дней от сегодняшней
OLDFILE=site_ru_$(date -d 'now -30 days' +"%Y-%m-%d")*
# $HOME/web - папка с файлами сайта, если у вас будет отличаться - измените ее
tar czf $HOME/tmp/files.tgz $HOME/web
# подключение к mysql - тут не забудьте ввести ваш хост, пользователя и пароль, а так же измените название базы данных
mysqldump -h 127.0.0.1 -u sanglyb_sanglyb -ppassw0rd sanglyb_test > $HOME/tmp/mysql.sql
tar czf $HOME/backup/$FILE $HOME/tmp/*
cd $HOME/backup
rm -rf $HOME/tmp/*
#параметры подключения к ftp серверу
HOST='mytechnote.ru'
USER=Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.'
PASSWD='passw0rd'
#для подключения используется пассивный режим, если вам нужен активный - здесь и ниже при подключении к ftp уберите ключ -p
ftp -np $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
cd backup_test
put $FILE
quit
END_SCRIPT
#получаем количество файлов в папке на ftp сервере
CONTENT="$(ftp -inp $HOST <<HERE
user $USER $PASSWD
cd backup_test
ls
bye
HERE
)"
NUMBER=`echo "$CONTENT" | egrep -v "user|ls|^d|bye" | wc -l`
NUMBER=$((NUMBER-1))
#если файлов больше 30ти, удалим старый файл
if [ $NUMBER -gt 30 ]
then
ftp -np $HOST <<END_SCRIPT1
quote USER $USER
quote PASS $PASSWD
binary
prompt
cd backup_test
mdelete $OLDFILE
quit
END_SCRIPT1
fi
#удаляем локальную копию бэкапа
rm -rf $HOME/backup/$FILE
exit 0

 

Для проверки скрипта, необходимо скрипт сделать исполняемым. Команда:

chmod ugo+x www-backup.sh

Далее выполним/запустим  скрипт

./www-backup.sh

После успешного запуска скрипты, можно проверить, должн быть создан файл на яндекс диске.

Настроим cron (планировщик задач Linux)

Вызовем его командой

sudo crontab -u root -e

и в открывшемся файле добавим строку:

40 2 * * * sh /opt/www-backup.sh > /dev/null

не забудьте поставить в конце строки Enter (перенос строки!)

 

 

 

Вот такой вот скриптик. Просьба строго не судить за топорную ротацию. Да, я понимаю, что если по какой то причине будет пропущено создание бэкапа, то на сервере будет лежать лишний файл, но скрипт писался в попыхах и на коленке, и выложен просто в качестве примера.

Если кто то знает более хорошее решение для ротации файлов с использованием ftp просьба написать в комментариях или на форуме.

В остальном - в комментариях в скрипте всё в общем то написано. После его заливки на хостинг, можно добавить этот скрипт в крон, что бы бэкапы делались автоматически.