Сайт Discourse не загружается после установки без включения Let's Encrypt

Я достаточно знаю, чтобы быть опасным, сидя перед открытой сессией SSH. На днях я успешно прошёл процесс установки, и всё заработало.

Однако сегодня мне пришлось пересобрать систему (я работал на сервере разработки, а не на продакшене). После повторения тех же шагов, после запуска ./discourse-setup и перехода на сайт по завершении установки, ничего не появилось.

Я также запустил ./launcher start app, но всё равно ничего не происходит.

Какие типичные шаги я должен предпринять для устранения проблем с установкой?

Нет сообщений, нет ошибок после запуска ./discourse-setup или ./launcher start app?

Расскажите, чем отличаются среды.

Используете ли вы обратный прокси? CloudFlare?

Где размещена ваша производственная установка?

Нет, установка, похоже, прошла успешно. При проверке команды docker info я вижу, что контейнер также запущен.

Я использую Amazon Linux 2 на AWS, и на этой же ОС всё работало на днях. Для этого домена CloudFlare используется только для DNS.

Вот точная последовательность моих действий. Git, Docker и ncat были установлены через amazon-linux-extras, как предлагалось во время установки (но это не должно быть проблемой, так как у меня уже был работающий форум для разработчиков на днях).

  1. Установка git
  2. Установка и запуск docker
  3. Установка ncat
  4. Установка discourse
  5. Установка nginx1.12

Зачем вы это сделали?

Вопрос справедливый. :joy: Я сделал это, потому что после шага 4… ха-ха, перестало работать. Мне нужно удалить?

Да. Удалите.

Скорее всего, это проблема с DNS.

Что возвращает команда curl localhost?

Что показывает вывод команды tail /var/discourse/shared/logs/var-log/nginx/access.log?

Внутри контейнера Discourse встроен веб-сервер.

curl: (7) Не удалось подключиться к localhost порт 80: отказ в соединении

tail: не удаётся открыть «/var/discourse/shared/logs/var-log/nginx/access.log» для чтения: файл или каталог не найден

Я выполнил обычную установку, но подтвердил, что папка shared даже не существует.

Кстати, спасибо за помощь! Как я уже сказал, я знаю достаточно, чтобы навредить… и не всегда в хорошем смысле. :smiling_face_with_sunglasses:

Извините.

tail /var/discourse/shared/standalone/logs/var-log/nginx/access.log

Или, если это всё ещё не так,

find /var/discourse/shared -name access.log

чтобы увидеть, где находится файл журнала.

Нашёл его здесь:

/var/discourse/shared/standalone/log/var-log/nginx/

Файла access.log не было, но был error.log.

В нём многократно повторялась одна и та же строка (реальный домен здесь заменён на example.com):

2020/04/08 19:46:34 [emerg] 2112#2112: cannot load certificate "/shared/ssl/example.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

Я не проходил процесс получения сертификата через Let’s Encrypt, так как у меня уже есть сертификат для этого домена. Нужно ли мне всё равно использовать Let’s Encrypt?

Вам нужен сертификат.

Вы можете поискать инструкции по установке собственного сертификата, которые описывают это как огромную головную боль, или же вы можете получить его бесплатно и без хлопот, разрешив Let’s Encrypt сделать это за вас.

Что ж, посмотрите-ка. Сработало.

Спасибо @pfaffman и всем остальным, кто ответил. :+1:

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

Есть ли ссылка на инструкцию по настройке сертификата Let’s Encrypt? Мне нужно пересмотреть, что я сделал (или не сделал).

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

Хорошо, я сделал именно это… Я полагал, что всё основано на руководстве по установке, но у меня всё ещё появляются пустые страницы.

Кажется, Discourse ищет сертификат в каталоге /shared/ssl/, но фактическое расположение моего сертификата — /shared/standalone/ssl/

Моя конфигурация app.yml настроена следующим образом:

   ## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  • volume:
    host: /var/discourse/shared/standalone
    guest: /shared
  • volume:
    host: /var/discourse/shared/standalone/log/var-log
    guest: /var/log

Вы можете попробовать

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

Строка с rm написана по памяти. Если этих путей не существует, уточните, что я должен был ввести.

Похоже, я уперся в лимит Let’s Encrypt — 10 сертификатов в неделю. Думаю, это объясняет, почему я не могу перейти дальше этого шага.

Вот что я нашел у другого человека, столкнувшегося с этой проблемой после множества пересборок: Trouble with SSL after lots of rebuilds - #14 by pfaffman

Похоже, у меня сейчас нет другого выбора, кроме как установить свой собственный сертификат, который у меня уже есть?