rclone с WebShield S3
rclone — универсальная утилита командной строки для синхронизации файлов с объектным хранилищем. С WebShield S3 работает через универсальный бэкенд S3. Как получить ключи и создать бакеты — см. Объектное хранилище.
Что понадобится
Заголовок раздела «Что понадобится»- 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) отклоняется, скачивание работает. Пополните баланс, чтобы вернуть запись.