Движок хранения: S3 (Pro)

File storage: S3(Pro)Professional Edition+

Введение

На базе плагина Менеджер файлов этот плагин добавляет поддержку типов файлового хранилища, совместимых с протоколом S3. Любое объектное хранилище, поддерживающее протокол S3, можно легко интегрировать, например: Amazon S3, Aliyun OSS, Tencent COS, MinIO, Cloudflare R2 и т. п., что дополнительно повышает совместимость и гибкость сервисов хранения файлов.

Возможности

  1. Загрузка на стороне клиента: процесс загрузки файлов не проходит через сервер NocoBase, а напрямую обращается к сервису хранения файлов, обеспечивая более эффективную и быструю загрузку.

  2. Приватный доступ: по умолчанию используются подписанные URL со сроком действия. Для публичных бакетов также можно создавать URL без подписи.

Сценарии использования

  1. Управление коллекцией файлов: централизованное управление и хранение всех загруженных файлов; поддержка разных типов файлов и способов хранения для удобной классификации и поиска.

  2. Хранение в поле вложения: используется для хранения данных вложений, загруженных в формах или записях; поддерживает связь с конкретными записями данных.

Настройка плагина

  1. Включите плагин Движок хранения: S3 (Pro) (plugin-file-storage-s3-pro).

  2. Нажмите "Настройки -> Менеджер файлов", чтобы перейти в настройки менеджера файлов.

  3. Нажмите кнопку "Добавить новый" и выберите "S3 Pro".

  1. После появления всплывающего окна вы увидите форму со множеством полей. Вы можете использовать последующую документацию, чтобы получить нужные параметры для соответствующего файлового сервиса и корректно заполнить форму.

Настройка URL

Помимо общих параметров Менеджера файлов — «URL NocoBase», «Исходный URL» и «Разрешить публичный доступ» — в S3 Pro можно отдельно настроить форматы URL загрузки и доступа, а также выбрать, следует ли использовать подписанные URL. Общие параметры описаны в обзоре движков хранения.

Эти параметры управляют разными этапами:

  • «URL NocoBase / Исходный URL» определяет, какой адрес возвращает запись файла
  • «Разрешить публичный доступ» определяет, проверяются ли разрешения на просмотр записи при обращении к URL NocoBase
  • «Не использовать подписанный URL» определяет, проверяет ли объектное хранилище подпись URL

Настройки можно комбинировать независимо. Рекомендуемая конфигурация по умолчанию: URL NocoBase, выключенная опция «Разрешить публичный доступ» и включённые подписанные URL.

Настройка URL S3 Pro

Как выбрать

СценарийURL файлаРазрешить публичный доступНе использовать подписанный URL
Файлы должны учитывать ролевые разрешения и разрешения на данные, а бакет должен оставаться приватнымURL NocoBaseВыключеноВыключено
Нужен публичный адрес файла NocoBase, а бакет должен оставаться приватнымURL NocoBaseВключеноВыключено
Внешнему сервису нужен временный доступ к адресу хранилищаИсходный URLНе применяетсяВыключено; настройте Access URL expiration
Публичному бакету или CDN нужен исходный адрес без подписиИсходный URLНе применяетсяВключено

Формат URL загрузки

«Формат URL загрузки» определяет S3 URL, который клиент использует при загрузке файлов. Выберите формат, поддерживаемый сервисом хранения. В форме отображается пример на основе текущих Endpoint, Bucket и пути:

  • «Bucket as subdomain»: https://bucket-name.s3.example.com/path/to/object
  • «Bucket as subpath»: https://s3.example.com/bucket-name/path/to/object
  • «Ignore bucket»: https://upload.example.com/path/to/object

Формат URL доступа

«Формат URL доступа» определяет, будет ли Bucket находиться в домене, в пути или отсутствовать в URL, когда S3 Pro формирует адрес доступа к файлу. Доступны те же три формата, что и для URL загрузки, но их можно настроить отдельно—например, для загрузки использовать S3 Endpoint, а для доступа домен CDN без Bucket.

Эта опция влияет на исходные URL и адрес хранилища, на который в итоге перенаправляет URL NocoBase, но не меняет формат самого URL NocoBase.

Не использовать подписанный URL

По умолчанию S3 Pro использует подписанные URL. Сформированный исходный URL содержит параметры подписи, например:

https://bucket-name.s3.example.com/path/to/object?X-Amz-Signature=xxxx

Подписанный URL действует в течение периода, заданного в «Access URL expiration», а бакет может оставаться приватным. При использовании URL NocoBase после успешной проверки разрешений NocoBase формирует подписанный адрес или перенаправляет на него.

Если включить «Не использовать подписанный URL», S3 Pro создаёт адрес без параметров подписи. Бакет и загруженные объекты должны разрешать публичное чтение, а «Access URL expiration» перестаёт действовать.

«Не использовать подписанный URL» управляет только проверкой подписи сервисом хранения и не изменяет разрешения записей NocoBase. Если выбран URL NocoBase, а «Разрешить публичный доступ» выключен, запрос по-прежнему должен сначала пройти проверку разрешений NocoBase.

Настройка поставщика услуг

Amazon S3

Создание бакета

  1. Откройте консоль Amazon S3.

  2. Нажмите кнопку "Create bucket" справа.

  1. Укажите Bucket Name, остальные поля можно оставить по умолчанию. Прокрутите страницу вниз и нажмите кнопку "Create", чтобы завершить создание бакета.

Настройка CORS

  1. В списке бакетов найдите созданный бакет и нажмите на него, чтобы открыть страницу сведений.

  1. Перейдите на вкладку Permission, затем прокрутите вниз до раздела конфигурации CORS.

  1. Введите следующую конфигурацию (при необходимости скорректируйте под свои требования) и сохраните.
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "POST",
            "PUT"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag"
        ],
        "MaxAgeSeconds": 3000
    }
]

Получение AccessKey и SecretAccessKey

  1. Нажмите кнопку Security credentials в правом верхнем углу страницы.

  1. Прокрутите страницу до раздела Access Keys и нажмите кнопку Create Access Key.

  1. Подтвердите соглашение (в примере используется корневая учетная запись; в рабочей среде рекомендуется использовать IAM).

  1. Сохраните отображаемые значения Access key и Secret access key.

Получение параметров и настройка

  1. Используйте значения AccessKey ID и AccessKey Secret, полученные на предыдущем шаге.

  2. Перейдите на панель свойств страницы сведений о бакете, чтобы получить Bucket name и Region.

Публичный доступ без подписи (опционально)

Настраивайте этот режим только при необходимости использовать URL без подписи, поскольку бакет и загруженные объекты должны разрешать публичное чтение. Если нужно лишь предоставить публичный URL NocoBase, включите «Разрешить публичный доступ» и оставьте подписанные URL включёнными; делать бакет публичным не требуется.

  1. Перейдите на вкладку Permissions (Permissions), прокрутите до блока Object Ownership (Object Ownership), нажмите Edit (Edit) и включите ACLs.

  1. Прокрутите до раздела Block public access, нажмите Edit и разрешите управление доступом через ACL.

  1. Включите «Не использовать подписанный URL» в настройках NocoBase.

Настройка превью миниатюр (опционально)

Эта настройка необязательна и используется для оптимизации размера или визуального эффекта предпросмотра изображений. Обратите внимание, что такое развертывание может повлечь дополнительные затраты. Конкретные тарифы смотрите в условиях AWS.

  1. Перейдите на страницу Dynamic Image Transformation for Amazon CloudFront.

  2. Нажмите кнопку Launch in the AWS Console в нижней части страницы, чтобы начать развертывание решения.

  3. Следуйте инструкциям мастера развертывания. Обратите внимание на следующие моменты:

    1. При создании стека укажите имя Amazon S3 бакета, в котором находятся исходные изображения. Введите имя бакета, созданного ранее.
    2. Если вы выбрали развертывание демо-интерфейса (demo UI), после развертывания вы сможете протестировать функции обработки изображений через этот интерфейс. В консоли AWS CloudFormation выберите свой стек, перейдите на вкладку Outputs, найдите значение, соответствующее ключу DemoUrl, и перейдите по ссылке.
    3. Это решение использует библиотеку sharp для Node.js для эффективной обработки изображений. Исходный код можно скачать из репозитория GitHub и при необходимости изменить.

  4. После завершения конфигурации дождитесь, пока статус развертывания изменится на CREATE_COMPLETE.

  5. В настройках NocoBase обратите внимание на следующее:

    1. Правила для миниатюр: укажите параметры обработки изображений, например ?width=100. Подробности см. в документации AWS.
    2. Конечная точка доступа: введите значение Outputs -> ApiEndpoint после завершения развертывания.
    3. «Формат URL доступа»: выберите «Ignore bucket», так как имя бакета уже указано в конфигурации и не требуется в URL доступа.

Пример конфигурации

Aliyun OSS

Создание бакета

  1. Откройте консоль OSS

  1. В левом меню нажмите "Buckets", затем нажмите кнопку "Create Bucket", чтобы начать создание бакета.

  1. Заполните информацию о бакете и нажмите кнопку Create.

    1. Имя Bucket Name выберите в соответствии с вашими бизнес-требованиями.

    2. Выберите Region, наиболее близкий к вашим пользователям.

    3. Остальные параметры можно оставить по умолчанию или настроить по необходимости.

Настройка CORS

  1. Перейдите на страницу сведений о бакете, созданном на предыдущем шаге.

  1. В центральном меню нажмите "Content Security -> CORS".

  1. Нажмите кнопку "Create Rule", заполните необходимые поля, прокрутите вниз и нажмите "OK". Вы можете ориентироваться на скриншот ниже или задать более детальные параметры.

Получение AccessKey и SecretAccessKey

  1. Нажмите "AccessKey" под аватаром аккаунта в правом верхнем углу.

  1. В демонстрационных целях AccessKey создается с помощью основной учетной записи. В рабочей среде рекомендуется использовать RAM для создания AccessKey. Подробности см. в https://www.alibabacloud.com/help/en/ram/user-guide/create-an-accesskey-pair

  2. Нажмите кнопку "Create AccessKey".

  1. Пройдите проверку учетной записи.

  1. Сохраните отображаемые значения Access key и Secret access key.

Получение параметров и настройка

  1. Используйте значения AccessKey ID и AccessKey Secret, полученные на предыдущем шаге.

  2. Перейдите на страницу сведений о бакете, чтобы получить имя Bucket.

  1. Прокрутите вниз, чтобы получить значение Region (окончание ".aliyuncs.com" указывать не нужно).

  1. Получите значение endpoint и добавьте префикс https:// при вводе в NocoBase.

Настройка превью миниатюр (опционально)

Эта настройка необязательна и используется только в случае необходимости оптимизировать размер или эффект предпросмотра изображений.

  1. Укажите параметры, связанные с Правилами для миниатюр. Для конкретных настроек параметров см. Image Processing Parameters.

  2. Для «Формат URL загрузки» и «Формат URL доступа» можно использовать одинаковые настройки.

Пример настройки

MinIO

Создание бакета

  1. В левом меню нажмите Buckets, затем нажмите Create Bucket, чтобы перейти на страницу создания.
  2. Введите имя бакета и нажмите кнопку Save.

Получение AccessKey и SecretAccessKey

  1. Перейдите в раздел Access Keys и нажмите кнопку Create access key, чтобы перейти на страницу создания.

  1. Нажмите кнопку Save.

  1. Сохраните значения Access Key и Secret Key из всплывающего окна для дальнейшей конфигурации.

Настройка параметров

  1. Перейдите на страницу Менеджер файлов в NocoBase.

  2. Нажмите кнопку Добавить новый и выберите S3 Pro.

  3. Заполните форму:

    • Идентификатор ключа доступа и секрет ключа доступа: используйте значения, сохранённые на предыдущем шаге.
    • Регион: для локально развёрнутого MinIO понятие региона отсутствует, поэтому можно указать auto.
    • Конечная точка: укажите доменное имя или IP-адрес вашего развёртывания.
    • Для «Формат URL доступа» выберите «Bucket as subpath».

Пример настройки

Tencent COS

Вы можете ориентироваться на конфигурацию файловых сервисов, рассмотренных выше, так как логика настройки аналогична.

Пример конфигурации

Cloudflare R2

Настройка аналогична конфигурации указанных выше файловых сервисов.

Пример конфигурации