У попередній статті “Частина 1. Резервне копіювання бази” ми описали етапи резервного копіювання сайту:
1. Резервне копіювання бази
2. Резервне копіювання файлів по FTP
3. Автоматизація запуску за допомогою cron
Перейдемо до другого етапу – створення дзеркала за допомогою FTP.
Встановлення необхідного пакету
Для роботи знадобиться пакет lftp
– консольний FTP-клієнт. Якщо в системі він не встановлений, виконайте команду:
sudo apt-get install lftp
Скрипт, що виконує резервне копіювання
Створимо файл з bash-скриптом в папці /etc/init.d:
sudo nano /etc/init.d/rsync_yourdomain
В файл внесемо наступний код. Не забудьте замінити параметри на власні:
sync_yourdomain.log
-назва log файлу, куди будуть писатись звіти про синхронізацію/backup/yourdomain
– локальна папка, куди буде збережено резервну копіюemail
– ім’я користувача FTP на вашому серверіpassword
– пароль користувача FTP на вашому серверіurl
– FTP адреса вашого сервера, наприклад ftp://ftp.exampledomain.com
# Очищення лог-файлу
LOG_FILE="/var/log/lftp/sync_yourdomain.log"
cp /dev/null "$LOG_FILE"
# Виконання резервного копіювання через lftp
/usr/bin/lftp -e 'mirror -e --delete --log=/var/log/lftp/sync_yourdomain.log / /backup/yourdomain; bye;' -u email,password url
# Запис часу завершення
echo 'Finished at ' >> "$LOG_FILE"
date >> "$LOG_FILE"
Після створення файлу не забудьте надати йому права на виконання:
sudo chmod +x /etc/init.d/rsync_yourdomain
lftp man
Опція Опис -e "команда"
Виконати команду та не завершувати з’єднання. -c "команда"
Виконати команду та завершити з’єднання. -f файл
Виконати команди зі скриптового файлу. --help
Показати довідку. -u user[,password]
Задати ім’я користувача та пароль для FTP/FTPS/SFTP. -p порт
Вказати порт підключення. --norc
Не читати налаштування з ~/.lftprc
.--version
Показати версію lftp
.
Команди для дзеркального копіювання (mirror)
Опція Опис mirror /віддалений /локальний
Завантажити каталог з сервера. mirror -R /локальний /віддалений
Завантажити локальний каталог на сервер. mirror -e
Видалити зайві файли у цільовій папці (дзеркальне видалення). mirror --delete
Видалити файли, яких немає у вихідній папці. mirror --continue
Продовжити перерване завантаження. mirror --only-newer
Завантажувати лише нові файли. mirror --parallel=5
Використовувати 5 потоків для завантаження.
Перед першим запуском не забудьте створити локальну папку (local_folder), наприклад /backup/yourdomain, в яку складатиметься бекап, та /var/log/lftp/, до якої будуть писатися логи. Перевірте права доступу до цих папок для користувача, який запускає скрипти.
Зворотна синхронізація (відновлення з бекапу)
Якщо раптом потрібно синхронізувати віддалений сервер з локальним, тобто залити зміни на сервер, скрипт зміниться таким чином (додається ключ -R і міняються місцями локальна та віддалена папки):
/usr/bin/lftp -e 'mirror -e -R --log=/var/log/lftp/sync_yourdomain.log /backup/yourdomain / ; bye;' -u email,password url
Вимкнення перевірки SSL
На деяких серверах за замовчуванням увімкнено перевірку SSL-сертифікатів при підключенні по FTP. Якщо підключення не вдається через помилку сертифіката, спробуйте примусово вимкнути SSL.
Для цього створіть або відредагуйте файл ~/.lftp/rc
і додайте такі рядки:
set ssl:verify-certificate off
set ftp:ssl-allow no
set ftp:ssl-allow-anonymous no
set ftp:ssl-auth TLS
set ftp:ssl-copy-sid no
set ftp:ssl-data-use-keys no
Або ж додайте ключ безпосередньо в запит:
/usr/bin/lftp -e 'set ssl:verify-certificate no; mirror -e --delete --log=/var/log/lftp/sync_yourdomain.log / /backup/yourdomain; bye;' -u email,password url
Це дозволить підключатися без перевірки сертифіката та уникнути помилок автентифікації.
Таким чином, ми налаштували резервне копіювання файлів сайту по FTP, що дозволяє автоматично створювати дзеркало сайту на локальному сервері.