rclone с WebShield S3
Настройка rclone для синхронизации файлов с S3-совместимым объектным хранилищем WebShield.
rclone синхронизирует файлы с полусотней облачных хранилищ, и наше — одно из них: отдельного драйвера не требуется, подключение идёт через универсальный бэкенд s3 с провайдером Other. Ключи и бакеты — в разделе Объектное хранилище.
Что понадобится
Заголовок раздела «Что понадобится»- Endpoint:
https://s3.webshield.pro - Access Key ID и Secret Access Key со страницы Хранилище S3 в личном кабинете.
- Полное имя бакета с префиксом аккаунта (например,
u42-backups).
Установка
Заголовок раздела «Установка»# Debian/Ubuntusudo apt install rclone# macOSbrew install rclone# или официальный установщик: https://rclone.org/install/Настройка remote
Заголовок раздела «Настройка remote»Добавьте remote в ~/.config/rclone/rclone.conf (создайте файл, если его нет):
[webshield]type = s3provider = Otheraccess_key_id = WSS...secret_access_key = <секрет>endpoint = https://s3.webshield.proforce_path_style = trueno_check_bucket = trueprovider = Other и force_path_style = true заставляют rclone работать с
универсальным path-style эндпоинтом S3. no_check_bucket = true отключает
попытку создать бакет перед загрузкой — без неё часть команд завершается
ошибкой AccessDenied, см. Ошибка CreateBucket: Access
Denied. Как альтернатива — запустите
rclone config, выберите Amazon S3 Compliant → Other и введите те же
значения интерактивно.
Основные команды
Заголовок раздела «Основные команды»За именем remote (webshield:) следует bucket/path:
rclone ls webshield:u42-backups # список объектовrclone copy ./dump.sql.gz webshield:u42-backups/db/ # загрузить один файлrclone sync ./media webshield:u42-backups/media # зеркалировать каталог (с удалением лишнего)rclone copy webshield:u42-backups/db ./restore # скачатьrclone delete webshield:u42-backups/old # удалить путьrclone sync приводит приёмник в точное соответствие источнику, включая удаление лишних файлов на стороне бакета. Если задача — только добавлять и обновлять, берите rclone copy: он ничего не удаляет.
Полезные флаги:
rclone sync ./media webshield:u42-backups/media \ --progress \ # статистика передачи в реальном времени --transfers 16 \ # параллельные передачи --checksum # сравнение по контрольной сумме, а не по времени измененияОшибка CreateBucket: Access Denied
Заголовок раздела «Ошибка CreateBucket: Access Denied»Загрузка отдельного файла может завершиться такой ошибкой, хотя бакет существует и запись в него разрешена:
ERROR : cli.rs: Failed to copy: failed to prepare upload: operation error S3:CreateBucket, https response error StatusCode: 403, api error AccessDenied: Access Denied.Лечится параметром no_check_bucket = true в секции remote (см. выше) или
разовым флагом на конкретный вызов:
rclone copyto --s3-no-check-bucket ./file.txt webshield:u42-backups/file.txtПричина в лишней проверке: перед заливкой rclone отправляет CreateBucket,
рассчитывая получить в ответ BucketAlreadyOwnedByYou и убедиться, что бакет на
месте. Ключи WebShield создавать бакеты не вправе — это делается только в
личном кабинете, — поэтому приходит AccessDenied, который rclone трактует как
невозможность загрузки.
Отсюда и несимметричное поведение, когда копирование каталога проходит, а
копирование одиночного файла — нет. С каталогом rclone сначала запрашивает
список объектов приёмника, по нему помечает бакет существующим и CreateBucket
уже не вызывает. Для одиночного файла листинга не происходит, так что проверка
срабатывает во всей красе.
Примечания
Заголовок раздела «Примечания»- WebShield использует path-style адресацию; её включает
force_path_style = true. - Бакеты создаются и удаляются только в личном кабинете;
rclone mkdir webshield:nameбакет не создаёт. - При отрицательном балансе хранилище переходит в режим «только чтение»: загрузка (
copy/sync) отклоняется, скачивание работает. Пополните баланс, чтобы вернуть запись.