Настройка провайдера объектного хранилища, совместимого с S3, для загрузки файлов

Привет, @mcwumbly. Это было очень легко найти, когда я искал «S3 clone». Сейчас я не могу его найти. Была ли проблема с этим заголовком? Есть ли поиск, который его найдет? Можем ли мы добавить что-то (не помню, как это называется), чтобы оно автоматически ссылалось на некоторые слова, как это делает стандартная установка (но я не могу придумать, какие слова использовать).

3 лайка

Как человек, который ссылается на эти темы несколько раз в неделю, я в какой-то мере согласен :stuck_out_tongue:

Может быть, добавление «s3 clones» в тело первого поста поможет поиску?

2 лайка

Я заметил, что в интернете чаще встречается выражение «S3-совместимый», поэтому я изменил его во время общей проверки заголовков документации, например: S3 API Compatibility | MinIO AIStor

Однако я считаю, что предложение добавить другие поисковые запросы в текст первого сообщения (OP) имеет смысл. (Я только что добавил их в этот пост).

1 лайк

Выглядит нормально. Думаю, нам придется подстраиваться под изменения. :person_shrugging:

Да. Это действительно не так уж сложно. У вас получится, @pfaffman!

@falco:

2 лайка

Привет, удалось ли кому-нибудь настроить объектное хранилище Contabo для совместимых с S3 загрузок? Похоже, что при загрузке имя репозитория добавляется как префикс в URL.

Например, если у вас есть бакет с именем community, создается URL вида https://community.eu2.contabostorage.com.

Я наблюдал такое поведение, например, в Duplicati, но можно исключить ситуацию, когда имя бакета добавляется в домен.

Буду признателен, если кто-то знает решение, позволяющее использовать это объектное хранилище, так как у него очень хорошие цены.

Я провёл несколько тестов по настройке домена как CNAME в моём домене через Cloudflare для обеспечения SSL, но для community.cdn.midominio.com SSL-сертификат больше не действует, так как они используют wildcard-сертификат. Если же я отключаю прокси Cloudflare, возникает ошибка, поскольку сертификат считается некорректным.

С уважением,

1 лайк

Вы пробовали установить настройку CDN S3 на https://community.eu2.contabostorage.com? На мой взгляд, это сработает.

Не существует, это конечная точка Contabo eu2.contabostorage.com

1 лайк

Да, но какой будет финальный URL файла в бакете?

2 лайка

![](upload://u6BBQfNFGrA4yuaLeqABnVkt87U.png)

Он имеет в виду, что если вы загрузите файл в бакет самостоятельно (используя любой доступный инструмент для загрузки файла), какой URL-адрес вы будете использовать для доступа к файлу?

2 лайка

https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad/castopod-1.png

Структура следующая:

Хост: https://eu2.contabostorage.com/
Пользователь: 9198f3bf2d6e43dd86fab037ebad3aee
Ведро: comunidad
Файл: castopod-1.png

2 лайка

Это не рабочий URL. Но, думаю, он может стать рабочим, если заменить двоеточие на слэш?

Ты описывал это иначе в своём первом сообщении, так что, возможно, теперь он сможет предложить ещё что-то.

1 лайк

Попробуйте установить

  DISCOURSE_S3_CDN_URL: "https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad"

и пересобрать.

2 лайка

R2 от Cloudflare наконец-то стал общедоступным (как выяснилось, на это ушло всего лишь год). (Вот оригинальное объявление: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)

Я создал бакет.

Я создал токен со следующими правами: «Редактирование: разрешить редактирование всех объектов, а также операции перечисления, записи и удаления для всех бакетов».

Вот что я пробовал:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: redacted
  DISCOURSE_S3_SECRET_ACCESS_KEY: redacted
  DISCOURSE_S3_CDN_URL: https://pub-72eaa03782c542edbe00598fd1666be1.r2.dev
  DISCOURSE_S3_BUCKET: lc-testing
  DISCOURSE_S3_BACKUP_BUCKET: lc-testing/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_ENDPOINT: https://cb46accbfcc3db1bdbba2bce07f8b509.r2.cloudflarestorage.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  FORCE_S3_UPLOADS: 1

Однако загрузка ресурсов завершается ошибкой:

Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' со значением 'public-read' не реализован

Затем я вспомнил о необходимости сделать бакет общедоступным, как описано здесь: Public buckets · Cloudflare R2 docs

Но это всё равно не помогло.

На странице S3 API compatibility · Cloudflare R2 docs указано, что заголовок x-amz-acl не поддерживается.

Беглый взгляд на код Discourse не позволяет однозначно сказать, что возможно заставить R2 работать без изменений в ядре.

После отключения загрузки резервные копии создаются успешно, так что R2 оказывается очень дешёвым решением для хранения резервных копий S3. Однако, поскольку я сделал этот бакет общедоступным, резервная копия также стала публичной (если угадать имя файла). Поэтому, если проблема будет решена, вам понадобятся отдельные бакеты для резервных копий и для загрузки ресурсов.

Я удалил эту строку и смог убедиться, что файл был загружен, а также получить к нему доступ через пользовательский домен, указанный в параметре s3_cdn_url. (Аналогичное изменение в задаче rake для S3 позволяет загружать ресурсы.)

5 лайков

Похоже, нам стоит добавить это в ОП как несовместимое, пока они не реализуют ACL на уровне объектов. Спасибо, что попробовали!

2 лайка

Да. Необходимые изменения в ядре, чтобы разрешить ему пропускать установку ACL, выглядят довольно запутанно. Можно сказать, что это допустимо только для резервных копий. Если вы не предпринимаете лишних усилий, чтобы сделать бакет общедоступным, всё должно быть в порядке.

1 лайк

Проблема заключается в конечной точке S3

1 лайк

Я только что протестировал R2, но, похоже, они не учитывают нашу информацию «Content-Encoding», хотя в их документации указано, что будут. Возможно, через год это станет рабочим вариантом.

3 лайка

Это требует добавления предупреждающего сообщения в разделы MinIO или общие разделы. Необходимо разместить уведомление следующего содержания: «Discourse использует DNS-режим для путей в системах хранения, совместимых с S3. Если бэкенд поддерживает только режим путей, но не DNS-режим для путей к ведрам, то он несовместим с Discourse». Именно поэтому MinIO изначально отсутствовал в списке, а позже был добавлен.

Также необходимо обновить раздел «Сервер хранения MinIO»: в пункте №2 нужно указать следующее:

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

РЕДАКТИРОВАНИЕ: Похоже, что благодаря этому посту я получил статус участника (уровень доверия 2), поэтому теперь могу редактировать пост в вики. Действий от модераторов не требуется, хотя я и просил их внести правки.

4 лайка

Здорово! Спасибо за помощь в поддержании актуальности информации. Это именно то предупреждение, которое я с радостью бы увидел.

:clinking_glasses: :palms_up_together:

2 лайка