Discourse를 Postfix와 함께 작동시키는 방법

안녕하세요. 제 로컬 서버에는 Docker 없이 Discourse가 설치되어 있습니다. 또한 iRedMail도 설치해 두었습니다. 처음에는 mail.ru의 SMTP 서버를 사용해보려고 했습니다. 테스트 메시지와 초대장 모두 전송되었지만, 이메일 알림은 오지 않았고 비밀번호도 재설정되었습니다. 그래서 로컬 메일 서버를 설치하고, 메시지가 나가지 않는 원인을 로그에서 확인해 보자는 생각으로 설치를 진행했습니다. 로컬 메일함 간의 메시지 전송은 정상적으로 이루어집니다. 테스트를 위해 필요한 조건은 충족된 셈이죠. 로컬 Discourse와 메일 전송에 충분할 거라고 생각했습니다. 로컬 SMTP 서버를 설정하고 테스트 이메일을 보내니… 잘 도착했습니다! (승자 아님) 메일 서버의 /var/log/mail.log를 확인해 보았습니다.


좋습니다. 이제 같은 메일함으로 초대를 보내고… 메일 서버 로그를 살펴보니… …아무것도 없습니다. 로그가 비어 있습니다. 문제가 무엇인지 모르겠습니다.

제가 요청하는 것은 단순히 Discourse가 Postfix와 통신하도록 설정하는 방법입니다.

현재는 검증 이메일을 받지 못했기 때문에(당연히요) 수동으로 활성화한 관리자 계정으로 사용 중입니다. 설정 파일이나 로그 등 필요한 파일은 요청 시 언제든지 제공하겠습니다.

안녕하세요, @Anv

Discourse Meta에 오신 것을 환영합니다.

이런 종류의 문제가 발생하면 보통 다음과 같은 명령을 실행합니다:

sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt

이 명령은 사용자와 SMTP 서버 간의 핸드셰이크 과정을 매우 상세하게 출력합니다. 일반적으로 이러한 상세 로그는 문제를 해결하는 데 필요한 단서를 제공합니다.

도움이 되기를 바랍니다.

안녕하세요! 제가 아직 경험이 많지 않습니다. Discourse와 메일 서버를 처음 설치해 보았습니다. 정확히 어떤 작업을 해야 하는지 좀 더 자세히 설명해 주실 수 있을까요? 감사합니다.

안녕하세요 @Anv

먼저, Discourse에 대한 것은 잠시 잊고, SMTP 메일 릴레이를 설정하고 실행한 후, 테스트를 거쳐 메일을 릴레이할 수 있는지 확인하는 데 집중해야 합니다.

그 부분은 이미 완료하셨나요?

이 링크를 사용하여 iRedMail을 설치했습니다.

5단계와 9단계는 제외했습니다.

안녕하세요 @Anv

확실히 고급 수준의 설치네요.

discourse 없이 테스트해서 정상 작동하는지 확인해 보셨나요?

예를 들어 다음과 같이:

sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt

?

로컬 도메인 "@ugda.space"에 메일함을 2개 만들었습니다. 서로 간에는 메시지가 정상적으로 주고받고 있지만, Gmail, Mail, Yandex 메일함에는 메시지가 전달되지 않습니다. 테스트를 위해 로컬 내부 통신만으로도 충분할 것 같아 설정을 하지 않았습니다.

@Anv 솔직히 말할게요: 좋은 불문율은 "상대가 당신을 경청할 의지가 없다면, 그들에게 당신과 이야기하라고 하지 말라"는 정도가 되어야 합니다. 여기서 "경청"이란 상대방이 말하는 내용을 진지하게 고려하는 것을 의미합니다. 포럼에 참여하는 것, 특히 도움을 요청하는 경우에는 상대방에게 이야기하라고 하는 것에 해당한다고 볼 수 있겠죠.

같은 내용을 반복해서 말하고, 대화 상대도 같은 말을 반복하도록 강요하는 것은 어디까지나 아무런 결과를 가져오지 않습니다.

그런데 왜 아직 이 명령어를 실행하지 않은 건가요?

죄송합니다. 하지만 제가 무엇을 요구받았는지 완전히 이해하지 못했던 것 같습니다. 제가 모든 것을 올바르게 수행했나요?

안녕하세요 @Anv

불편하신 마음 충분히 이해합니다. 그리고 매번 답변하실 때마다 모든 SMTP 릴레이 문제를 디버깅해 드릴 여유가 없어서 죄송합니다.

SMTP 메일 호스트가 메일을 수신하고 있는 것 같지만, 그것이 반드시 SMTP 릴레이로 작동한다는 보장은 없습니다.

기억이 정확하지는 않지만, sendmail이나 기타 메일 클라이언트를 사용하여 SMTP 호스트가 릴레이로 제대로 작동하는지 확인할 수 있는 플래그가 있는 것 같습니다. sendmail -G 옵션에 대해 조사해 보시거나(또는 다른 테스트 방법을 찾아보시거나) 기본적으로는 현재 작업 중인 호스트와 다른 테스트용 이메일 주소로, 새로 설정한 SMTP 호스트를 릴레이로 사용하여 메일을 보내야 합니다.

과거 이야기

과거에는 대부분의 SMTP 호스트가 기본적으로 메일 릴레이 기능을 제공했습니다. 하지만 스팸 발송자들이 릴레이 기능(호스트 소유자의 모르게)을 악용하여 전 세계에 스팸을 뿌렸기 때문에, 인터넷상의 모든 SMTP 호스트가 거대한 스팸 상자가 되어 버렸습니다.

결론적으로, 새로 설정한 SMTP 호스트가 대신 메일을 릴레이할 수 있는지 확인해야 합니다.

설정 튜토리얼을 자세히 살펴보고, SMTP 호스트를 릴레이로 설정하는 부분에 대한 언급이 있었는지 확인해 보셨나요?

그냥 제 생각을 말로 풀어보는 것이니, 이 내용이 SMTP 호스트 프로젝트의 다음 단계로 나아가는 데 조금이라도 도움이 되길 바랍니다.

아, 네. 알 것 같아요. 이 건에 대해 정보를 찾아볼게요.

Docker 없이 Discourse를 설치하셨다고 말씀하셨습니다. Docker를 사용한 “클래식” 방식으로 새로운 설치를 진행하면서, 해당 설치 과정에서 생성한 이메일 주소를 입력하는 것이 가능한가요? 아니면 사용 중인 컴퓨터에서 Docker를 실행할 수 없는 상황인가요?

docker를 사용해 보았지만 메일이 전혀 도착하지 않았습니다. 관리자 계정도 만들 수 없었습니다. 경험이 부족했기 때문에 docker를 포기했습니다.

@Mevo 님과 @Anv 님, 안녕하세요.

좋은 아침입니다.

도움이 되지 않을 것 같지만, “참고 자료” 하나를 드리자면, Docker 기반의 프로덕션 설치 환경이든 macOS 데스크톱의 “Docker 미사용” 개발 환경이든, Discourse에서 SMTP 메일 설정을 할 때 제3자 SMTP 서비스를 사용하면서 문제가 된 적은 한 번도 없습니다.

여러분의 이야기에 관심을 갖게 되었고, 이제 이 작은 퍼즐에 매우 흥미를 느껴 향후 몇 주 안에 VPS의 Ubuntu Linux 슬라이스에서 SMTP 릴레이를 설정해보고, "제3자 솔루션"에 의존하는 대신 "오래된 방식"의 SMTP 릴레이와 Discourse가 제대로 작동하는지 확인해 볼 시간을 찾아보겠습니다.

이 구성을 구축하는 데 몇 주가 걸릴 수 있으니 미리 사과드립니다. Discourse 플러그인 개발과 Rails가 모든 구성 요소와 어떻게 작동하는지를 배우는 데 너무 재미를 붙여, 지루한 정부 관련 서류 작업에 뒤처져 있기 때문입니다.

안녕하세요 @neounix.

어쨌든, 이 문제로 도움을 주셔서 정말 감사합니다.

아마 제 가장 큰 문제는 외부 네트워크 접근 없이 LAN 내에서 이것을 실행하고 싶다는 점일 것입니다.

초대 발송 중 Discourse 로그

로그에는 ID가 포함된 편지가 있다고 나와 있습니다.
이 ID에 대한 언급을 찾아보았습니다.
1 ID - 테스트 메시지.
2 ID - 초대

image

여러 번 시행착오를 거친 끝에 Postfix와 함께 Discourse를 동작하도록 만들었습니다. 제가 사용한 단계는 다음과 같습니다. 도움이 되길 바랍니다:

  1. A 레코드를 설정하여 새 서버를 가리키도록 합니다. 예를 들어 forum.domain.com

  2. Postfix를 설치하고 forum.domain.com을 myhostname으로 설정한 뒤, Discourse 컨테이너가 인증 없이 Postfix와 통신할 수 있도록 mynetworks에 172.17.0.0/16을 추가합니다. 172.17.0.0/16은 Docker 컨테이너에서 기본적으로 사용되는 네트워크입니다.

  3. Postfix가 이메일을 보낼 수 있는지 확인합니다. 저는 swaks를 사용하는 것을 선호합니다.

    swaks -t your_name@gmail.com
    

    "This is a test mailing"이라는 제목의 이메일을 수신해야 합니다.

  4. containers/app.yml에서 DISCOURSE_SMTP_USER_NAME, DISCOURSE_SMTP_PASSWORD, DISCOURSE_SMTP_ENABLE_START_TLS에 해당하는 3줄을 주석 처리하도록 확인하세요.

    그리고 DISCOURSE_SMTP_DOMAIN을 forum.domain.com으로 설정합니다(여기서는 자신의 도메인 이름으로 대체해야 합니다).

  5. 테스트하려면 docker exec -it app bash 명령으로 Discourse 컨테이너에 접속한 후 다음을 실행할 수 있습니다:

    apt update
    apt install -y swaks
    swaks -t name@gmail.com --server forum.domain.com
    

    "This is a test mailing"이라는 제목의 이메일을 수신해야 합니다.

  6. ./launcher rebuild app 명령으로 Discourse를 재시작합니다. 이제 새 계정을 생성하고 인증 이메일을 수신할 수 있어야 합니다.