Не удается настроить nginx: [emerg] не удалось загрузить сертификат "/var/discourse/shared/standalone/ssl/ssl.crt": BIO_new_file() failed

(SSL: ошибка:02001002:библиотека системы:fopen:Нет такого файла или каталога:fopen('/var/dis (…)
Я следую руководству, но не могу найти никакой информации об этой ошибке

Привет @slivo

Давайте посмотрим на вывод этой команды:

cd   /var/discourse/shared/standalone/ssl
ls -l

Есть какие-то подсказки?

cd ssl: Нет такого файла или каталога

Привет, @slivo!

Это означает, что при последней пересборке вашего контейнера настройка Lets Encrypt не создала сертификаты.

Конечно, я уверен, что вы уже об этом знаете!

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

./launcher rebuild app

Я пересобрал его снова. Настроил согласно инструкциям. Установлен сертифицированный SSL (/etc/nginx/sites-enabled/discourse.conf), но у меня ошибка:

SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE

Nginx вообще не запускается.

 nginx.service: Control process exited, code=exited status=1
 nginx.service: Failed with result 'exit-code'.

Process: 3840 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 25108 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=1/FAILURE)

// Не удалось запустить высокопроизводительный веб-сервер и обратный прокси-сервер.

Привет, @slivo!

Спасибо за обновление о настройке этого.

Вы настраиваете Discourse со стандартной сборкой Docker без обратного прокси-сервера вне контейнера?

Да, и я также использую это руководство Run other websites on the same machine as Discourse

Привет, @slivo

По ссылке выше описывается запуск Discourse в контейнере Docker с экспонированием приложения через UNIX-сокет к обратному прокси-серверу.

В этом случае НЕ следует включать SSL в файле yml контейнера; и НУЖНО настроить SSL с помощью Let’s Encrypt, используя certbot вне контейнера, только на обратном прокси-сервере.

Общая высокоуровневая архитектура выглядит так:

ПОЛЬЗОВАТЕЛИ ИНТЕРНЕТА <-- HTTPS --> ОБРАТНЫЙ ПРОКСИ <-- HTTP --> КОНТЕЙНЕР DOCKER

Пожалуйста, опубликуйте ваш файл yml, зашумив (закрыв) пароли и адреса электронной почты; и давайте посмотрим, что у вас происходит.

Спасибо.

Но теперь я не понимаю. Затем я создал новый сертификат с помощью certbot. И у меня он выглядит так:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Ваш файл ключа сохранён по адресу:
/etc/letsencrypt/live/myadress.com/privkey.pem

Мне нужно изменить адрес в этом файле или, например, в /etc/nginx/sites-enabled/discourse.conf, или я всё делаю совершенно неправильно?

Привет, @slivo

При настройке обратного прокси-сервера перед другим приложением с использованием экземпляра nginx: вы должны быть очень конкретны относительно расположения файлов конфигурации — внутри контейнера или снаружи?

Не уверен, что полностью понял. Мне просто нужно развернуть Discourse за nginx. У меня нет другого приложения на сервере, но я хочу настроить это для большей защиты извне.

Привет, @slivo!

Понимаю ваше разочарование. Позвольте мне пояснить.

В одном из ваших предыдущих сообщений вы написали:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Ваш ключ сохранён по адресу:
/etc/letsencrypt/live/myadress.com/privkey.pem

Вы не указали, находитесь ли вы внутри контейнера Docker или снаружи.

Как вам известно, в вашем случае nginx запущен как непосредственно на хосте, так и внутри приложения (в контейнере Docker).

Когда вы пишете:

/etc/letsencrypt/live/myadress.com/fullchain.pem
Ваш ключ сохранён по адресу:
/etc/letsencrypt/live/myadress.com/privkey.pem

Как мы, внешние наблюдатели, можем точно понять, о чём именно вы говорите, если не приводите полную информацию? Находится ли эта конфигурация внутри или снаружи контейнера? Мы можем «предположить», что речь идёт о внешней стороне, но поскольку вы не предоставляете этих деталей, мы не можем быть уверены. Мой опыт подсказывает, что кратчайший путь от проблемы к решению — никогда ничего не предполагать и внимательно следить за деталями.

Кроме того, вы не приложили свой файл yml. Также вы не предоставили конфигурационные файлы nginx вне контейнера. Поэтому мы не можем «увидеть», что именно вы делаете в своей конфигурации.

Надеюсь, это поможет.