Перейти к содержимому
WebShield Docs

rclone с WebShield S3

Настройка rclone для синхронизации файлов с S3-совместимым объектным хранилищем WebShield.

rclone синхронизирует файлы с полусотней облачных хранилищ, и наше — одно из них: отдельного драйвера не требуется, подключение идёт через универсальный бэкенд s3 с провайдером Other. Ключи и бакеты — в разделе Объектное хранилище.

  • Endpoint: https://s3.webshield.pro
  • Access Key ID и Secret Access Key со страницы Хранилище S3 в личном кабинете.
  • Полное имя бакета с префиксом аккаунта (например, u42-backups).
Окно терминала
# Debian/Ubuntu
sudo apt install rclone
# macOS
brew install rclone
# или официальный установщик: https://rclone.org/install/

Добавьте remote в ~/.config/rclone/rclone.conf (создайте файл, если его нет):

[webshield]
type = s3
provider = Other
access_key_id = WSS...
secret_access_key = <секрет>
endpoint = https://s3.webshield.pro
force_path_style = true
no_check_bucket = true

provider = 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 # сравнение по контрольной сумме, а не по времени изменения

Загрузка отдельного файла может завершиться такой ошибкой, хотя бакет существует и запись в него разрешена:

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) отклоняется, скачивание работает. Пополните баланс, чтобы вернуть запись.