Skip to content

Latest commit

 

History

History
323 lines (243 loc) · 18 KB

README-RU.md

File metadata and controls

323 lines (243 loc) · 18 KB

Napkin Tools: ReBack (Restore/Backup Utility)

GitHub License GitHub Actions Workflow Status GitHub Release GitHub Downloads

ReBack

Эта утилита предназначена для пользователей серверов, которым необходимо регулярно создавать бэкапы баз данных ( PostgreSQL, MongoDB и MySQL) и директорий. ReBack поддерживает сохранение бэкапов как локально, так и в S3-совместимых хранилищах, организуя их в удобной структуре и автоматически отслеживая срок хранения.

Также, ReBack поддерживает восстановление бэкапов из S3 хранилища в указанные в конфигурации элементы.

Оглавление

Возможности

  • Поддержка бэкапа PostgreSQL, MongoDB и MySQL как установленных локально, так и в Docker-контейнерах.
  • Бэкап локальных директорий.
  • Сохранение бэкапов локально и в S3-совместимых хранилищах.
  • Организация бэкапов в подкаталогах по именам элементов, указанным в конфигурации.
  • Генерация имён файлов бэкапов на основе имени элемента и времени создания.
  • Логирование всех шагов процесса в файл с ротацией при достижении 10МБ.
  • Конфигурирование через JSON-файл settings.json.
  • Восстановление бэкапов из S3-хранилища

Требования

  • Установленный Docker (для сохранения/восстановления из контейнеров).
  • S3-совместимое хранилище (для удалённого сохранения/восстановления бэкапов).

Скачивание

Вариант 1: Скачать из релизов

  1. Скачать последнюю версию с страницы релизов или использовать wget/curl:

    # Linux
    wget /~https://github.com/proDreams/reback/releases/download/v0.3.1/reback_linux -O reback
    
    # macOS Intel
    wget /~https://github.com/proDreams/reback/releases/download/v0.3.1/reback_macos_intel -O reback
    
    # macOS ARM
    wget /~https://github.com/proDreams/reback/releases/download/v0.3.1/reback_macos_aarch -O reback
    
    # Windows
    curl -L -o reback.exe /~https://github.com/proDreams/reback/releases/download/v0.3.1/reback.exe
  2. Для Linux и macOS: Сделайте файл исполнимым, выполнив команду:

    chmod +x reback
  3. Создать и настроить settings.json. Подробнее в Конфигурация

Вариант 2: Сборка локально

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

Требования:

  • Установленный Rust (рекомендуемая версия: rustc 1.83.0).
  • Менеджер инструментов Rust: rustup 1.27.1 или выше.
  1. Клонируйте репозиторий:

    git clone /~https://github.com/proDreams/reback.git
    cd reback
  2. Соберите приложение в режиме релиза:

    cargo build --release
  3. Для Linux и macOS. Сделайте файл исполняемым:

    chmod +x target/release/reback
  4. Исполняемый файл находится в директории target/release/reback

  5. Создать и настроить settings.json. Подробнее в Конфигурация

Конфигурация

Приложение конфигурируется через файл settings.json.

Внимание! Файл settings.json должен находиться в той же директории, что и исполняемый файл!

  1. Скачайте файл с шаблоном конфигурации:

    # Linux и macOS
    wget https://raw.githubusercontent.com/proDreams/reback/main/settings.json.example -O settings.json
    
    # Windows
    curl -L -o settings.json https://raw.githubusercontent.com/proDreams/reback/main/settings.json.example
  2. Откройте файл для редактирования:

    # Linux и macOS
    nano settings.json
    
    # Windows
    notepad settings.json
  3. Настройте конфигурацию под своё окружение и сохраните файл.

Обязательные параметры

{
  "s3_endpoint": "https://s3.example.com",
  "s3_region": "us-east-1",
  "s3_bucket": "my-bucket",
  "s3_access": "access-key",
  "s3_secret": "secret-key",
  "s3_path_style": "path",
  "backup_dir": "/tmp/backups",
  "elements": []
}
  • s3_endpoint: URL вашего S3-совместимого хранилища.
  • s3_region: Регион вашего S3-хранилища.
  • s3_bucket: Имя S3-бакета, куда будут сохраняться бэкапы.
  • s3_access: Ключ доступа для подключения к S3.
  • s3_secret: Секретный ключ для подключения к S3.
  • s3_path_style: Указывает стиль пути для S3 (например, "path" или "virtual-host").
  • backup_dir: Абсолютный путь до директории, где будут храниться локальные бэкапы. Если директория не существует, она будет создана автоматически.
  • elements: Массив объектов, каждый из которых описывает элемент для бэкапа (например, базу данных или директорию).

Элементы для бэкапа/восстановления:

Настраиваемый список элементов для бэкапа/восстановления.

Пример элемента:

{
  "element_title": "my_pg_db",
  "s3_folder": "postgres_backups",
  "backup_retention_days": 30,
  "s3_backup_retention_days": 90,
  "params": {
    "type": "postgresql",
    "db_host": "localhost",
    "db_port": 5432,
    "db_name": "my_database",
    "db_user": "user",
    "db_password": "password"
  }
}

Доступные типы элементов и их параметры:

  • postgresql — Бэкап базы данных PostgreSQL.
  • postgresql_docker — Бэкап базы данных PostgreSQL из Docker-контейнера.
  • mongodb — Бэкап базы данных MongoDB.
  • mongodb_docker — Бэкап базы данных MongoDB из Docker-контейнера.
  • mysql — Бэкап базы данных MySQL.
  • mysql_docker — Бэкап базы данных MySQL из Docker-контейнера.
  • folder — Бэкап локальной директории.
Тип элемента Параметр Описание Обязательность
postgresql db_host Хост базы данных. По умолчанию: localhost. Необязательный
db_port Порт для подключения. Обязательный
db_name Имя базы данных. Обязательный
db_user Пользователь базы данных. Обязательный
db_password Пароль пользователя. Обязательный
postgresql_docker docker_container Имя контейнера Docker с PostgreSQL. Обязательный
db_name Имя базы данных. Обязательный
db_user Пользователь базы данных. Обязательный
db_password Пароль пользователя. Обязательный
mongodb db_host Хост базы данных. По умолчанию: localhost. Необязательный
db_port Порт для подключения. Обязательный
db_user Пользователь базы данных. Необязательный
db_password Пароль пользователя. Необязательный
mongodb_docker docker_container Имя контейнера Docker с MongoDB. Обязательный
db_user Пользователь базы данных. Необязательный
db_password Пароль пользователя. Необязательный
mysql db_host Хост базы данных. По умолчанию: localhost. Необязательный
db_port Порт для подключения. Обязательный
db_name Имя базы данных. Обязательный
db_user Пользователь базы данных. Обязательный
db_password Пароль пользователя. Обязательный
mysql_docker docker_container Имя контейнера Docker с MySQL. Обязательный
db_name Имя базы данных. Обязательный
db_user Пользователь базы данных. Обязательный
db_password Пароль пользователя. Обязательный
folder target_path Путь до директории, которую нужно забэкапить. Обязательный

Общие параметры для всех элементов:

Параметр Описание
element_title Название элемента (для использования в имени директории и файла).
s3_folder Папка в S3 для хранения бэкапов.
backup_retention_days Количество дней хранения локальных бэкапов.
s3_backup_retention_days Количество дней хранения бэкапов в S3.

Использование

Бэкап

Для запуска процесса бэкапа выполните следующую команду:

./reback backup

Важно: Аргумент backup обязателен для запуска процесса бэкапа. Без него программа не будет выполняться, и вы получите ошибку.

Cron задача

Вы можете автоматизировать процесс бэкапа, создав задачу Cron. Например, чтобы запускать бэкап каждый день в 2:00, добавьте следующую строку в ваш файл crontab:

0 2 * * * /path/to/reback backup

Эта задача Cron будет:

  • Выполнять команду ./reback backup каждый день в 2:00.

Для редактирования crontab используйте команду:

crontab -e

Затем добавьте строку задачи Cron. Убедитесь, что путь к бинарнику reback.

Восстановление бэкапа

Есть два варианта восстановления бэкапов:

Восстановление всех бэкапов

  1. Убедитесь, что у вас есть настроенный settings.json с описанием всех необходимых элементов.
  2. Выполните команду для запуска восстановления:
    ./reback restore

Восстановление конкретных элементов

  1. Убедитесь, что у вас есть настроенный settings.json с описанием всех необходимых элементов.
  2. Выполните команду для запуска восстановления:
    # Шаблон
    ./reback restore <element_title1> <element_title2>
    
    # Пример
    ./reback restore my_pg_bd image_folder mongo_site

Автор

Автор программы: Иван Ашихмин
Telegram для связи: https://t.me/proDreams

Программа выполнена в рамках проекта "Код на салфетке".

Поддержка

Если вам нравится этот проект и вы хотите поддержать его дальнейшее развитие, рассмотрите возможность доната:

Ваша поддержка помогает проекту развиваться и улучшать будущие функции!

Лицензия

Этот проект распространяется под лицензией MIT. Подробности можно найти в файле LICENSE.