Discourse-app 컨테이너가 시작되지만 조용히 중단됩니다

맞아요! 위에서 언급한 페이지에 설정을 어리석게도 적용했는데, 다른 nginx 설정 파일들과 비교해 보았음에도 왜 프록시가 discourse의 80:443 포트를 듣지 않는지 이해할 수 없었습니다… :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;

	# PHP를 사용하는 경우 목록에 index.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;
	}
}

참고: @pfaffman님의 조언을 따르고 Use Nginx Proxy Manager to manage multiple sites with Discourse 글을 읽었기 때문에 NPM 설치 옵션을 검토해 보았지만, 이는 과한 것 같습니다…

도와주셔서 모두 감사합니다!

참고로 npm과 nginx proxy manager은 서로 다른 것입니다. 용어를 혼동하고 있기 때문에 도움을 주려는 분들도 혼란을 겪고 있습니다.

그렇다면 nginx를 설정하여 discourse로 프록시해야 합니다.

Discourse 전용으로 새 VM을 하나 더 실행하는 것을 권장합니다.

Stephen님, 혼동을 드려서 죄송합니다. 저는 기사에서 언급된 도구의 이름을 그대로 사용했을 뿐입니다. 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이 Using Nginx Proxy Manager to manage multiple sites with Discourse에서 Nginx Proxy Manager를 지칭하기 위해 처음 사용했습니다. 그 약어를 좋아하진 않지만, 만약 그게 ‘잘못된’ 것이라면, 그것은 원글 작성자(OP)의 잘못은 아닙니다.

예를 들어, 해당 토픽에는 Nginx Proxy Manager에만 초점을 맞춘 Install NPM이라는 섹션이 있습니다.

와, 나한테도 통했네.
원래 약자가 생긴 지 8년 뒤에 기존 약자를 가로챈 그 프로젝트가 정말 짜증나.

그렇지 않은 것 같습니다. 그들의 웹사이트를 둘러보았지만, 그들 스스로 해당 약어를 사용하고 있는 것을 본 적이 없습니다.

그들은 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)에서는 컨테이너가 정상 상태(healthy)라고 표시되고 있습니다. 또한 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을 대신하여 메일을 보내도록 설정되어 있는지입니다. 이 설정은 이메일 제공업체에서 확인해야 합니다.

해당 주소가 ‘on behalf of’ 방식으로 메일을 보낼 수 있는지 확실하지 않아서, 같은 주소를 설정하도록 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를 시도해 봤는데 정상(OK)입니다.

하지만 discourse-doctor는 다음과 같이 보고합니다:

========================================
Discourse 2.9.0.beta9
forwards.mydomain.com의 Discourse 버전: Discourse 2.9.0.beta9
localhost의 Discourse 버전: NOT FOUND
==================== DNS PROBLEM ====================
이 서버는 NOT FOUND라고 보고하지만, forums.mydomain.com은 Discourse 2.9.0.beta9라고 보고합니다.
이는 DNS 문제이거나 중간 프록시가 원인일 수 있음을 시사합니다.

[...]

ssl0.ovh.net:465, 사용자 이름:forums@mydomain.com, plain auth를 사용하여 myprivatemail@yahoo.fr로 전송 테스트 중.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::ReadTimeout

====================================== SOLUTION =======================================

이 메일 문제가 언급된 DNS 문제와 관련이 있을까요? 저는 '중간 프록시’를 사용하지 않고, nginx만 프록시 웹 서버로 실행 중입니다…

이것이 문제일 가능성이 높습니다. 다른 포트를 시도해 보실 수 있나요? 이메일 제공사가 지원하는 경우 포트 587을 사용할 때 가장 좋은 결과를 얻었습니다.

포트를 587로 변경하는 경우, 이 항목을 주석 처리하거나 true로 설정해야 합니다.

아니요, 제 이메일 제공업체(호스팅 제공업체와 동일)는 포트 465만 허용합니다. 참고로 도메인(이것이 서브도메인인가요?)에 SPF와 DKIM 레코드를 설정해야 한다는 내용을 읽었습니다. 아직 이 설정을 하지 않았는데, 이로 인해 어떤 영향이 있을까요?

새로운 Discourse 설치에서 이메일 문제 해결하기를 참고하세요.

게시물을 보고 있는데 일부 정보를 잊어버렸습니다:

  • DNS는 일부 서비스의 경우 호스팅 제공업체(예: ServerA)에서 관리하고 있습니다.
  • Discourse는 다른 서버(ServerB)에서 실행되고 있으며, 이 서버는 다른 제공업체에서 호스팅하고 있습니다.

제 이해로는 다음과 같습니다: ServerB의 Discourse가 ServerA의 메일 서버에 연결하고, ServerA 호스팅 제공업체가 제공하는 SMTP 서비스를 사용하기 위해 이메일/비밀번호로 인증합니다.

이것이 비정상적인 구성인가요, 아니면 여기서 일반적인 app.yml 이메일 구성을 계속 사용할 수 있을까요?