Бэкап сайтов на ftp при нехватке места на сервере.
В данное время эта проблемам стала актуальной, поскольку все чаще используются SSD накопители, однако объем от этого не увеличился.
И зачастую даже один backup всех сайтов не помещается на этот диск. Для этого нам придется делать backup каждого сайта по отдельности и передавать на внешний ftp сервер, после передачи сразу удаляя его с сервера.
Конечно можно использовать и более продвинутый вариант, в котором мы вовсе не будем затрагивать файловую структуру и сразу из памяти копировать на внешнее устройство.
Такое решение подойдет, если у нас занято 100% дискового пространства, но есть и ограничение в размере памяти. А размер сайтов и количество оставшейся памяти вещь которую трудно прогнозировать.
Хотя и тут можно подумать. Текущий же вариант подойдет к любому серверу.
Для этого нам понадобится поставить сторонний софт wput поскольку он хорошо умеет ограничивать скорость upload, что может ограничить нагрузки на I-O дисковой подсистемы, особенно это актуально если у нас классические HDD.
В данном случае, я выставил ограничение в 60 Мегабайт в секунду, что подойдет для SSD дисков и наличия 1GB канала связи между серверами.
Ставим wput
apt-get install wput
или
yum intall wput
Создаем файл скрипта
touch /usr/bin/file_backup
Разрешаем его запускать только себе
chmod 700 /usr/bun/file_backup
Редактируем файл и сохраняем в него следующий код.
#!/bin/sh FTPUSER="******" # Логин FTP сервера FTPPASS="******" # Пароль FTP FTPHOST="******" # сервер FTP FTPDIR="/sitebackup/" # папка на FTP SITEDIR="/var/www" # Папка где лежат сайты TMPDIR="/var/backup/site" # Где будут храниться временные файлы DATE=`date +"%Y-%m-%d"` # Формат даты в имени файла cd $SITEDIR # Нужно чтб сделать ls LIST=`ls | grep -E ".*\.\w{1,5}"` # создаем список сайтов cd $TMPDIR test ! -d $TMPDIR/`date +%Y`/`date +%m` && { mkdir -p $TMPDIR/`date +%Y`/`date +%m` ; } for ELEMENT in $LIST do echo -en "Архивируется сайт $ELEMENT" tar -zcvpf $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz $SITEDIR/$ELEMENT/web --exclude=backup --exclude=managed_cache --exclude=stats --exclude=resize_cache >> /dev/nool 2> /var/log/file_backup.err wput --limit-rate=60000K --timestamping `date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR rm $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz && echo "Удален файл $TMPDIR/`date +%Y`/`date +%m`/$ELEMENT-$DATE.tar.gz" done #find $TMPDIR/ -type f -mtime +750 | xargs rm -f; #удаляет предыдущие бэкапы стaрше 2 лет. #find $TMPDIR/ -type d -empty | xargs rm -r; rm -r $TMPDIR/`date +%Y`
Добавляем в крон
crontab -e
Вставляем и заменяем путь к лог файлу если это необходимо
00 01 3 * * nice -n +19 /usr/bin/filebackup_archive >/dev/null 2 >> /var/log/ispconfig/syslog
Все что вам остается, это заменить учетные данные FTP на ваши настройки.
Обратите внимание у меня на сервере в папке сайта есть еще подпапки с куками логами и тд, по этому я доставил папку web в путь для архивации файлов, в вашем случае это может быть или другая папка или вовсе ее удалить, я не стал ее выносить в настройки, поскольку не придумал как ее правильно описать.
Ну и естественно это только файл, резервной копии БД тут нет!
В ближайшее время я покажу как это сделать.
Оставить комментарий
Комментарии (5)