Базовое руководство по использованию MinIO — сервера хранилища, запущенного вами для вашего экземпляра Discourse

Использование сервера MinIO для объектного хранилища, совместимого с S3

MinIO — это решение для объектного хранилища, совместимое с S3, которое по умолчанию является облачно-ориентированным, но при этом легко разворачивается на локальных серверах, VPS или в облачных средах. Оно может служить альтернативой Amazon AWS S3 и другим системам и полностью совместимо с Discourse при правильной настройке.

В данном разделе предполагается, что в вашей среде выполнены следующие условия:

  1. У вас есть полностью настроенный экземпляр сервера MinIO.
  2. В конфигурации MinIO включена поддержка доменов.
  3. Настройка DNS для MinIO выполнена корректно, чтобы поддомены бакетов правильно резолвились на сервер MinIO.
  4. На сервере MinIO существует бакет discourse-data с политикой доступа «public».
  5. На сервере MinIO существует бакет discourse-backups, предназначенный для загрузки файлов и имеющий приватный доступ (не публичный; это политика по умолчанию для новых бакетов).
  6. Ваш URL S3 CDN правильно настроен и указывает на бакет, кэшируя запросы, как упоминалось ранее в этом документе.

Если все вышеуказанные требования выполнены, вы готовы к работе.

Пример конфигурации может выглядеть следующим образом:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3

Это обеспечит базовую конфигурацию MinIO, где сервер MinIO используется вместо Amazon S3.

4 лайка

Отлично, что MinIO теперь корректно работает с бакетами в стиле поддоменов и снова совместим с Discourse.

Можете ли вы отредактировать вики Использование объектного хранилища для загрузок (S3 и клоны), чтобы добавить инструкции для MinIO?

3 лайка

Это уже какое-то время работает как с бакетами в поддомене, так и с бакетами в пути. Однако компонент настройки DNS является самым болезненным — для его работы требуются специальные правила DNS с подстановочными знаками или кастомный DNS-сервер, который активно знает обо всех существующих бакетах (или не знает). Я реализовал это в bind9 с помощью зон с подстановочными знаками, но при попытке сделать то же самое в Cloudflare или других сервисах части, связанные с поддоменом, вызывают серьёзные сбои.

Если вы считаете, что вышеизложенное подходит для этого раздела, я с радостью добавлю его. Однако это потребует включения раздела «ограничения», и я буду признателен, если вы дадите мне возможность внести правки по формулировкам и т. п. до публикации. (Обратите внимание, что я не указал URL CDN, так как в моём развёртывании нет CDN, потому что деньги — это не то, с чем я могу экспериментировать).

3 лайка

Пользователи, которые запускают MinIO исключительно для Discourse, также могут вручную создать записи DNS для двух бакетов Discourse, верно?

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

2 лайка

Верно, но, как вы и сказали, конфигурация выходит за рамки обсуждения, поэтому я просто укажу, что пути поддоменов бакетов должны разрешаться (а настройку DNS оставлю на усмотрение ${ADMINS} экземпляра).

2 лайка

Да, и я соответствующим образом отредактировал вики. Однако, насколько мне известно, MinIO не предоставляет облачные услуги, поэтому я оставил поле «Название службы» в оглавлении вики в начале пустым. При необходимости внесите соответствующие изменения.

2 лайка

Отлично! Спасибо за вклад!

1 лайк

Пожалуйста!

Я также внес правки: провайдер теперь Self-hosted, но раздел MinIO всё ещё связан. Это должно решить проблему отсутствия облачного решения, которое я пока смог найти. (Вы можете закрыть эту ветку, если хотите, так как она уже интегрирована в пост вики).

3 лайка

Также обнаружил (спасибо открытому коду и хорошей документации MinIO!), что CORS по умолчанию включен для всех HTTP-методов MinIO — поэтому устанавливать правила CORS не нужно, они уже присутствуют. Также обновил раздел о самостоятельной установке MinIO, а также внес несколько правок в грамматику.

Спасибо @Falco за помощь в поиске проблемы, которую я заметил во время сборки/пересборки приложения, и за базовые рекомендации по настройке CDN со StackPath (поскольку мне нужен был полностью функциональный тест, и у меня уже есть CDN StackPath для других задач, поэтому использование CDN-стека подтвердило, что всё работает!).

2 лайка

Я не понимаю, как включить режим force path style. Когда я настраиваю версию 2.6.8 с MinIO через параметры S3, имя бакета всегда добавляется в начало конечной точки S3, тогда как оно должно добавляться в конец как путь после конечной точки S3.

Также, судя по образцу конфигурации на GitHub, опция s3_force_path_style была удалена. Не упустил ли я что-то? Спасибо.

@ceelian

Discourse использует режим DNS, а не режим пути, для S3. Так было уже ДОВОЛЬНО долго, поэтому я не упоминаю ничего о режиме пути ни в руководстве, ни на странице руководства по хранению в S3. Тебе также стоит научиться создавать новые темы, а не воскрешать старую тему для чего-то нерелевантного.

1 лайк

@teward Спасибо за обратную связь. Извините за оживление мертвых — я привык к стилю написания в GitHub issues :slight_smile: Я создам новую тему о том, как мы можем использовать режим пути в S3 для Discourse.

К сведению: это невозможно. Я не думаю, что режим пути больше поддерживается, именно поэтому опция принудительного включения режима пути для Discourse исчезла. Это также объясняет, почему в разделе, который я изначально добавил в руководство по настройке совместимого с S3 объектного хранилища, теперь в разделе «Ограничения и требования» указано:

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

Давным-давно, когда я только начал работать с Discourse, у них была такая опция, но затем её убрали, и мне пришлось отказаться от использования MinIO в качестве бэкенда. СЕЙЧАС, поскольку в документации MinIO есть инструкции по настройке работы в режиме DNS (то есть пути вида бакет[.]сервер[.]com, как это работает в S3), всё работает при правильной настройке MinIO. (Спасибо сотрудникам/модераторам/системе за повышение моего уровня доверия, что теперь я могу редактировать саму вики).

2 лайка

Спасибо за уточнение и подсказку, как решить проблему!

Эта тема была автоматически закрыта через 24 часа после последнего ответа. Новые ответы больше не принимаются.