С хостинга на Nas4Free: Rsync через SSH.

Есть много способов сделать резервную копию своего сайта. Можно не париться и доверить это хостеру, но гарантии сохранности вам не дадут, да и отношения с хостером могут внезапно испортиться. Можно архивировать сайт (или не архивировать) и скачивать его по FTP, но это долго, да и большая часть сайта не меняется с момента запуска.
Для решения таких проблем и был изобретен rsync. Он копирует только изменившиеся файлы. А ещё rsync установлен в Nas4Free по умолчанию.
Можно настроить свой сервер rsync на собственном NAS и запускать клиента на хостине по расписанию. Этот способ имеет свои плюсы и минусы, основной из которых: соединение не шифруется, что чревато разнообразными неприятностями.

Мы будем использовать стандартный способ безопасного копирования: rsync поверх сессии SSH. Подключаясь к серверу по SSH, мы обычно вводим пароль, но это не единственный и не самый удобный способ, ведь есть ещё ключи. Есть даже удобная памятка. Для использования ключей нужно немного подготовить свой Nas4Free. Понадобится воспользоваться консолью от имени root'а.
Прежде всего, если у вас установлена версия embedded — придется позаботиться о том, чтобы файлы не пропали после перезагрузки. В этом поможет форум Nas4Free. Создадим на жестком диске каталог для постоянного хранения файлов, например так

mkdir -p /mnt/data/home/root

и попросим ОС писать новые файлы туда.

mount_unionfs /mnt/data/opt/usr_local /usr/local

Эту же команду следует добавить в раздел «система — дополнительно — командные скрипты» web-интерфейса администратора. У меня жесткий диск подключен к каталогу /mnt/data, у вас может быть по-другому.
Теперь пора создать RSA-ключ администратора:

ssh-keygen

Просто соглашайтесь со всем.
Если хостинг-провайдер оказывает услугу доступа по SSH на нестандартном порту, лучше сразу создать алиас для такого сервера.

nano ~/.ssh/config

и наполнить его примерно так

Host webhost
        Hostname ssh.example.com
        User client365
        Port 32122

Это избавит вас от ввода имени и порта при каждом подключении.
К сожалению, в Nas4Free по умолчанию нет ssh-copy-id. Но есть вариант «для бедных»

cat ~/.ssh/id_rsa.pub | ssh -p 32122 client365@ssh.example.com "cat - >> ./.ssh/authorized_keys"

или, с использованием псевдонима,

cat ~/.ssh/id_rsa.pub | ssh webhost "cat - >> ./.ssh/authorized_keys"

Ошибка «файл не существует» или подобная означают, что каталога .ssh в домашнем каталоге на сервере нет. Создадим его.

ssh webhost "mkdir -p .ssh"

Пришла пора проверить, что получилось:

rsync --compress --checksum --archive --delete webhost:/full/path/to/public_html/ /mnt/data/www-backup/webhost

Слэш на конце пути источника означает, что следует копировать содержимое каталога, а не каталог целиком — в каталоге webhost rsync разместит не подкаталог public_html, а его содержание.
Возможны 2 вида ошибок: «файл не найден» — когда путь к исходным файлам указан неправильно и «команда не найдена» - когда на сервере не установлен rsync или его использование запрещено администратором. Первая проблема решается методом ls — cd — ls — cd — pwd — копировать — вставить. Со второй лучше обращаться в техническую поддержку хостинга.
Необходимо отметить, что при добавлении команды синхронизации в планировщик заданий Nas4Free «система — дополнительно — cron» имя исполняемого файла указывается полностью: /usr/local/bin/rsync

Так можно сэкономить время, нервы и трафик и себе и хостинг-провайдеру.
А как делаете копии своих сайтов вы, дорогие читатели?

Тематика: 

Комментарии

Удивительный момент, насколько можно выиграть в финансовом плане с использованием продуктов опенсорс! Не прийдется платить солидные суммы за коммерческое программное обеспечение и получить схожий результат. Да, данные программы не так хорошо выглядят, зачастую сложны в настройках, но здорово выполняют свою работу. Спасибо автору за разъяснения и простое решение надежного, шифрованного способа сделать резервную копию. Хочется от души поблагодарить его и всех людей которые не ленятся банально написать инструкцию. Это важно.