Резервное копирование сайта на webdav или FTP сервер

 

Несколько способов резервного копирования сайтов в облачное хранилище по webdav и FTP. Для примера буду использовать яндекс диск, однако подойдет любой webdav сервер, или FTP у кого он есть, потому, что большинство популярных облачных хранилищ FTP не поддерживают. Всё будем делаеть от имени root.

 

 

1. Монтируем яндекс-диск в файловую систему:


Те чьи сайты работают на серверах поднятых на полноценных Xen/KVM/HyperV могут просто монтировать яндекс-диск. Для работы с яндекс диском нам потребуется поддержка webdav, для этого ставим davfs:


yum install davfs2


Создадим каталог, в который будем монтировать наш диск для бэкапов, добавим наши данные для подключения в /etc/davfs2/secrets и монтируем яндекс-диск в подготовленный каталог:

mkdir /media/yadisk
echo "https://webdav.yandex.ru ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ" >> /etc/davfs2/secrets
mount -t davfs https://webdav.yandex.ru /media/yaisk


Для тех то увидел неприветливое сообщение об шибке:


/sbin/mount.davfs: can't open fuse device
/sbin/mount.davfs: trying coda kernel file system
/sbin/mount.davfs: no free coda device to mount


Можно попробовать подключить fuse и повторить попытку монтирования:


modprobe fuse


Теперь добавим настройки подключения в /etc/fstab, добавим нашего пользователя в группу: davfs2, установим нужные права на файл mount.davfs


https://webdav.yandex.ru:443 /media/yadisk davfs user,noauto 0 0
adduser ПОЛЬЗОВАТЕЛЬ davfs2
chmod 4755 /usr/sbin/mount.davfs


Проверяем подключение диска:


df -h /media/yadisk/


Не забудем внести подключение fuse в автозагрузку. Теперь мы можем копировать наши бэкапы прямо в папку/media/yadisk/. Выгрузим базу данных с помощью mysqldump, упакуем её вместе с файлами сайта в архив и удалим выгруженный файл, чтобы он не занимал дорогое нашему сердцу и кошельку место на сервере. После чего скопируем файл архива на смонтированный диск, и удалим его с сервера (Кстати при использовании mysqldump нужно помнить, что между ключами и значениями, например между -u и именем пользователя пробел не ставится):

mysqldump -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -B ИМЯ_БАЗЫ > /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ИМЯ_ФАЙЛА.sql
tar -czvf /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ЧАСТЬ_ИМЕНИ_ФАЙЛА-$(date +%Y-%m-%d).tar /scripts/tmp/ИМЯ_ФАЙЛА.sql /ПУТЬ_К_САЙТУ/ДЕРИКТОРИЯ_САЙТА
rm /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ИМЯ_ФАЙЛА .sql
cp /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ЧАСТЬ_ИМЕНИ_ФАЙЛА-$(date +%Y-%m-%d).tar /media/yadisk/ЧАСТЬ_ИМЕНИ_ФАЙЛА-$(date +%Y-%m-%d).tar
rm /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ЧАСТЬ_ИМЕНИ_ФАЙЛА-$(date +%Y-%m-%d).tar


2. Отправка файлов на диск с помощью консольного webdav клиента cadaver:


Ну а я, как обладатель чисто некоммерческого сайта, держу его на скромном OpenVZ, где как и на хостингах Virtuoso fuse нет и подключить его просто так не получится. Однако не будем отчаиваться, и и призовём на помощь webdav клиент cadaver:


sudo yum install cadaver


Информация необходимая для подключения храниться в ~/.netrc


machine wevdav.yandex.ru
login ЛОГИН
password ПАРОЛЬ


Имеем всё тот же файл с бэкапом для копирования (Помним что при вызове mysqldump между ключами и значениями пробела нет):


mysqldump -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -B ИМЯ_БАЗЫ > /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ИМЯ_ФАЙЛА.sql
tar -czvf /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ЧАСТЬ_ИМЕНИ_ФАЙЛА-$(date +%Y-%m-%d).tar /scripts/tmp/ИМЯ_ФАЙЛА.sql /ПУТЬ_К_САЙТУ/ДЕРИКТОРИЯ_САЙТА
rm /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/ИМЯ_ФАЙЛА .sql
cd /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp
W_DIR="/backup/saits/"
send=$(ls /scripts/tmp | grep ЧАСТЬ_ИМЕНИ_ФАЙЛА)
cadaver -t <<EOF
open https://webdav.yandex.ru
cd $W_DIR
put $send
EOF
rm /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp/${send}


3. Отправка файлов на диск по FTP:


При использовании FTP сервера немного меняется скрипт отправки файла:


cd /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp
FTP_USERNAME="ИМЯ_ПОЛЬЗОВАТЕЛЯ"
FTP_PASSWD="ПАРОЛЬ"
FTP_HOST="СЕРВЕР"
FTP_DIR="ПАПКА_НА_СЕРВЕРЕ"
FTP_SERVER=$($FTP_HOST | grep -oP '\d+\.\d+\.\d+\.\d+')
send=$(ls /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/tmp | grep ЧАСТЬ_ИМЕНИ_ФАЙЛА)
ftp -in $FTP_SERVER <<EOF
user $FTP_USERNAME $FTP_PASSWD
bin
prompt
cd $FTP_DIR
put $send
bye
EOF
rm /scripts/tmp/${send}


Если мы назовём наш скрипт backup.sh, то можно например назначит его выполнение на каждую полночь добавив в /etc/crontab:


0 0 * * * /МЕСТОПОЛОЖЕНИЯ_СКРИПТА/backup.sh

Добавить комментарий


Защитный код
Обновить