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

Scaleway что-то изменила? У меня всё работало до 48 часов назад, но теперь это больше не работает.

1 лайк

Оплачен ли ваш счёт? В чём проблема? Работают ли какие-либо изображения? Они все пропали, или вы просто не можете добавить новые?

1 лайк

Не могли бы вы добавить немного больше поддержки? Например, Tencent COS из Китая более удобен для китайских пользователей, а CDN-узлы Tencent Cloud COS расположены по всему миру, что обеспечивает очень быстрый доступ.

Вы пробовали? Это работает?

Я использовал это в тестовой среде, но могу делать резервные копии только в Tencent COS. Надеюсь, что разработчики Discourse добавят поддержку Tencent COS, чтобы облегчить работу разработчикам из Китая.

1 лайк

Думаю, вам стоит поделиться тем, что вы уже сделали, и какие ошибки или проблемы возникли. Тогда кто-нибудь сможет предложить, как это исправить. Возможно, стоит посмотреть на другие примеры и попробовать применить их для решения вашей задачи.

Скорее всего, они не будут вносить изменения в ядро, чтобы поддержать это.

1 лайк

Backblaze:

  • Я настроил бакет B2 в своей учетной записи
  • Добавил данные в секцию env файла app.yml
  • Запустил ./launcher rebuild app

…но я не вижу подтверждения в панели управления экземпляром Discourse, что эти настройки применились. Куда мне следует посмотреть?

1 лайк

Привет,

Мне удалось успешно протестировать и использовать Cloudflare R2 для загрузки файлов и создания резервных копий. Подробный пост здесь: Cloudflare R2: Navigating Setup and Handling Configuration Errors - #40 by kamaljain

Прошу вас также протестировать это с вашей стороны и установить отметку «Работает с Discourse» на «Да» для Cloudflare R2. На самом деле это проще, чем S3, и экономичнее: бесплатно при объёме хранилища менее 10 ГБ.

2 лайка

Я тоже протестировал настройку на мультисайте и тоже считаю, что она работает.

Я увидел что-то, что заставляет меня задуматься, можно ли получить список резервных копий. Я попробую проверить свою настройку.

1 лайк

Я вижу, что резервные копии отображаются в списке. Восстановление пока не пробовал.

1 лайк

Привет, бро, можно с тобой поговорить? У меня возникли проблемы с настройкой MinIO.
Спасибо.

Настройка iDrive

Хотел сообщить, что использование версии E2 хранилища S3 от iDrive отлично работает с этими настройками:

Переменные окружения в YAML-файле

Убедитесь, что ваш бакет имеет как минимум права Public и Read в настройках iDrive.

Это настройки, которые я использую для одного бакета, разделяющего uploads и backups.

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: ваш-регион
DISCOURSE_S3_ENDPOINT: https://ваш-эндпоинт-idrive.dev
DISCOURSE_S3_ACCESS_KEY_ID: ваш-ключ-доступа
DISCOURSE_S3_SECRET_ACCESS_KEY: ваш-секретный-ключ
DISCOURSE_S3_CDN_URL: https://ваш-кастомный-cdn-url.com/uploads
DISCOURSE_S3_BUCKET: ваше-имя-бакета/uploads
DISCOURSE_S3_BACKUP_BUCKET: ваше-имя-бакета/backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

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

Я использую сертификат источника от Cloudflare для создания CNAME, указывающего на эндпоинт iDrive.


Синхронизация существующих вложений

Пересборка

Пересоберите приложение после изменения этих переменных окружения.


Загрузка и повторная обработка

Затем войдите в контейнер и выполните:

rake uploads:migrate_to_s3

Подождите завершения загрузки, затем выполните:

rake posts:rebake_uncooked_posts

Выйдите из контейнера.


Добавление в секцию hooks YAML-файла

В секции hooks:

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Это гарантирует, что файлы JS/CSS будут загружены в iDrive после вложений, иначе в браузере появится множество ошибок консоли, так как они будут отсутствовать.


Пересборка

Снова выполните пересборку после добавления команды для ассетов.


Всё должно работать корректно!

2 лайка

Возможно, стоит добавить службу объектного хранилища Hetzner в таблицу?

2 лайка

Мне удалось использовать Contabo для загрузки файлов. Как старые (мигрированные) файлы, так и новые загрузки работали отлично. В моём случае URL ведра был https://eu2.contabostorage.com/mybucket. Секрет заключался в том, чтобы указать EU2 как имя ведра и https://contabostorage.com/mybucket как конечную точку.

Единственная проблема в том, что при загрузке сайта также запрашиваются другие файлы, например JS-скрипты плагинов, из ведра, и они не загружаются, так как файлы недоступны. Я понял, что это происходит потому, что я установил URL CDN таким же, как URL ведра. Это пока не совсем ясно для меня. Кто-нибудь может подсказать, как это правильно настроить? Насколько я понял, мне нужно создать CNAME-запись, указывающую на основной домен (сервер Discourse), и проксировать его через Cloudflare. Правильно ли я понимаю?

1 лайк

Вы упустили этот момент:

1 лайк

Я уверен, что всё сделал правильно, но, возможно, где-то ошибся. В итоге я восстановил из резервной копии, поэтому сейчас всё по памяти… Но тогда возникает вопрос: почему не рекомендуется настраивать CDN в качестве бакета? Какие проблемы это может вызвать? Попробую разобраться завтра.
Спасибо.

1 лайк

Я не думаю, что описанная вами проблема возникла из-за того, что вы указали URL CDN в качестве URL ведра (если загрузка работает, но ресурсы — нет).

2 лайка

Завтра обновлю информацию, спасибо

1 лайк

И это сработало :tada:
Пошаговое описание моих действий в надежде помочь другим:

Отредактировал app.yml и добавил

  after_assets_precompile:
    - exec:        cd: $home
        cmd:          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

после хуков (сразу после git clone плагинов…)
и

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: EU
  DISCOURSE_S3_ENDPOINT: https://contabostorage.com/bucketname
  DISCOURSE_S3_ACCESS_KEY_ID: accesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: secretaccesskey
  DISCOURSE_S3_CDN_URL: https://eu2.contabostorage.com/randomlettersthatcontaboaddstothelinks:bucketname
  DISCOURSE_S3_BUCKET: eu2
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

после настроек электронной почты.
Затем я установил те же значения в меню Discourse и включил загрузку через S3.
Пересобрал приложение командой

cd /var/discourse
sudo ./launcher rebuild app

затем

./launcher enter app
rake uploads:migrate_to_s3

Это занимает некоторое время; в моём случае несколько часов (80 тысяч файлов, 100 ГБ).

После завершения

rake posts:rebake_uncooked_posts
5 лайков

Обновление: некоторые пользователи не могли загрузить сайт (ресурсы и файлы). Мы выяснили, что домен contabostorage.com был добавлен в некоторые чёрные списки как фишинговый сайт. Решение оказалось простым:

Настройте поддомен files.mydomain.com, как описано здесь: Can I Setup a Custom Domain for My Object Storage? : Contabo

Обновите DISCOURSE_S3_CDN_URL: https://files.mydomain.com в файле app.yml

Затем выполните:

cd /var/discourse
sudo ./launcher rebuild app

И для завершения работы:

./launcher enter app
rake posts:rebake

Теперь все ресурсы и загрузки загружаются с https://files.mydomain.com/pathtofile/file.ext

Готово.

2 лайка