Привет, дорогой читатель. Сегодня речь пойдет про перенос бэкапов сайтов, созданных в VestaCP, на Яндекс.Диск и Google Диск. Ведь все мы знаем, что хранить бэкапы только в одном месте плохая затея. Поломка сервера, действия хакеров, ошибки администрирования могут привести к необратимой потере всех данных, а терять своё детище никто не хочет, да и наличие свежего бэкапа в надёжном месте добавляет уверенности в завтрашнем дне.
Что понадобится:
- Аккаунты Гугла и Яндекса.
- Установленная VestaCP.
- Инструкция тестируется на Ubuntu 16.04.
Перенос бэкапов VestaCP на Google Диск
Установка google-drive-ocamlfuse
С помощью этой программы мы подключим Google Диск к нашему серверу и сможем управлять файлами средствами Linux.
sudo add-apt-repository ppa:alessandro-strada/ppa sudo apt-get update sudo apt-get install google-drive-ocamlfuse
Авторизация и подключение диска
- Переходим по ссылке и авторизуемся https://code.google.com/apis/console/
- Создаём новый проект и даём ему имя.
- Активируем Google Drive API. Ищем во вкладке библиотека либо в разделе "Популярные API и сервисы" → включаем.
- Переходим во вкладку "Учётные данные", создаём новый "Идентификатор клиента OAuth".
- Появляется ошибка "Чтобы создать идентификатор клиента OAuth, укажите название продукта для окна запроса доступа" → нажимаем "Настроить окно запроса доступа OAuth" → Вводим только название → Сохранить → В списке выбираем "Другие типы" → Создать.
- Теперь у нас есть идентификатор и секрет. Переходим к консоли и пишем:
google-drive-ocamlfuse -headless -label me -id ИДЕНТИФИКАТОР -secret СЕКРЕТ
- Получаем ответ в виде ссылки, копируем и вставляем в браузер.
Please, open the following URL in a web browser: https://accounts.google.com/...
- Вводим полученный код в консоль.
На этом авторизация закончена, остаётся создать папку и подключить Гугл Диск:
mkdir /google_dir google-drive-ocamlfuse -label me /google_dir
Теперь появится новая папка "google_dir" связанная с сервером гугла.
Перенос архивов по расписанию
Вводим команду (может появиться выбор текстовых редакторов, советую выбрать nano):
crontab -e
Добавляем следующую строку в конец файла:
44 2 * * * sudo cp -R -n /backup/*.tar /google_dir/backup/
Создаём папку для копирования:
sudo mkdir /google_dir/backup/
Расшифрую команду для cron: в 2:44, по времени сервера, от имени администратора будет производиться копирование из папки "/backup/" файлов подходящих под маску *.tar, в папку "google_dir/backup/", файлы которые уже находят в целевой папке копироваться не будут. Если у вас много пользователей, а вам нужен бэкап только одного, то разумно будет изменить маску файла на admin*.tar
Удаление старых файлов
Для удаления старых бэкапов воспользуемся скриптом. Создадим новый файл и скопируем в него код из скрипта:
sudo nano /etc/delete-backup.sh
Делаем файл исполнительным:
sudo chmod ugo+x /etc/delete-backup.sh
Задаём выполнение по расписанию:
10 2 * * * sudo /etc/delete-backup.sh /google_dir/backup/ *tar 7
Расшифрую команду для cron: в 2:10 по времени сервера, от имени администратора будет производиться удаление файлов в папке "/google_dir/backup/" подходящих под маску "*tar", останется 7 самых свежих.
Перенос бэкапов VestaCP на Яндекс.Диск
Установка консольного клиента Яндекс.Диск
В этот раз мы пойдем немного другим путем и не будем подключать диск к нашей системе, а воспользуемся клиентом Linux для работы с Яндекс.Диск посредством REST API. Установка немного отличается от официального. Это сделано с целью предоставления возможности пользователю admin взаимодействовать со скриптом, в частности, запускать синхронизацию через cron.
Для установки клиента вводит команды:
git clone https://github.com/abbat/ydcmd.git sudo cp ydcmd/ydcmd.py /usr/local/vesta/bin/ydcmd
Регистрация нового приложения
Для работы консольного клиента его следует зарегистрировать oauth.yandex.ru. Нажимаем создать приложение → вводим название → выделяем все пункты в разделе "Яндекс.Диск REST API".
В разделе "Платформы" выберите "Веб-сервисы" и нажмите "Подставить URL для разработки" → нажмите "Создать приложение".
После создания приложения вы получите его id. Вставьте id приложения в соответствующее место и перейдите по ссылке → нажмите кнопку "Разрешить".
https://oauth.yandex.ru/authorize?response_type=token&client_id=полученный_id
На экране появился токен (набор букв и цифр), именно он нужен для работы приложения.
Создаем файл конфигураций:
sudo nano /root/.ydcmd.cfg
Прописываем в нем следующее:
[ydcmd] token = abcd
Устанавливаем права для всех только чтение:
sudo chmod 400 /root/.ydcmd.cfg
Настройка резервного копирования на Яндекс.Диск
Советую, сначала, ввести команду ниже в консоль и проверить работоспособность приложения.
Переходим в VestaCP во вкладку "CRON" → добавляем задание → выбираем ежедневное выполнение, ставим ночное время → вводим следующую команду:
sudo /usr/local/vesta/bin/ydcmd put --rsync /backup/ disk:/ваша-папка
Если, такая папка уже существует на Яндекс.Диске, то все данные будут из неё удалены.Но также можно пойти в обход VestaCP используя crontab -e.
Для своей работы приложение может требовать python-dateutil:
sudo apt-get install python-dateutil
Надеюсь статья вам помола, оставляйте свои комментарии, до новых встреч.
Полезные ссылки:
- Подробнее про установку google-drive-ocamlfuse.
- Подробнее про авторизацию через google-drive-ocamlfuse.
- Консольный клиент Яндекс.Диск.
Здравствуйте.
Более года резервирование на Гугл и Яндекс диски работало нормально.
С недавних пор перестала работать синхронизация с Яндекс Диском.
Скрипт крутится несколько часов, при этом копирует 1-2 случайных файла
и выпадает с ошибкой 'The read operation timed out'
При этом копирование на Гугл Диск работает без сбоев.
Пожалуйста подскажите, в чем может быть проблема?
Есть возможность что Ваш клиент пытается синхронизировать не готовый архив а его исходники. Т. е., нельзя просто сказать клиенту синхронизировать эту папку постоянно, т к в папке много чего происходит (перезапись удаление и тд). Лучше настроить миграцию готовых архивов. Звучит бредово, но я уже сталкивался с похожей проблемой: или архив придет битый или придут какие-то не понятные файлы.
"Лучше настроить миграцию готовых архивов. " - Можно поподробнее? Раньше все работало корректно через Крон командой "sudo /usr/local/vesta/bin/ydcmd put --rsync /backup/ disk:/BackUp"
Есть ли вероятность что веста не успевает создать архив и в это время клинт я.диска пытался отправить то что есть?
Советую поиграться со временем отправки, т е изменить время для команды в крон.
Резервное копирование на Яндекс Диск более не будет работать, об этом заявил сам Яндекс.
Что Вы имете ввиду, откуда информация? Данная инструкция построена на WebDAV API, его яндекс вроде не собирается отключать.
Да посмотрел, расстроенная проблема, спасибо!
Огромное вам спасибо! Официальный клиент Я.Диска для Линукс делает синхронизацию, но на VPS у меня одного терабайта пространства нет 🙂 По вашему рецепту всё работает просто перфектно! Еще раз спасибо и успехов!
Спасибо за добрый комментарий))
Еле настроил, заработало только через консоль. А вот крон выдает ошибку на почту "sudo: no tty present and no askpass program specified" Права вроде даю на файл этот, но вылазит. Пробовал через корректировку файла sudoers путем прописывания в ней подобной конструкции usrname ALL=(ALL) NOPASSWD: your_command_here, но не пойму как правильно прописать.
Что делать?
Подскажите куда копать.
crontab -e
crontab: installing new crontab
root@masterpavel:/home/admin# sudo mkdir /google_dir/backup/
mkdir: невозможно создать каталог «/google_dir/backup/»: Нет такого файла или каталога
Проблема в том что у вас не получается создать папку backup. Вероятно вам нужно перейти в корневую директору командой
cd
и повторить создание папки.О, я даже не знал, что так можно)))
Очень полезная статья, настроил за 5 минут.
Подскажите как прописать параметры PUT для другой папки чтобы синхронизировались все вложенные папки и файлы.
А то в бекап не попадает докумметация и картинки из за размера и тд, но хранить бы эту информацию хотя б в последнем состоянии/ виде где то не помешало бы.
Здравствуйте. За папку которую вы хотите синхронизировать в команде отвечает параметр, где уже стоит путь к архивам панели "/backup/ ". Если вам нужна другая папка просто смените /backup/ на требуемое значение. Именно в этом заключался ваш вопрос ?
А как восстановить с Яндекса копию?
Подмена существующего бэкапа, а затем средствами панели.
То есть мне надо загрузить его на локальный сервер в папку /beckup?
Можете подробнее написать?
В папке beckup обычно уже хранятся бэкапы ваших сайтов, переименуйте ваш старый архив на такое имя которое уже есть в этой папке, загрузите старый переименованный архив в эту папку с заменой. Средствами весты восстановите бэкап.
Но я не совсем понимаю вас, при загрузке архивов на Я.Диск таким методом как в статье локальные архивы не удаляются.
А скрипта для удаления старых файлов с Яндекс.диска нет?
Он не требуется, так как происходит не загрузка файлов, а синхронизации папки с бэкапами. Т. е. что удалено в папке с бэкапами на сервере, удалится и на Я.Диске.
привет. за вместо token = abcd пишем тот токен который был получен где много букв и цифр?
то у меня вылетает такая ошибка.
sudo /usr/local/vesta/bin/ydcmd put --rsync /backup/ disk:/backup-vesta
HTTP-403: Forbidden
а на почту пришло письмо
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
не указана программа askpass. где ошибся?
Привет, напиши мне в телеграмм или в вк и предоставь доступ к серверу. Попробую разобраться)
Есть GPL утилита https://rclone.org
Которая весит копейки и может синхронизировать с различными обычными сервисами, я еей использую чтобы синхронизировать папки.
Кладем в крон, при желании делаем архивацию по датам.
Спасибо присмотрюсь 😉
Инструкция для CentOS 7 в студию! 🙂
Можешь замутить инструкцию для CentOS?) Некоторые команды не пашут. То есть почти все команды
Добавил в список)