Создавать копии файлов и базы сайта очень важно. Хорошо, если ваш хостинг облегчил задачу и занимается этим самостоятельно. Но если нет, или предлагает это за отдельную плату, то можно посмотреть в сторону Яндекс.Диска.
Особенности:
- Доступен любому пользователю Яндекса.
- Бесплатно предоставляется 10 Гб места.
- Дополнительное место стоит сравнительно недорого.
- Немного дополнительного места можно получить бесплатно.
- Надежность сервиса не вызывает сомнений.
Для Яндекс.Диска существует консольный клиент, который можно легко использовать на веб-сервере с Debian и другими операционками Linux. Вот официальная страница помощи, а здесь подробно расписана техническая сторона.
Я для веб-сервера предпочитаю Debian 7 и поэтому дальнейшее руководство составлено и опробовано именно в этой ОС. Подключаем репозиторий Яндекса, для чего в файле /etc/apt/sources.list
добавляем строчку:
deb http://repo.yandex.ru/yandex-disk/deb/ stable main
Импортируем GPG-ключ:
wget -O YANDEX-DISK-KEY.GPG http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
apt-key add YANDEX-DISK-KEY.GPG
Обновляем список пакетов и устанавливаем Яндекс.Диск:
apt-get update
apt-get install yandex-disk
В процессе установки Яндекс.Диска мастер настройки спросит:
- Каталог, где будут находиться синхронизируемые файлы и каталоги Яндекс.Диска. Если ничего не указывать, то каталог
Yandex.Disk
по умолчанию будет создан в домашнем каталоге пользователя. - Вы используете прокси-сервер? Да/Нет.
- Запускать клиент при старте системы? Да/Нет.
- Имя пользователя на Яндексе. Указать нужно просто
ИМЯ
, а неИМЯ@yandex.ru
. Ну, или если вы используете почту для домена, то указать нужно полный адрес своей эл. почты. - Пароль на Яндексе.
Если вопросов не последовало, то запустите мастер настройки вручную:
yandex-disk setup
Вот так всё легко! По сути вы просто отвечаете на вопросы мастера настройки, а сразу после этого Яндекс.Диск готов к работе.
Любые файлы и каталоги, которые вы поместите в каталог Yandex.Disk
(название по умолчанию) будут автоматически синхронизироваться. Ну и, конечно, если у вас Яндекс.Диск и так уже не был пустым, то всё его содержимое тоже появится здесь же.
По умолчанию работает полная синхронизация данных. Убедитесь, что у вас достаточно места на диске веб-сервера.
В процессе установки Яндекс.Диск создает файл конфигурации ~/.config/yandex-disk/config.cfg
. По умолчанию в нем немного параметров и их назначение не вызывает вопросов. В этот же файл можно добавлять свои параметры, в частности:
# Не синхронизировать указанные каталоги.
exclude-dirs="exclude/dir,path/to/another/exclude/dir"
Из командной строки Яндекс.Диск понимает:
yandex-disk start [OPTION]
yandex-disk stop [OPTION]
yandex-disk status [OPTION]
Соответственно, — старт, стоп и статус работы демона.
Последняя команда может показывать состояние и ошибки синхронизации, список синхронизированных файлов, общее и свободное пространство на Яндекс.Диске.
Параметры в командах можно упустить.
Я привёл не полный набор команд и параметров Яндекс.Диска, кому нужно больше, ищите подробности в официальном руководстве, ссылка выше была.
Для удобства консольный Яндекс.Диск поддерживает работу с символическими ссылками. Это действительно иногда может сильно упростить задачу синхронизации тех или иных файлов и каталогов.
Корзина Яндекс.Диска
При работе с Яндекс.Диском нужно обязательно учитывать его особенность — Корзину. Когда файлы удаляются (любым способом), то они переносятся в корзину. При этом их не видно, но они продолжают занимать место. Создание бэкапов — это цикличный процесс. Старые файлы удаляются, на их месте создаются новые, и так до бесконечности. Очевидно, что если в данном случае не чистить корзину, то однажды она переполнится и доступного для бэкапов места просто не останется. Создание бэкапов остановится!
Чистить корзину Яндекс.Диска можно только через веб-интерфейс. Никакой консольной команды или опции для работы с корзиной не существует. Однако, есть разные хитрости. Во-первых, здесь описана одна из наиболее рекомендуемых.
Во-вторых, вот другая хитрость, которой я раньше пользовался: можно создать скрипт бэкапа таким образом, чтобы старые файлы не удалялись! Старые файлы можно просто переименовывать и перезаписывать. Число файлов при этом меняться не будет и удаленных файлов в корзине тоже появляться не будет. Вот пример бэкапа каталога /etc
:
#!/bin/bash
cd /root/Yandex.Disk
# переименовываем старые бекапы
mv etc_4.tar.gz etc_temp.tar.gz
sleep 10
mv etc_3.tar.gz etc_4.tar.gz
sleep 10
mv etc_2.tar.gz etc_3.tar.gz
sleep 10
mv etc_1.tar.gz etc_2.tar.gz
sleep 10
mv etc_temp.tar.gz etc_1.tar.gz
sleep 10
# запуск создания бэкапа
tar -czf /tmp/etc_work.tar.gz /etc
# перезаписываем старый бэкап
mv /tmp/etc_work.tar.gz etc_1.tar.gz
Сохраняем код в файл, куда удобно, например, в /root/backup_etc.sh
, устанавливаем на него права 740 (с возможностью запуска) и добавляем в крон, допустим, для ежедневного выполнения.
Надеюсь принцип работы кода понятен? Обращаю внимание, что в примере архив бэкапа не создается сразу в каталоге Яндекс.Диска. Он создается во временном каталоге, а потом уже копируется в каталог Яндекс.Диска. Иногда архивы бэкапов могут быть очень большими и их создание может сильно растянутся по времени. Ни к чему, чтобы Яндекс.Диск пытался засинхронизировать ещё не до конца созданный архив.
Для верности между некоторыми командами скрипта я добавил команду sleep 10
, которая обеспечивает 10-ти секундную паузу. Дело в том, что в процессе работы по такому принципу я замечал, что у меня иногда всё же образовывались лишние/удалённые файлы. Видимо, когда команды переименования и замены файлов выполняются слишком быстро, то Яндекс.Диску иногда может срывать крышу. Благодаря добавлению паузы и неторопливому выполнению команд этого удалось полностью избежать!
Автозапуск Яндекс.Диска
Мастер настройки Яндекс.Диска задает вопрос при установке: хотим ли мы запускать программу при старте системы? Конечно, на это стоит отвечать утвердительно. Так сделал и я. Но несмотря на это демон не стартовал у меня в Debian 7 автоматически. И судя по этой ссылке я не одинок. Автору заметки по ссылке отдельное спасибо! Я поступил аналогично, у меня автостарт заработал. Если коротко, то создаем скрипт запуска yandex_autorun.sh
:
#!/bin/sh
yandex-disk start --dir=/root/Yandex.Disk --auth=/root/.config/yandex-disk/passwd
Это для настроек по умолчанию и пользователя root. Если при установке Яндекс.Диска вы меняли основной каталог и расположение конфигурации, то, соответственно, измените их и здесь.
Файл скрипта располагаем, где удобно, например, в каталоге того же пользователя: /root/yandex_autorun.sh
. Устанавливаем на него права 740 (с возможностью запуска). Добавляем в файл /etc/crontab
строчку:
@reboot sleep 60 && /root/yandex_autorun.sh
После редактирования crontab выполняем:
crontab -u root /etc/crontab
Готово, можно перезагружать веб-сервер и смотреть на результат.
Что еще плохого у Яндекс.Диска?
Кроме особенностей корзины и неработающего по умолчанию автозапуска меня озадачило, что Яндекс.Диск при синхронизации съедает определённое количество ресурсов. В частности показатель Load average на моём новом веб-сервере возрастает примерно в два раза — вместо обычных 0.4...0.8 в часы пик может доходить примерно до 1.5.
По этому вопросу я связывался со службой поддержки Яндекс, пытаясь выяснить, можно ли понизить приоритет выполнения их консольной программы. В конце концов куда мне торопиться, я вполне бы мог обойтись без скоростной синхронизации. К сожалению, оказалось, что управлять приоритетом не возможно.
Что же в итоге? Проверяйте, достаточно ли будет ресурсов для работы Яндекс.Диска в вашем случае, не будет ли он слишком тормозить работу веб-сервера. Кроме того, очевидно, что лучше организовать бэкапы и синхронизацию во время наименьшей активности сайтов, обычно это ночью. А ещё можно держать запущенным Яндекс.Диск только в нужное для бэкапов время. Автоматический запуск и остановку демона по времени организовать не сложно.