---
title: 'Rclone'
sidebar_label: 'Rclone'
sidebar_position: 2
description: 'Как установить и настроить Rclone, как работать с хранилищем через интерфейс командной строки Rclone'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import GrantAccess from '@site/docs/_partials/s3/grant-access.mdx'

# Rclone

[Rclone](https://rclone.org/) — это интерфейс командной строки для работы с объектами в S3.

## Настроить Rclone \{#configure-rclone}

1. [Настройте доступ к S3](#configure-s3-access).
2. [Установите клиент](#install-client).
3. [Создайте конфигурацию Rclone](#create-configuration).

### 1. Настроить доступ к S3 \{#configure-s3-access}

<GrantAccess />

### 2. Установить клиент \{#install-client}

:::info

Для совместимости с Selectel необходим Rclone версии v1.69 и выше.

:::

<Tabs queryString="os">
  <TabItem value="windows" default>
    <TabItemLabel>
      Windows
    </TabItemLabel>

    1. На [сайте Rclone](https://rclone.org/downloads/) скачайте дистрибутив для Windows.
    2. Распакуйте архив с дистрибутивом.
    3. Откройте командную строку.
    4. Перейдите в директорию с дистрибутивом:

       ```bash
       cd <path>
       ```

       Укажите `<path>` — путь к директории с дистрибутивом.
  </TabItem>

  <TabItem value="linux-macos">
    <TabItemLabel>
      Linux/macOS
    </TabItemLabel>

    1. Откройте терминал.
    2. Установите Rclone любым способом — например, готовым скриптом:

       ```bash
       sudo -v ; curl https://rclone.org/install.sh | sudo bash
       ```

       Подробнее о всех способах установки на [сайте Rclone](https://rclone.org/install/).
  </TabItem>
</Tabs>

### 3. Создать конфигурацию Rclone \{#create-configuration}

1. Убедитесь, что в бакете [включена Virtual-Hosted адресация](/s3/buckets/addressing-types.mdx#enable-virtual-hosted).

2. Откройте режим конфигурирования:

   ```bash
   rclone config
   ```

   В консоли появится диалог:

   ```bash
   No remotes found, make a new one?
   n) New remote
   s) Set configuration password
   q) Quit config
   ```

3. Создайте новую конфигурацию:

   ```bash
   n/s/q> n
   ```

4. Введите имя подключения к удаленному хранилищу (например, `selectel_s3`):

   ```bash
   name> selectel_s3
   ```

5. Введите тип хранилища, который указан после строки `Amazon S3 Compliant Storage Providers including ..., Selectel, ...`:

   ```bash
   Storage> s3
   ```

6. Введите тип провайдера, который указан после строки `Any other S3 compatible provider`:

   ```bash
   provider> Selectel
   ```

7. Выберите способ получения авторизационных данных, который указан после строки `Enter AWS credentials in the next step`:

   ```bash
   env_auth> false
   ```

8. Введите `AWS Access Key ID`:

   ```bash
   access_key_id> <access_key>
   ```

   Укажите `<access_key>` — значение поля **Access key** из [S3-ключа](#configure-s3-access).

9. Введите `AWS Secret Access Key (password)`:

   ```bash
   secret_access_key> <secret_key>
   ```

   Укажите `<secret_key>` — значение поля **Secret key** из [S3-ключа](#configure-s3-access).

10. Введите [пул](/infrastructure/locations.mdx#pool), в котором находится S3 (например, `ru-1`):

    ```bash
    region> <pool>
    ```

11. Введите URL для доступа по протоколу S3 API:

    ```bash
    endpoint> <s3_domain>
    ```

    Укажите `<s3_domain>` — [домен S3 API](/s3/manage/domains.mdx#s3-api-domains). Домен зависит от [пула](/infrastructure/locations.mdx#pool), в котором находится S3.

12. Параметр `location_constraint` оставьте пустым.

13. Параметр `acl` оставьте пустым.

14. Параметр `Edit advanced config` оставьте пустым или введите `n`.

15. Проверьте конфигурацию:

    ```bash
    Remote config
    --------------------
    [selectel_s3]
    type = s3
    provider = Selectel
    env_auth = false
    access_key_id = <access_key>
    secret_access_key = <secret_key>
    region = <pool>
    endpoint = <s3_domain>
    --------------------
    y) Yes this is OK
    e) Edit this remote
    d) Delete this remote
    ```

    Если конфигурация верная, нажмите **Enter**.
    Если нет, введите `e` и отредактируйте конфигурацию.

16. Подтвердите создание конфигурации:

    ```bash
    y/e/d> y
    ```

17. Выйдите из диалога настроек:

    ```bash
    e/n/d/r/c/s/q> q
    ```

## Работа с Rclone \{#working-with-rclone}

### Формат команд \{#command-template}

Общий вид команд:

```bash
<command> <remote_name>:<bucket_name>/<object_name>
```

Укажите:

* `<command>` — команду Rclone вида `rclone <subcommand>`. Посмотреть все команды можно на [сайте Rclone](https://rclone.org/commands/) или в выводе команды `rclone --help`
* `<remote_name>` — имя подключения, указанное при настройке Rclone;
* `<bucket_name>` — имя бакета;
* опционально: `<object_name>` — имя объекта.

### Создать бакет \{#create-bucket}

Через S3 API можно создать только приватный бакет.

1. Откройте CLI.
2. Создайте бакет:

   ```bash
   rclone mkdir <remote_name>:<bucket_name>
   ```

   Укажите:

   * `<remote_name>` — имя подключения, указанное при настройке Rclone;
   * `<bucket_name>` — имя нового бакета. Учитывайте правила именования бакетов, подробнее в инструкции [Bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) документации AWS.

### Посмотреть список объектов \{#view-object-list}

1. Откройте CLI.
2. Посмотрите список объектов:

   ```bash
   rclone ls <remote_name>:<bucket_name>/<prefix>
   ```

   Укажите:

   * `<remote_name>` — имя подключения, указанное при настройке Rclone;
   * `<bucket_name>` — имя бакета;
   * опционально: `<prefix>` — [префикс](/s3/objects/manage-folder.mdx), объекты с которым нужно вывести.

### Загрузить объект \{#upload-object}

При выполнении операций копирования и синхронизации Rclone проверяет все объекты по дате и времени изменения или md5-сумме. Из директории-источника в директорию назначения передаются объекты, которые были изменены.

1. Откройте CLI.
2. Загрузите объект из локальной директории:

   ```bash
   rclone copy <path> <remote_name>:<bucket_name>/<object_name>
   ```

   Укажите:

   * `<path>` — путь до объекта в локальной директории;
   * `<remote_name>` — имя подключения, указанное при настройке Rclone;
   * `<bucket_name>` — имя бакета;
   * опционально: `<object_name>` — имя, с которым будет загружен объект. Если его не указать, будет использовано имя файла.

### Получить ссылку на объект \{#obtain-link-to-object}

Вы можете получить ссылку на объект в публичном или приватном бакете через подписанный URL (Presigned URL).
Подробнее о Presigned URLs в инструкции [Sharing objects with presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html) документации AWS.

1. Откройте CLI.
2. Получите ссылку:

   ```bash
   rclone link <remote_name>:<bucket_name>/<path_to_object> --expire <time>
   ```

   Укажите:

   * `<remote_name>` — имя подключения, указанное при настройке Rclone;
   * `<bucket_name>` — имя бакета;
   * `<path_to_object>` — путь к объекту в бакете;
   * опционально: `--expire <time>` — срок действия ссылки, где `<time>` — время, через которое ссылка перестанет работать, например `24h`. Если не добавить параметр `--expire <time>`, ссылка будет работать один час.

### Удалить объект \{#delete-object}

1. Откройте CLI.
2. Удалите объект:

   ```bash
   rclone deletefile <remote_name>:<bucket_name>/<object_name>
   ```

   Укажите:

   * `<remote_name>` — имя подключения, указанное при настройке Rclone;
   * `<bucket_name>` — имя бакета;
   * `<object_name>` — имя объекта, который нужно удалить.

<Formbricks />
