Версия Discourse на forum.abc.com.au: НЕ НАЙДЕНА

Discourse установлен по официальному руководству на GitHub
Всё прошло хорошо, но при обращении к форуму возникает ошибка 502.

Я попытался проверить логи Rails production, но не нашёл записей production_error или логов Sidekiq.

При использовании tail увидел следующее:
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
Can’t reach ‘/images/welcome/discourse-edit-post-animated.gif’ to get its dimension.

Запуск команды discourse doctor показывает:

Discourse version at forum.abc.com.au: NOT FOUND

Я попробовал отключить SSL и пересобрать систему — после этого форум стал доступен.

Должна быть проблема с SSL, которую я не могу определить. При установке SSL разрешение IP-адреса прошло успешно.

Пожалуйста, помогите.

Похоже, что до включения HTTPS вы ссылались на небезопасные изображения.

@pfaffman Спасибо за ответ.

Это чистая установка. У нас нет возможности вручную создать ссылку.

После анализа всех логов выяснилось, что ошибка связана с выпуском сертификата Let’s Encrypt. Если у кого-то возникла похожая проблема, пожалуйста, поделитесь решением ниже.

Сначала я увидел эту ошибку в логах Nginx:

cannot load certificate "/shared/ssl/forum.abc.com.au.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)

Затем я проверил логи SSL:

forum.abc.com.au:Verify error:CAA record for forum.abc.com.au prevents issuance

Перед запуском скрипта установки Discourse для поддомена необходимо проверить, есть ли у основного домена записи CAA, и убедиться, что центр сертификации — не Let’s Encrypt (в моём случае запись CAA для основного домена указывает на comodoca.com). В такой ситуации сертификаты Let’s Encrypt для Discourse не будут выпущены.

Исправление: необходимо добавить запись CAA для поддомена Discourse, как описано здесь:
Acme:error:caa :: CAA record for ... prevents issuance - Help - Let's Encrypt Community Support

Удалите старые файлы сертификатов и попробуйте снова выполнить пересборку:

rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app

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

Отличная работа, что смогли это выяснить!

Можно с уверенностью предположить, что если вы владеете доменом и знаете, что такое CAA, и смогли его настроить, то вы понимаете последствия использования Let’s Encrypt.

@pfaffman
Команда dig caa {domain.tld} вернёт запись.
Сначала нужно проверить, возвращает ли она какие-либо записи.
Затем, если возвращает, убедиться, что выдающий орган отличается от letsencrypt.org.

Однако это очень редкий случай. Не уверен, стоит ли включать эту проверку.

@Stephen

Верно. Если я владею доменом, я знаю, что с ним делать.
Я помогал кому-то, и эта проблема может возникать у хостинг-провайдеров, использующих cPanel и предоставляющих автоматические SSL-сертификаты от других поставщиков, таких как Comodo. При создании сайта (например, WordPress) в cPanel они по умолчанию добавляют множество записей.

В любом случае, это очень редкий случай, я впервые с таким сталкиваюсь.

CAA здесь время от времени всплывает. Стандартный ответ, который мы получаем, когда указываем, что они ограничили выпуск сертификатов для всего своего домена, обычно выглядит так: :man_facepalming:t2:

@Stephen

Это интересно! Нужно проверить, не уверен, можем ли мы ограничить выпуск сертификатов для всего домена.

Речь об ограничении выпуска сертификатов для всего домена, то есть для всех его поддоменов?

Если вы установите запись CAA для @ (домена), это будет применяться как к домену верхнего уровня, так и к поддоменам. Вы всё равно можете добавить специфичную запись CAA для subdomain.yourdomain.com для сервиса, такого как Let’s Encrypt, что ограничит область, в которой LE может выпускать сертификаты.

Таким образом:

domain.com.    CAA   0 issue "comodoca.com"
sub.domain.dom.    CAA   0  issue "letsencrypt.org"

Вы также можете указать issuewild вместо issue, чтобы разрешить центру сертификации выпускать wildcard-сертификаты, а также использовать iodef для указания адреса электронной почты, на который будут отправляться уведомления о нарушениях политики.

Та же проблема. Команды не решили вопрос. Я переключился на DNS и прокси Cloudflare. Проблема для меня сохраняется.

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

Скорее всего, вы включили прокси Cloudflare и несколько раз пересобирали проект, из-за чего достигли лимитов Let’s Encrypt. Теперь вам придётся ждать неделю, чтобы получить сертификат.

Быстрое и простое решение — выбрать новое поддоменное имя, установить для Cloudflare режим «только DNS» и пересобрать проект. Если это сработает, значит, я прав насчёт ограничения частоты запросов. В таком случае вы можете либо смириться с новым поддоменом, либо подождать неделю, прежде чем попробовать снова.

Честный вопрос: при каждой пересборке запрашивается ли новый сертификат?

Я как раз об этом же задумывался. Не уверен насчёт запроса, но если сертификат найден валидным, то новый не выдаётся (только что пересобрал песочницу).

Это так, если действительный сертификат отсутствует.