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

Кто-нибудь использовал SeaweedFS? В связи с неопределённостью вокруг MinIO я рассматриваю этот вариант и планирую протестировать его, чтобы проверить, нет ли проблем совместимости с Discourse.

Я смог правильно настроить R2, используя этот набор правил:

  ## Этот набор строк позволяет загружать и скачивать файлы, размещенные в R2 S3..
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: access-key-id
  DISCOURSE_S3_SECRET_ACCESS_KEY: access-key
  DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_S3_BUCKET: exotics-unlimited
  DISCOURSE_S3_BACKUP_BUCKET: exotics-unlimited-backups
  DISCOURSE_BACKUP_LOCATION: s3
#  DISCOURSE_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_S3_ENDPOINT: https://71*****5d4976.r2.cloudflarestorage.com
#  DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  DISCOURSE_S3_INSTALL_CORS_RULE: false

Как только я закомментировал строку с CDN_URL, всё заработало. Думаю, из-за того, что R2 автоматически создаёт CDN, эта строка не нужна, и её добавление, наоборот, ломает работу.
Я закомментировал строку с включением изображений, чтобы уменьшить размер резервных копий. Я использую бесплатный тариф R2 и не хочу превышать свой лимит.

Верно. Вам действительно не следует использовать DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS, если только вы не планируете отказываться от S3. Нет смысла скачивать все изображения из S3, чтобы включить их в резервную копию, которая хранится… в S3. Я однажды оставил эту опцию включённой для бакета AWS и получил огромный счёт за загрузку каждого изображения каждый день.

Это должен быть отдельный CDN, указывающий на ваш сервер Discourse, а не на бакет S3. Некоторые данные, например аватары (и, возможно, что-то ещё), обслуживаются с вашего сервера. Причина, по которой это не сработало, в том, что вы указали CDN для S3, а не CDN для сайта.

Вы имеете в виду, если использовать две разные компании? Одну для бакета, а другую для CDN? Я не очень разбираюсь в этом, поэтому мне нужно объяснение так, будто я в третьем классе…
Я знаю, что при создании «пользовательского домена» в интерфейсе R2 он действует как CDN, поэтому я изначально добавил эту строку.

В любом случае, у меня на тестовом сайте всё работает идеально, и если нет ничего ещё, что должно работать, но не работает, я бы рекомендовал обновить исходный пост, указав, что Cloudflare теперь работает с Discourse.

Нет, так нельзя. Существует только один ключ и секрет S3. Я пытался придумать повод для использования include s3 uploads, но такого повода нет.

Это относится к S3 Bucket, а не к вашему сайту. Существуют две разные переменные: DISCOURSE_S3_CDN_URL и DISCOURSE_CDN_URL. Вы обращаетесь с ними так, будто они одинаковы. Вы не можете использовать CDN для сайта, но причина, по которой это не сработало, когда вы установили эту переменную, заключается в том, что вы указали неверный CDN.

Хорошо, я думал, что немного разбираюсь в том, что делаю, но теперь чувствую себя совершенно потерянным.

Так в чём же разница между S3 CDN и CDN?

Продолжит ли это работать, если я поменяю местами эти два элемента, которые сейчас закомментированы?

Я также заметил странную проблему с фоновым изображением моего баннера приветствия. Есть ли какая-то связь с этим?

14 сообщений были перенесены в новую тему: Проблемы с AWS CDN и S3

Всем привет — просто хотел сообщить, что объектное хранилище Hetzner работает довольно хорошо. Вот настройки, которые я добавил в свой app.yaml:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_S3_ENDPOINT: https://nbg1.your-objectstorage.com
DISCOURSE_S3_ACCESS_KEY_ID: xxxx
DISCOURSE_S3_SECRET_ACCESS_KEY: xxxx
DISCOURSE_S3_CDN_URL: xxxx
DISCOURSE_S3_BUCKET: discourseuploads
DISCOURSE_S3_BACKUP_BUCKET: discoursebackups
DISCOURSE_BACKUP_LOCATION: s3

Очевидно, замените следующие параметры на свои собственные:

DISCOURSE_S3_ENDPOINT: (используйте URL из панели управления Hetzner для региона, в котором вы создали бакет объектного хранилища)
DISCOURSE_S3_ACCESS_KEY_ID: (говорит само за себя)
DISCOURSE_S3_SECRET_ACCESS_KEY: (говорит само за себя)
DISCOURSE_S3_CDN_URL: (используйте URL CDN, который подтягивает данные из URL вашего бакета Hetzner)

Буду следить за работой в течение следующих нескольких недель/месяцев на моём тестовом сервере, но пока всё отлично.

4 лайка

Просто хочу отметить, что это уже не так — Cloudflare исправила эту проблему, и теперь бакеты R2 совместимы с S3. У меня есть внешние резервные копии в Cloudflare R2, и я только что успешно выполнил полное восстановление на другой сервер. (К тому же это бесплатно до 10 ГБ в месяц).

Вам понадобятся имя бакета (для s3 backup bucket), access key ID, secret access key и конечная точка, специфичная для юрисдикции из объектного хранилища Cloudflare R2, чтобы ввести их в настройках S3 для Discourse или в файлах app.yml/web_only.yml и т. д.

1 лайк

Это отличные новости! Кто-нибудь должен отредактировать исходный пост соответствующим образом.

я не знаю, как работает обновление документации (новенькой или нет) — вроде бы она где-то здесь хранится? discourse/docs at main · discourse/discourse · GitHub, но я не вижу документации по самостоятельному размещению. :woman_shrugging: всё равно, я вижу ссылку на предлагаемые правки на странице редактирования вики. я предложу обновление.

редактирование: обновление для объектного хранилища Cloudflare R2 отправлено

Сообщение разделено на новую тему: Аватары долго загружаются после перехода на совместимый с S3 R2

я предложил обновление — исправил все неработающие ссылки на различные разделы в содержании первого поста и обновил заметки по настройке Cloudflare R2.

3 лайка

Спасибо :folded_hands:

Это могло бы быть преимуществом, так что мне не пришлось бы набирать больше символов

1 лайк

@chapoi @Lilly

В Европе также можно использовать S3-совместимое хранилище, соответствующее GDPR (EU-DSGVO), например, на hetzner.de. В пределах ЕС они оперируют дата-центрами в Германии и Финляндии, сертифицированными по стандарту ISO/IEC 27001:2022. Возможно, эту информацию стоит добавить в основной список выше.

Пример конфигурации для hetzner.de

Настройка Значение
S3 endpoint https://[datacenter].your-objectstorage.com
S3 endpoint datacenter [datacenter] = hel1 (Хельсинки), fsn1 (Фалькенштейн), nbg1 (Нюрнберг)
S3 access key ID Ключ доступа Hetzner S3
S3 secret access key Секретный ключ Hetzner S3 (отображается только один раз при создании хранилища S3)
S3 upload bucket Имя бакета Hetzner S3
Enable S3 uploads true

Обратите внимание, что предупреждение «Сервер настроен на загрузку файлов в S3, но не настроен S3 CDN» можно проигнорировать. В настоящее время hetzner.de не предоставляет функциональность глобального CDN. Подробнее см. на https://docs.hetzner.com/storage/general/which-storage-is-right-for-me.