1.Настройка бекапа удаленных сайтов по FTP через монтирование удаленных сайтов с помощью curlftpfs и дальнейшего выполнения rsync/tar на удаленный/локальный сервер
Загружаем необходимый модуль ядра fuse и добавляем его загрузку в автозагрузку
1 |
# modprobe fuse |
Debian/Ubuntu
1 |
# nano /etc/modules |
1 |
fuse |
Установка curlftpfs
1 |
# apt-get install curlftpfs |
Логины/пароли для подключения к сайтам сохраним в отдельный файл, чтобы они не отображались в командной строке при просмотре процессов, использовании команды df и т.д.
1 |
# nano /root/.netrc |
1 2 3 4 5 6 7 |
machine sitename1 login ftpuser1 password ftppassword1 machine sitename2 login ftpuser12e password ftppassword2 |
1 |
# chmod 600 /root/.netrc |
Создаем каталоги – точки монтирования, куда будут смонтированы удаленные сайты
1 |
# mkdir -p /backup2/remotesites/{sitename1,sitename2} |
Монтируем удаленные сайты
1 |
# curlftpfs sitename1 /backup2/remotesites/sitename1 |
1 |
# curlftpfs sitename2 /backup2/remotesites/sitename2 |
Проверяем отсутствие логинов/паролей в командной строке
1 |
# df -h | grep [c]url |
1 2 |
curlftpfs#ftp://sitename1/ 954G 0 954G 0% /backup2/remotesites/sitename1 curlftpfs#ftp://sitename2/ 954G 0 954G 0% /backup2/remotesites/sitename2 |
1 |
# ps uax | grep [c]urlftpfs |
1 2 |
root 27309 0.0 0.0 224416 2668 ? Ssl 15:36 0:00 curlftpfs sitename1 /backup2/remotesites/sitename1/ root 29106 0.0 0.0 224416 2324 ? Ssl 15:38 0:00 curlftpfs sitename2 /backup2/remotesites/sitename2 |
Размонтирование
1 |
# fusermount -u /backup2/remotesites/sitename1 |
1 |
# fusermount -u /backup2/remotesites/sitename2 |
Простой скрипт для выполнения бекапа удаленных сайтов(добавляем в cron на ежесуточное выполнение)
Монтируем удаленный сайт через curlftpfs
Cинхронизируем содержимого удаленного сайта,например, с каталогом сайта на сервере бекапов(либо локальным сервером)
Размонтируем ранее смонтированный каталог содержащий сайт
Ошибки перенаправляем в файл /var/log/curlftpfs.log для дальнейшего парсинга данного файла системой мониторинга(Zabbix,Nagios etc)
Непосредственно сам сайт размещается в каталоге www на удаленном сервере, который (www)расположен в домашнем каталоге FTP-пользователя
# nano /usr/local/scripts/curlftpfs.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!bin/bash CURLFTPFS=$(which curlftpfs) RSYNC=$(which rsync) FUSERMOUNT=$(which fusermount) LOCAL_ROOT_DIRECTORY="/backup2/remotesites" REMOTE_ROOT_DIRECTORY="/backup/remotesites" LOG_FILE="/var/log/curlftpfs.log" $CURLFTPFS sitename1 ${LOCAL_ROOT_DIRECTORY}/sitename1 > /dev/null 2>${LOG_FILE} $RSYNC -avzh --delete -e "ssh -p2222" ${LOCAL_ROOT_DIRECTORY}/sitename1/www/ my-destination-server:${REMOTE_ROOT_DIRECTORY}/sitename1/ > /dev/null 2>>${LOG_FILE} $FUSERMOUNT -u ${LOCAL_ROOT_DIRECTORY}/sitename1 > /dev/null 2>>${LOG_FILE} $CURLFTPFS sitename2 ${LOCAL_ROOT_DIRECTORY}/sitename2 > /dev/null 2>>${LOG_FILE} $RSYNC -avzh --delete -e "ssh -p2222" ${LOCAL_ROOT_DIRECTORY}/sitename2/www/ my-destination-server:${REMOTE_ROOT_DIRECTORY}/sitename2/ > /dev/null 2>>${LOG_FILE} $FUSERMOUNT -u ${LOCAL_ROOT_DIRECTORY}/sitename2 > /dev/null 2>>${LOG_FILE} |
Если необходимо добавить автомонтирование при загрузке сервера
1.Либо добавить в /etc/rc.local
1 2 |
/usr/bin/curlftpfs sitename1 /backup2/remotesites/sitename1 /usr/bin/curlftpfs sitename2 /backup2/remotesites/sitename2 |
2. Либо добавить в /etc/fstab
1 2 |
/usr/bin/curlftpfs#sitename1 /backup2/remotesites/sitename1/ fuse allow_root,nonempty,direct_io 0 0 /usr/bin/curlftpfs#sitename2 /backup2/remotesites/sitename2/ fuse allow_root,nonempty,direct_io 0 0 |
Ели необходимо предоставить доступ для обычного пользователя, то используемые следующие опции в /etc/fstab
1 |
allow_other,uid=1000,gid=1000,umask=0022 |
где uid=1000 и gid=1000 идентификатор нужного пользователя и его группы
Проверить корректность монтирования — смонтировав удаленные сайты
1 |
# mount -a |
https://habrahabr.ru/post/85084/
https://wiki.archlinux.org/index.php/CurlFtpFS
https://linuxconfig.org/mount-remote-ftp-directory-host-locally-into-linux-filesystem
http://help.ubuntu.ru/wiki/%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_ftp
2.Настройка бекапа удаленных сайтов по FTP через консольный ftp-клиент lftp
1 |
# apt-get install lftp |
Создание полного бекапа удаленного сайта в локлаьном каталоге
1 |
# /usr/bin/lftp -e "set ssl:verify-certificate no ; mirror -e /www /backup/mirrors/sitename1; bye;" -u 'ftpuser1','ftppassword1' sitename1 |
Где
ftpuser1 – имя FTP-пользователя
ftppassword1 – пароль FTP-пользователя
sitename1 – имя сайта
Используемые опции при подключении устанавливаем с помощью оператора set
1 |
опция -e для lftp |
определяет выполнение указанной команды БЕЗ отключения от сервера после окончания выполнения команды (для принудительного отключения от сервера мы используем команду bye)
1 |
ssl:verify-certificate |
–не проверять сертификат сервера(подписан ли он известным центром сертификации и не отозван ли этот сертификат)
1 |
mirror -e /www /backup/mirrors/sitename1 |
— сделать бекап содержимого каталога www(в этом каталоге расположен сам сайт на удаленном сервере) с удаленного сервера в локальный каталог /backup/mirrors/sitename1
Опция -e выполняет удаление файлов в локальном каталоге(каталоге назначения в данном случае),если они отсутствуют в удаленном каталоге(каталоге источника в данном случае)
1 |
# nano /usr/local/scripts/ftpbackup.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash backuppath="/backup" LFTP="/usr/bin/lftp" OPTIONS='set ssl:verify-certificate no' LOGFILE="/var/log/ftpbackup.log" echo "sitename1" >> $LOGFILE $LFTP -e "$OPTIONS; mirror -e /www $backuppath/mirrors/sitename1; bye;" -u 'ftpuser1','ftppassword1' sitename1 >> $LOGFILE 2>&1 echo"" >> $LOGFILE echo "sitename2" >> $LOGFILE $LFTP -e "$OPTIONS; mirror -e /www $backuppath/mirrors/sitename2; bye;" -u 'ftpuser2','ftppassword2' sitename2 >> $LOGFILE 2>&1 |