Контейнер Discourse-app запускается, а затем незаметно останавливается

Правильно! Я по глупости применил конфигурацию в указанной выше странице, сравнил её с другими файлами конфигурации nginx и не мог понять, почему прокси не слушает порты 80 и 443 для Discourse… :confused:

Вот что я ожидал увидеть:

server {
	listen 80;
	server_name discourse.mydomain.com;
    return 301 https://$host$request_uri;  # перенаправление на https
}

server {
	listen 443 ssl
	listen [::]:443 ssl;
	server_name discourse.mydomain.com;

	ssl_certificate      /etc/letsencrypt/live/discourse.mydomain.com/fullchain.pem;
	ssl_certificate_key  /etc/letsencrypt/live/discourse.mydomain.com/privkey.pem;

	root /var/www/html;

	# Добавьте index.php в список, если вы используете PHP
	index index.html index.htm index.nginx-debian.html;

	location / {
      proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:; # использование сокета
      proxy_set_header Host $http_host;
      proxy_http_version 1.1;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
	}
}

NPM: Я последовал совету @pfaffman и прочитал Use Nginx Proxy Manager to manage multiple sites with Discourse, поэтому рассмотрел вариант установки NPM, но это кажется излишним…

Спасибо всем за помощь!

Для справки: npm и nginx proxy manager — это разные вещи. Вы путаете терминологию, что вводит в заблуждение тех, кто пытается вам помочь.

Тогда вам нужно настроить этот nginx как прокси для Discourse.

Я рекомендую просто развернуть новую виртуальную машину специально для Discourse.

Извини, Стивен, за путаницу. Я просто использовал название инструмента, упомянутое в статье. Я понимаю, что NPM и nginx (как менеджер прокси) — это разные вещи, поэтому я использовал заглавные буквы…

Именно это я и пытаюсь сделать, и я понимаю, что вы не можете оказать поддержку в этом вопросе. Однако любая подсказка или ссылка будут очень кстати!

К сожалению, Джей, это невозможно: я помогаю другу развернуть приложение и не могу изменить конфигурацию его сервера. Именно поэтому мне приходится решать проблему с nginx…

Кстати, моё понимание таково:

  • Discourse слушает порты 80/443.
  • nginx выступает в роли коммутатора, распределяя запросы между различными приложениями на основе доменного имени:
    • netxcloud.mydomain.com, пытающийся обратиться к порту 80, → запрос направляется на server_IP:8000
    • crm.mydomain.com, пытающийся обратиться к порту 80, → запрос направляется на server_IP:9000
    • discourse.mydomain.com, пытающийся обратиться к порту 80, → запрос направляется на http://unix:/var/discourse/shared/standalone/nginx.http.sock: (надеюсь, двоеточие в конце не опечатка), так как скрипт настройки конфигурировал Discourse для прослушивания этого сокета.

Я правильно понимаю?

Большое спасибо за вашу помощь!

Это довольно раздражает и запутывает, но, если быть справедливым к @jlgarnier, эта аббревиатура впервые была использована либо @tophee, либо @pfaffman в статье Использование Nginx Proxy Manager для управления несколькими сайтами с Discourse для обозначения Nginx Proxy Manager. Мне она не нравится, но если это «неправильно», то в этом действительно нет вины автора темы.

Например, в теме есть раздел под названием Install NPM, посвящённый исключительно Nginx Proxy Manager.

Вау, это тоже меня обмануло.
Раздражает, что этот проект захватил существующую аббревиатуру спустя восемь лет после оригинала.

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

Они используют это в своих настройках Docker. nginx-proxy-manager/docker/docker-compose.dev.yml at develop · NginxProxyManager/nginx-proxy-manager · GitHub

services:
  npm:
    image: nginxproxymanager:dev
    container_name: npm_core

Ах, ой! Я этого не знал. :slightly_smiling_face:

Всем привет,

Сегодня во второй половине дня я снова попробую настроить nginx. Может кто-нибудь подтвердить точный синтаксис для сокета: http://unix:/var/discourse/shared/standalone/nginx.http.sock:? Хочу убедиться, что двоеточие в конце — это не опечатка…

Заранее спасибо за любую помощь!

Я не думаю, что там должен быть двоеточие, нет.

Действительно… Я внес в файл discourse.conf изменения, которые предложил в прошлую пятницу, и теперь Discourse работает исправно! По крайней мере, я могу открыть страницу приветствия, но письмо с активацией не приходит — это уже не связано с Discourse (я подозреваю, что мой друг не создал запрошенный почтовый аккаунт :blush:).

От всей души благодарю вас за оказанную помощь и надеюсь, что мне не придётся возвращаться на этот форум слишком скоро! :wink:

Наконец-то, вернулся раньше, чем ожидал, но, скорее всего, вы сможете отправить меня в нокаут своими отличными предложениями! :grin:

Ситуация следующая:

  • Discourse запущен и работает, Docker (или Portainer) показывает, что контейнер исправен, и я могу открыть страницу приветствия по адресу forums.mydomain.com.
  • Я не получаю никаких писем с активацией, хотя технический почтовый аккаунт был создан правильно (провайдер хостинга — OVH).
  • Я проверил отправку письма с этого технического аккаунта (с конфигурацией ниже) — всё работает.
  • Текущая конфигурация почты:
DISCOURSE_SMTP_ADDRESS: ssl0.ovh.net
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: forums@mydomain.com
DISCOURSE_SMTP_PASSWORD: "Str0ngPassw0rd"
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_DOMAIN: mydomain.com
DISCOURSE_NOTIFICATION_EMAIL: noreply-forums@mydomain.com

Я не совсем понимаю, с чего начать расследование, и буду рад любым советам!

Заранее спасибо за помощь!

Первое, что я проверю: если forums@mydomain.com настроен на отправку от имени noreply-forums@mydomain.com, это нужно проверить у вашего поставщика услуг электронной почты.

Не уверен, что этот адрес может отправлять письма «от имени», поэтому я обновил app.yml, указав тот же адрес:

DISCOURSE_SMTP_ADDRESS: ssl0.ovh.net
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: forums@mydomain.com
DISCOURSE_SMTP_PASSWORD: "Str0ngPassw0rd"
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_DOMAIN: mydomain.com
DISCOURSE_NOTIFICATION_EMAIL: forums@mydomain.com

Попробовал выполнить telnet ssl0.ovh.net 465 = ОК

Однако утилита discourse-doctor сообщает:

========================================
Discourse 2.9.0.beta9
Версия Discourse на forums.mydomain.com: Discourse 2.9.0.beta9
Версия Discourse на localhost: НЕ НАЙДЕНО
==================== ПРОБЛЕМА С DNS ====================
Этот сервер сообщает «НЕ НАЙДЕНО», но forums.mydomain.com показывает версию Discourse 2.9.0.beta9.
Это указывает на проблему с DNS или на то, что виноват промежуточный прокси.

[...]

Проверка отправки на myprivatemail@yahoo.fr через ssl0.ovh.net:465, пользователь: forums@mydomain.com с обычной аутентификацией.
======================================== ОШИБКА ========================================
                                    НЕОЖИДАННАЯ ОШИБКА

Net::ReadTimeout

====================================== РЕШЕНИЕ =======================================

Может ли проблема с почтой быть связана с предполагаемой проблемой DNS? У меня нет «промежуточного прокси», я просто использую nginx как веб-прокси-сервер…

Скорее всего, проблема именно в этом. Попробуйте использовать другой порт. Если ваш почтовый провайдер поддерживает порт 587, я рекомендую именно его — с ним результаты обычно лучше.

Если вы меняете порт на 587, вам нужно либо закомментировать эту настройку, либо установить её значение в true.

Нет, мой почтовый провайдер (тот же, что и хостинг-провайдер) разрешает только порт 465. Кстати, я прочитал, что для домена нужно настроить записи SPF и DKIM (речь о поддомене?), а я пока ничего из этого не настроил: может ли это как-то повлиять?

См. Устранение неполадок с электронной почтой при новой установке Discourse

Я просматриваю пост, но забыл некоторые детали:

  • DNS управляется нашим хостинг-провайдером (для некоторых сервисов), предположим, на ServerA.
  • Discourse работает на другом сервере (ServerB), который размещён у другого провайдера.

Как я понимаю: Discourse на ServerB подключается к почтовому серверу на ServerA, аутентифицируясь по логину и паролю, чтобы использовать SMTP-сервис, предоставляемый хостинг-провайдером ServerA.

Является ли это нестандартной конфигурацией, или я всё ещё могу использовать обычную конфигурацию email в app.yml?