Поставил задачу себе делать бэкапы и переносить их на Google Drive. Есть три софта это rclone, gdrive и grive2. Попробовал все три. Начал с gdrive все установилось, но не получилось подсоединиться к аккаунту Google, постоянно выбивала ошибку: 400: invalid_request. Абсолютно та же история была с grive2. Также установилась, немножко дольше устанавливалась, но также при настройке — ошибка 400 и подключиться к аккаунту было невозможно.
Потом я начал пробовать Rclone. Установка дольше, больше зависимостей. Начал настраивать, а там просит установить дополнительно на десктоп, чтобы авторизоваться оттуда и потом перенести настройки на сервер. С горем пополам нашел как настраивать без десктопа.
Самая соль активировать аккаунт гугла — без танцев с бубном просто никак
Поэтому решил сделать инструкцию себе на память, возможно кому-то будет полезно.
# cd /usr/ports/net/rclone
#make install clean
Подключение Аккаунта гугла
- Создайте проект в Google Cloud Console:
- Перейдите на Google Cloud Console.
- Создайте новый проект или выберите существующий.
- Включите API Google Drive:
- В разделе «APIs & Services» выберите «Library».
- Найдите «Google Drive API» и включите его.
- Создайте OAuth 2.0 учетные данные:
- Перейдите в раздел «APIs & Services» > «Credentials».
- Нажмите «Create Credentials» и выберите «OAuth 2.0 Client ID».
- Вам потребуется настроить экран согласия OAuth. Заполните необходимую информацию.
- Создайте учетные данные типа «Desktop app».
- Скачайте файл учетных данных:
- После создания учетных данных скачайте JSON-файл с учетными данными клиента.
Затем нужно создать дополнительный файл подключения service_account_file.json, чтобы автоматически авторизироваться в Google
- Перейдите в API & Services > Credentials.
- Нажмите Create credentials и выберите Service account.
- Введите имя для сервисного аккаунта и, при необходимости, описание. Нажмите Create.
- Назначьте роли сервисному аккаунту. Для работы с Google Drive выберите роль Project > Editor или Owner. Нажмите Continue.
- Пропустите шаг добавления пользователей и нажмите Done.
- На странице «Service accounts» найдите созданный аккаунт и нажмите на кнопку «Actions» (три точки) справа, затем выберите Manage keys.
- Нажмите Add key > Create new key, выберите JSON и нажмите Create. Файл JSON будет скачан на ваш компьютер.
Для удобства назовем его service_account_file.json
Настройка доступа сервисного аккаунта к Google Drive:
- Откройте Google Drive, который будет использоваться для хранения бэкапов.
- Создайте папку для бэкапов, например,
Backups
. - Поделитесь этой папкой с сервисным аккаунтом. Используйте email-адрес из JSON-файла service_account_file.json, обычно вида
[email protected]
. - Дайте доступ на редактирование.
- Откройте ее в браузере и возьмите url из адресной строки (https://drive.google.com/drive/folders/1lK6HF2woUFSkjnksdfna1hBDHtqTFo — 1lK6HF2woUFSkjnksdfna1hBDHtqTFo и есть ID папки) — запишите его он нам понадобиться позже (для поля Root Folder ID — root_folder_id)
Перенесите файл JSON на сервер FreeBSD
Скопируйте скачанный JSON-файл на ваш сервер FreeBSD. Предположим, вы сохранили его в домашней директории пользователя, например, под именем service_account.json
.
Настройка rclone с использованием сервисного аккаунта
Запустите rclone config и настройте remote для Google Drive, используя файл сервисного аккаунта.
- # rclone config
- Выберите n для создания нового remote.
- Дайте имя вашему remote, например gdrive.
- Ищем Google Drive (у меня он был под 17 номером).
- Когда вас спросят о клиентском ID, введите client_id из первого JSON-файла(учетными данными клиента).
- Когда вас спросят о клиентском секретe, введите client_secret из JSON-файла(учетными данными клиента).
- Выберите 1 для полнофункционального доступа.
- в поле service account указываем путь загруженного файла
service_account.json
- Edit advanced config — y
- Пропускаем все поля до тех пор пока не увидите Root Folder ID — это та папка которой мы дали доступ сервисному аккаунту. Но пишем не название папки а ее ID. Тот который мы записали ранее из адресной строки 1lK6HF2woUFSkjnksdfna1hBDHtqTFo
- Сохраняем все настройки и выходим
Если все прошло ок, то на этом этапе мы уже можем подключаться к Google Drive.
Проверим echo "This is a test file" > testfile.txt
rclone copy testfile.txt gdrive:
rclone ls gdrive:
Вы должны увидеть testfile.txt
в выводе.
Скачайте файл обратно
rclone copy gdrive:testfile.txt .
Проверьте также видите ли вы созданный файл в браузере на Google Drive.
Мой файл загрузки бекапов rclone_upload.sh:
#!/bin/sh
# Указываем пути к папкам с бекапами на сервере
backup_month="/usr/home/backups/month"
backup_week="/usr/home/backups/week"
backup_system="/usr/home/backups/system"
# Проверяем наличие файлов в папках бекапов на сервере
if [ -n "$(ls -A $backup_month $backup_week $backup_system 2>/dev/null)" ]; then
# Получаем текущую дату в формате "YYYY-MM-DD"
current_date=$(date "+%Y-%m-%d")
# Указываем путь к удаленной папке на Google Drive с текущей датой
remote_backup_folder="gdrive:$current_date"
# Создаем удаленную папку на Google Drive с текущей датой
rclone mkdir $remote_backup_folder
# Перемещаем файлы из папок бекапов на сервере в удаленную папку на Google Drive
for backup_folder in $backup_month $backup_week $backup_system; do
if [ -n "$(ls -A $backup_folder 2>/dev/null)" ]; then
echo "Найдены файлы в папке $(basename $backup_folder), перемещаем на Google Drive..."
rclone move $backup_folder $remote_backup_folder
else
echo "Папка $(basename $backup_folder) пуста, ничего не перемещаем."
fi
done
echo "Скрипт выполнен."
else
echo "Нет файлов для загрузки на Google Drive, папка remote_backup_folder не создана."
fi
Крон
crontab -e
0 11 * * * /path/to/rclone_upload.sh
Также можно настроить автоматическое удаление бекапов старше 5 месяцев к примеру, чтобы не засорять диск Google Drive
rclone delete gdrive:month --min-age 5M