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

Вы можете посмотреть в консоль JavaScript. Я предполагаю, что либо CDN настроен неверно, либо вы не правильно настроили этап предкомпиляции ассетов.

https://community.itechguides.com/ сейчас работает:

Если у вас не работает, попробуйте выполнить принудительную перезагрузку и/или открыть страницу в режиме инкогнито.

2 лайка

Сайт открылся для вас, потому что на момент вашего открытия я закомментировал следующие строки в файле app.yml:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: nyc3
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: accesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: secretkey
DISCOURSE_S3_CDN_URL: https://community-cdn.itechguides.com
DISCOURSE_S3_BUCKET: itg-community-files
DISCOURSE_S3_BACKUP_BUCKET: itg-community-files/backups
DISCOURSE_BACKUP_LOCATION: s3

Я только что снова включил эти строки и пересобрал контейнер. Теперь сайт снова показывает пустую страницу!

На скриншоте ниже показано, где я разместил код в файле app.yml. Как вы видите, я разместил код конфигурации S3 ниже строки DISCOURSE_NOTIFICATION_EMAIL


a

1 лайк

Что произойдёт, если закомментировать DISCOURSE_CDN_URL?

1 лайк

Я этого не делал. Но я занимался устранением неполадок и уверен, что неправильно настроил CDN S3. Я использую StackPath и не знаю, что указать в поле «Адрес источника» и в заголовке «Host».

1 лайк

Ещё один момент, в котором я не уверен, — это настройка функции отображения списка файлов в бакете DigitalOcean Space. Сейчас я использую опцию «Restrict Listing» (Ограничить список). Влияет ли это на что-либо?

1 лайк

Я закомментировал DISCOURSE_S3_CDN_URL, и сайт загрузился. Это подтверждает, что проблема в моей настройке S3 CDN, но я всё ещё не знаю, как настроить её правильно.

Буду очень признателен за любую помощь.

1 лайк

Вы выполнили все задачи в разделе Configuration?

Если я правильно помню, установка DISCOURSE_S3_CDN_URL в app.yml требует, чтобы активы хранились на S3.

2 лайка

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

Я не использую переменную DISCOURSE_CDN_URL, так как у меня установлена DISCOURSE_S3_CDN_URL (и, вероятно, ни одна из прочитанных мной инструкций не рекомендовала использовать её). Поэтому я попробовал.

Я добавил DISCOURSE_CDN_URL: <cdn-url>. Пересборка прошла без ошибок, но я получил ошибку 502. Когда я убрал эту настройку, мой форум снова заработал.

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

2 лайка

DISCOURSE_CDN_URL и DISCOURSE_S3_CDN_URL различаются. В то время как DISCOURSE_CDN_URL указывает на ваш форум, DISCOURSE_S3_CDN_URL указывает на URL-адрес вашего хранилища S3.

Идея заключается в том, чтобы DISCOURSE_CDN_URL обслуживал извлекаемые активы, такие как CSS, а DISCOURSE_S3_CDN_URL — загружаемые активы, такие как JS, изображения и загрузки пользователей.

Мне удалось настроить всё, кроме CDN хранилища S3. Каждый раз, когда я включаю этот параметр в файле app.yml, мой форум отображается пустым.

При проверке элементов сети в браузере видно, что активы, доставляемые через DISCOURSE_S3_CDN_URL, возвращают ошибку 404.

Вот где я застрял! Я не понимаю, почему CDN S3 не может доставить активы.

4 лайка

Спасибо за терпеливое объяснение!

Это для меня довольно… незнакомо. Но, как я уже сказал, у меня очень мало опыта. Я использую AWS как CDN через S3/CloudFlare в WordPress, но только для статических файлов — для скриптов потребуется другая настройка. Думаю, нет смысла сравнивать WP и Discourse, так как это принципиально разные платформы. Но я пытаюсь понять принципы этой концепции.

Что ж, теперь я знаю гораздо больше, чем вы :smile:

РЕДАКТИРОВАНИЕ: Ааа, и я тоже был полностью неправ в своей настройке :flushed: Весь JS, изображения и т. д. раздают через CDN. Но я не мог найти там CSS.

1 лайк

Да, они такие. Но спасибо за обновление.

1 лайк

Привет @Jagster, я буду очень признателен за вашу помощь.

Проблема, с которой я столкнулся сейчас, заключается в том, что мой сайт пытается загрузить файлы .gz.js из CDN объектного хранилища, но этих файлов там нет. Как заставить Discourse загрузить эти файлы .gz.js в объектное хранилище?

1 лайк

Именно для этого в руководстве приведен следующий фрагмент:

1 лайк

У меня уже есть эта строка в моём app.yml. Я разместил код выше после определения плагинов. Или мне переместить их выше списков плагинов?

1 лайк

Это неверно. Ключ YAML after_assets_precompile должен находиться внутри ключа hooks.

По умолчанию мы поставляем:

## Плагины размещаются здесь
## подробности см. по ссылке https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

а вам нужно:

## Плагины размещаются здесь
## подробности см. по ссылке https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
1 лайк

Огромное спасибо, @Falco. Я перемещу их сейчас и попробую снова.

2 лайка

А как насчет других плагинов? Можно ли перечислить их ниже:

  • sudo -E -u discourse bundle exec rake s3:upload_assets ?
1 лайк

Нет.

Это станет следующим:

## Сюда помещаются плагины
## подробности см. по адресу https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

YAML — это древовидная структура данных, где структура определяется отступами пробелов.

3 лайка

Благодаря вашим рекомендациям (@Falco и @pfaffman) я только что успешно завершил эту настройку.

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

Я использовал StackPath и DigitalOcean Spaces. В моём руководстве содержится пошаговая инструкция по всей конфигурации. Если кому-то нужно это руководство, я с радостью опубликую ссылку по запросу.

2 лайка

@Falco и @pfaffman, огромное спасибо вам обоим за помощь. Это мой первый опыт настройки Discourse, но я только что завершил самые сложные части (надеюсь!). Я очень благодарен!

3 лайка