Перейти к содержанию

Автоматическое резервное копирование данных с помощью Rclone и Cloudflare R2 (на примере Marzban)

Опубликовано
  • Админы

Введение

В этой статье мы рассмотрим, как настроить автоматическое резервное копирование данных с использованием Rclone и Cloudflare R2. Мы создадим bash-скрипт, который будет создавать архив, загружать его в Cloudflare R2 и отправлять уведомления через Telegram. Также добавим этот скрипт в crontab для регулярного выполнения каждые 4 часа. Все это будет создавать архивы нашего мэйн сервера Marzban.

Что такое Rclone?
Rclone – это клиент командной строки для обеспечения работы и синхронизации файлов и директорий с облачными хранилищами. Облачный провайдер поддерживает множество, включая Amazon S3, Google Drive, Dropbox, и, конечно, Cloudflare R2. Rclone используется для резервного копирования файлов, синхронизации файлов между различными облачными и локальными хранилищами.

Различные функции Rclone включают:

  • Synchronization – синхронизация файлов между локальными хранилищами и облачными провайдерами.
  • Copy – копирование файлов между различными папками облачного хранилища.
  • Шифрование – шифрование файлов.
  • Automator – работа по расписанию с использованием скриптов и crontab.
  • Поддержка облачных провайдеров: Amazon S3, Google Drive, Dropbox, OneDrive, Cloudflare R2 и других.

Что такое Cloudflare R2?
Cloudflare R2 – это хранилище объектов, предоставляемое облачной службой безопасности Cloudflare. Оно предназначено для хранения больших объемов данных с минимальными затратами и высокой производительностью. R2 предоставляет доступ к данным через API, совместимый с S3, что позволяет использовать такие инструменты, как Rclone, для управления файлами.

Преимущества Cloudflare R2:

  • Низкие затраты: отсутствие платы за исходящий трафик.
  • Высокая производительность: быстрая доставка контента благодаря глобальной сети Cloudflare.
  • Совместимость с S3: возможность использования существующих инструментов и скриптов для работы с данными.
  • 10ГБ пространство доступно на каждом аккаунте (в сумме всех бакетов)

Настройка Cloudflare R2

К сожалению, первым делом, даже чтобы воспользоваться бесплатно, вам нужно будет привязать банковскую карту к своему аккаунту CF.

image.png

РФ карты не принимает.

НО без проблем принимает карты от Cashinout, сервис который я упоминал в этой статье:

Вы можете сделать хитро.
Оформить карту в Cashinout, пройти верификацию в CF, а затем удалить свою карту (деньги находящиеся на ней вернутся на ваш счет аккаунта Cashinout)

Для начала работы с Cloudflare R2 выполните следующие шаги:

  1. Создайте аккаунт Cloudflare: Зарегистрируйтесь на сайте Cloudflare и войдите в свой аккаунт. (этот шаг я пропускаю, понимая что у вас он уже есть)
  2. Создайте R2 хранилище:
    • В панели управления Cloudflare перейдите в раздел R2.
      image.png
    • Создайте новый бакет, указав его имя и настройки.
      image.png

      image.png
  3. Создайте API токен:
    • Перейдите в раздел API Tokens.
      image.png
    • Нажмите кнопку Create Token.
      image.png
    • Выберите Введите имя и укажите параметры так как на скриншоте
      image.png
    • Нажмите Create Token и сохраните ваш токен. (можете пока просто не закрывать окно)
       

Установка и настройка Rclone

Установка и настройка Rclone

  1. Установите Rclone:

    curl https://rclone.org/install.sh | sudo bash

    image.png

  2. Настройте Rclone:

    rclone config 
  3. Следуйте инструкциям для создания нового удаленного подключения:
    image.png

  4. n) New remote
    name> s3cf
    Type of storage to configure.
    Enter a string value. Press Enter for the default ("").
    Storage> s3
    AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY
    AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY
    Region to connect to.
    Enter a string value. Press Enter for the default ("").
    region> 
    Endpoint for S3 API.
    Optional.
    Use an empty string for the default endpoint.
    Enter a string value. Press Enter for the default ("").
    endpoint> https://<account-id>.r2.cloudflarestorage.com

    AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY
    AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY
    Эти параметры мы получаем из нашего окна с API ключами CF.
    image.png


  5. Когда нужно будет указать в последнем этапе endpoint, вы можете взять их из настроек бакета.
    image.png
    openode (из моего примера) вводить не нужно!

Готово!

Чтобы проверить подключение, вы можете ввести команду:

rclone ls s3cf:openode

В данном случае s3cf  -  Это название конфига которое вы создавали на первом шаге rclone config

А openode - Это имя бакета которое вы создавали в CF.

 

Создание и настройка bash-скрипта

Для создания архива в скрипте будем использовать пакет zip для этого установим его:

apt install zip

Создайте файл скрипта backup_script.sh в папке /root/:

nano /root/backup_script.sh

Вставьте следующий код:

#!/bin/bash

# Переменные для Telegram
TELEGRAM_BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
TELEGRAM_CHAT_ID="YOUR_TELEGRAM_CHAT_ID"

# Папки для архивации
SRC_DIRS=("/opt/marzban" "/var/lib/marzban")

# Папка для хранения архива
DEST_DIR="/root"

# Имя архива с датой и временем
DATE=$(date +'%Y-%m-%d_%H-%M-%S')
ARCHIVE_NAME="OPENODE_backup_$DATE.zip"
ARCHIVE_PATH="$DEST_DIR/$ARCHIVE_NAME"

# Создание архива
zip -r "$ARCHIVE_PATH" "${SRC_DIRS[@]}"

# Целевая папка в Cloudflare R2
TARGET_DIR="s3cf:openode/"

# Функция для отправки уведомления в Telegram
send_telegram_message() {
    MESSAGE=$1
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" -d chat_id="${TELEGRAM_CHAT_ID}" -d text="${MESSAGE}"
}

# Загрузка архива в Cloudflare R2 и отправка уведомления
if rclone copy "$ARCHIVE_PATH" "$TARGET_DIR"; then
    send_telegram_message "Архив $ARCHIVE_NAME успешно загружен в Cloudflare R2."
    # Удаление локального архива после копирования
    rm "$ARCHIVE_PATH"
else
    send_telegram_message "Ошибка при загрузке архива $ARCHIVE_NAME в Cloudflare R2."
fi

# Ротация архивов в Cloudflare R2 (оставить только за последние 7 дней)
rclone delete --min-age 7d "$TARGET_DIR"

Сохраняем.


 

Пояснение:

 

# Ротация архивов в Cloudflare R2 (оставить только за последние 7 дней)
rclone delete --min-age 7d "$TARGET_DIR"

Здесь функция rclone которая будет автоматически следить за ротацией.

Имейте ввиду, что эта функция удалить ВСЕ файлы старше 7 дней находящиеся в вашей папке!

TELEGRAM_BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
TELEGRAM_CHAT_ID="YOUR_TELEGRAM_CHAT_ID"

Здесь нам нужно обязательно задать наши ID для уведомлений в телеграм об успешном копировании.

ARCHIVE_NAME="OPENODE_backup_$DATE.zip"   - тут можно задать свое имя архива

TARGET_DIR="s3cf:openode" - тут задаются ваши параметры из пунктов выше.

 

 

Сделайте скрипт исполняемым:

chmod +x /root/backup_script.sh

Можем попробовать запустить:

./backup_script.sh

Если все прошло хорошо, и уведомления получены в телеграм, то можно настроить crontab:

crontab -e

Вставляем в пустую строку:

0 */4 * * * /root/backup_script.sh >/dev/null 2>&1

Готово!

Каждые 4 часа будут собираться архивы и приходить уведомления.

 

 

Featured Replies

Опубликовано
  • Автор
  • Админы

Спасибо @RandomVPN за уточнение и проверку, для использования бесплатными 10Гб нужно в любом случае подвязать карту.

Можете воспользоваться сервисом cashinout, или любым другим. Как выпустить карту, писал в этой статье

К слову сказать, я бы рекомендовал вам пользоваться сервисом CF, в том числе для покупки доменов. Так что будет не лишним иметь там привязанную карту.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.