[](https://crates.io/crates/prefixload)
**🇷🇺 Русский | [🇺🇸 English](README.md)**
# Prefixload
Prefixload — это небольшая утилита командной строки, написанная на Rust, которая периодически загружает файлы из локального каталога в бакет Amazon S3 или S3-совместимого хранилища. Она выбирает файлы для загрузки на основе настраиваемых префиксов имён файлов.
Этот инструмент полезен для автоматизации резервного копирования, где файлы организованы и именуются с использованием постоянных префиксов (например, `db_backup_2025-09-21.sql`, `logs_myapp_2025-09-21.tar.gz`).
## Возможности
* **Правила на основе префиксов**: Настраивайте правила в YAML-файле для сопоставления префиксов файлов с определёнными удалёнными каталогами в вашем S3-бакете.
* **Совместимость с S3**: Работает как с AWS S3, так и с другими S3-совместимыми сервисами, такими как MinIO, Ceph или Wasabi.
* **Эффективная синхронизация**: Использует ETag'и S3 для проверки, был ли файл уже синхронизирован, избегая ненужных повторных загрузок.
* **Многосоставные загрузки**: Автоматически обрабатывает большие файлы, используя многосоставные загрузки.
* **Безопасное хранение учётных данных**: Команда `login` помогает безопасно сохранять ваши учётные данные AWS.
## Установка
Вы можете установить Prefixload напрямую с crates.io с помощью Cargo:
```sh
cargo install prefixload
```
## Использование
Инструмент требует однократной настройки учётных данных и конфигурации.
### 1. Вход в систему
Сначала настройте ваши учётные данные AWS. Инструмент запросит у вас ID ключа доступа (Access Key ID) и секретный ключ доступа (Secret Access Key) и сохранит их в стандартный файл `~/.aws/credentials`.
```sh
prefixload login
```
### 2. Настройка
Далее настройте правила резервного копирования. Конфигурация хранится в YAML-файле. Чтобы открыть его в вашем редакторе по умолчанию, выполните:
```sh
prefixload config edit
```
Это откроет файл конфигурации, где вы можете определить эндпоинт S3, бакет и правила сопоставления префиксов.
### 3. Запуск резервного копирования
Чтобы выполнить однократное резервное копирование на основе вашей конфигурации, используйте команду `run`:
```sh
prefixload run
```
Вы можете запустить его в "тихом" режиме, чтобы подавить вывод и вместо этого записывать лог в файл:
```sh
prefixload run --quiet
```
## Конфигурация
Файл конфигурации находится по пути `~/.config/prefixload/config.yml` (в Linux/macOS) или `%APPDATA%\prefixload\config.yml` (в Windows).
Вот пример файла `config.yml`:
```yaml
# URL-адрес эндпоинта вашего S3-совместимого хранилища
endpoint: "https://s3.example.com"
# Имя вашего S3-бакета для загрузки файлов
bucket: "my-backup-bucket"
# Регион AWS. Требуется SDK.
region: "us-east-1"
# Установите `true` для S3-совместимых сервисов, требующих адресации в стиле пути (например, MinIO).
force_path_style: false
# Размер части загрузки в байтах для многосоставных загрузок (например, 15 МБ).
part_size: 15728640
# Путь к локальному каталогу, где хранятся ваши файлы.
local_directory_path: "/var/backups"
# Правила сопоставления для загрузки файлов.
directory_struct:
# Файлы, начинающиеся с "db_backup_", будут загружены в каталог "database/" в бакете.
- local_name_prefix: "db_backup_"
remote_path: "database/"
# Файлы, начинающиеся с "app_logs_", будут загружены в каталог "application_logs/".
- local_name_prefix: "app_logs_"
remote_path: "application_logs/"
```