Установка и настройка rclone. Бэкапирование в s3 или cloud.mail.ru

rclone backup

Rclone — это программное обеспечение для синхронизации файлов с облачным хранилищем.

В связи с тем, что Яндекс закручивает гайки в своих сервисах, из-за чего наблюдаются перебои с Яндекс Диском, точнее с протоколом webdav, который я использовал для хранения бэкапа сайта, пришлось искать другие варианты. Выбор пал на программу rclone и хранилище от mail.ru.

Установка rclone

Скачиваем rclone и распаковываем его

$ curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
$ unzip rclone-current-linux-amd64.zip
$ cd rclone-v1.50.2-linux-amd64/

Меняем расположение исполняемого файла и настраиваем права

$ sudo cp rclone /usr/sbin/
$ sudo chown root:root /usr/sbin/rclone
$ sudo chmod 755 /usr/sbin/rclone

Устанавливаем мануал для rclone

$ sudo mkdir -p /usr/local/share/man/man1
$ sudo cp rclone.1 /usr/local/share/man/man1/
$ sudo mandb

На этом установка окончена

Конфигурирование rclone под s3 от mail.ru

Для начала необходимо зарегистрироваться на портале mcs.mail.ru. Создать аккаунт в объектном хранилище, где будет сгенерирован Access Key ID и Secret Key. Эти данные необходимо сохранить.
Затем надо создать Бакет — логическая сущность, которая помогает организовать хранение объектов (т.е. грубо говоря каталог, где будут лежать наши файлы).

Запускаем команду для создания конфигурации под хранилище

$ rclone config
n/s/q> n

# Укажите имя подключения к удаленному хранилищу
name> mailru-s3
...
4 / Amazon S3 Compliant Storage Provider
...

# Выберите тип хранилища, указываем s3:
Storage> 4
...
10 / Any other S3 compatible provider
...

# Выберите поставщика услуг, указываем Other:
provider> 10

# Выберите тип ввода учетных данных (вручную или из переменных окружения)
# Для ввода данных вручную укажите false:
env_auth> 1

# Вводим Access Key ID
access_key_id> ...

# Вводим Secret Key
secret_access_key> ...

# Вводим регион, я указал 1
region> 1

# Вводим Endpoint Можно узнать на портале: mcs.mail.ru - объектное хранилище
endpoint> hb.bizmrg.com

# Укажите регион создания бакета
# оставьте поле пустым и нажмите Enter:
location_constraint>

# Установите права доступа ACL, private:
acl> 1

# После этого можно отказаться от расширенной конфигурации:
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n

Далее отобразиться конфигурация, которую мы создали, сохраняем ее и выходим

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Команды для работы с хранилищем

Список команд и поддерживаемых флагов можно найти на официальном сайте приложения rcolne

Просмотр списка бакетов:

$ rclone lsd mailru-s3:

Создание нового бакета

$ rclone mkdir mailru-s3:itdraft-testbucket

Просмотр списка файлов в бакете

$ rclone ls mailru-s3:itdraft-bucket

Копирование файлов с локальной машины в хранилище

$ rclone copy /mnt/storage/itdraft.ru/backup mailru-s3:itdraft-bucket

Синхронизация файлов на локальной машине и в хранилище

$ rclone sync /mnt/storage/itdraft.ru/backup mailru-s3:itdraft-bucket

Копирование файлов из хранилища на локальную машину

$ rclone copy mailru-s3:itdraft-bucket/backup_itdraft_ru.sql.gz /home/test

Не синхронизировать файлы младше 1 дня

$ rclone --min-age 1d --delete-excluded sync /mnt/storage/itdraft.ru/backup mailru-s3:itdraft-bucket

Не синхронизировать файлы старше 7 дней

$ rclone --max-age 7d --delete-excluded sync /mnt/storage/itdraft.ru/backup mailru-s3:itdraft-bucket

Удалить файлы младше 7 дней

$ rclone --max-age 7d delete mailru-s3:itdraft-bucket

Удалить файлы старше 7 дней

$ rclone --min-age 7d delete mailru-s3:itdraft-bucket

Конфигурирование rclone для работы с cloud.mail.ru

Запускаем команду для создания конфигурации под хранилище

$ rclone config
e/n/d/r/c/s/q> n
name> cloud-mailru
Storage> mailru
user> user@mail.ru
Password
y) Yes type in my own password
g) Generate random password
y/g> y
Enter the password:
password:
Confirm the password:
password:
speedup_enable> 1
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n

Далее отобразиться конфигурация, которую мы создали, сохраняем ее и выходим

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
cloud-mailru         mailru
mailru-s3            s3

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Пример скрипта бэкапирования дампа базы MySQL в хранилище

Логика скрипта бэкапирования следующая:

  • локально хранятся бэкапы базы за 8 дней (т.к. они небольшого размера)
  • в облаке хранится бэкапы базы за 1 месяц
  • в лог пишется информация о количестве локальных бэкапов и какие были удалены

Скрипт через crontab выполняется ежедневно

#!/bin/sh

# Переменные
SRC=/mnt/storage/itdraft.ru/backup
DEST=cloud-mailru:/itdraft-backup

# Дата-Врем
DATETIME="$(date +%Y%m%d_%H%M%S)"

# Ящики
mail_from=admin@itdraft.ru
mail_to=admin@itdraft.ru
mail_copy=admin@itdraft.ru

# БД
mysqluser=%user%
mysqlpassword=%pass%
mysqlbase=%database%

# Логи
LOG_FILE=$SRC/backup_mysql.log

# Хранение
DAYS=8
DAYSDEST=1M

# Создаем каталог, если его еще нет
mkdir -p $SRC

# Время запуска скрипта в логах
echo "$DATETIME INFO: Start" | tee "$LOG_FILE"

# Создаем дамп базы локально и архивируем
mysqldump -u $mysqluser -p$mysqlpassword $mysqlbase | gzip > $SRC/$DATETIME.backup_itdraft_ru.sql.gz

# Копируем в облако
rclone copy $SRC $DEST --log-file "$LOG_FILE"

# Удаляем в облаке файлы старше 1 месяца
rclone --min-age $DAYSDEST delete $DEST --log-file "$LOG_FILE"

# Информация для лог-файла: Find local MYSQL dump
echo "Local MYSQL dump" | tee -a "$LOG_FILE"
du -csh --time $SRC/*.sql.gz | tee -a "$LOG_FILE"
echo "Deleted" | tee -a "$LOG_FILE"
find $SRC/*.sql.gz -type f -mtime +$DAYS -print | tee -a "$LOG_FILE"

# Удаляем локальные копии, старше 8 дней
find $SRC/*.sql.gz -type f -mtime +$DAYS -exec rm -f {} \;

# Время завершения скрипта в логах
echo "$DATETIME INFO: End" | tee -a "$LOG_FILE"

# Отправляем лог на почту
echo "itdraft.ru: $DATETIME | deleted files" | mail -v -A yandex -s "itdraft.ru: $DATETIME | deleted files" -a "$LOG_FILE" -r $mail_from $mail_to

Для бэкапирования самого сайта у меня запускается похожий скрипт раз в неделю, но из-за другой периодичности запуска:

  • локально хранится 1 полный бэкап файлов сайта (т.к. этот бэкап весит на несколько порядков больше, чем база)
  • в облаке хранятся бэкапы за месяц (т.е. 4 шт.)

UPD 13.12.2019

Если конфигурировали rclone от одного пользователя, а скрипт бэкапирования запускается от пользователя root, надо скопировать конфигурационный файл rclone

$ sudo mkdir -p /root/.config/rclone/
$ sudo cp /home/%user%/.config/rclone/rclone.conf /root/.config/rclone/rclone.conf

Максим Макаров
У блога появился хостинг, его любезно предоставила компания Облакотека.
Облакотека - облачные сервисы для создания и управления виртуальной ИТ-инфраструктурой.
Если вам понравился мой блог и вы хотели бы видеть на нем еще больше полезных статей, большая просьба поддержать этот ресурс. Для этого достаточно кликнуть на контекстную рекламу, расположенную на сайте.
Оцените автора
IT Draft
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.