음… 이 문제로 약 6시간째 씨름하다가 결국 도움을 요청하게 되었습니다.
서버에 Discourse를 설치하고 컨테이너를 실행한 뒤, 첫 번째 관리자 계정으로 가입을 시도했습니다.
문제는: 가입 확인 이메일이 도착하지 않습니다.
지금까지 해본 조치:
- 설정에서 SMTP가 올바르게 구성되었는지 확인했고, 온라인 테스트 도구 SMTP Test Tool 를 사용해 해당 설정이 정상 작동하는지 확인했습니다. 실제로 정상 작동합니다. (해당 웹사이트 사용)
DISCOURSE_SMTP_ADDRESS: MY_SMTP_HOST
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: MY_SMTP_USERNAME
DISCOURSE_SMTP_PASSWORD: MY_SMTP_PASSWORD
DISCOURSE_SMTP_ENABLE_START_TLS: true # (선택 사항, 기본값 true)
-
관리자 계정 초기 구성을 위해 이메일이 하나만 설정되어 있는지 확인했습니다.
-
SSL이 실제로 정상 작동하는지 확인했습니다. (정상 작동합니다!)
-
온라인에 게시된 설치 가이드를 따르면서 Ubuntu를 두 번 새로 설치해 보았습니다.
-
발신/수신을 차단하는 네트워크 방화벽이 없는지 확인했습니다.
-
Discourse를 호스팅하는 서버에서 SMTP 서버로 telnet 연결에 성공했습니다.
-
app.yml 파일의 끝에 다음 내용을 올바르게 설정했습니다:
- exec: rails r "SiteSetting.notification_email='noreply@MY_WEB_SITE'"
이 시점에서 더 이상 무엇을 시도해야 할지 모르겠습니다. 감사합니다.
discourse-doctor를 실행하면 눈에 띄는 오류가 표시됩니까?
cd /var/discourse
./discourse-doctor
아, 네, 그걸 언급할 걸 깜빡했네요. 제가 눈여겨본 출력을 가져오도록 한 번 더 실행해 보겠습니다.
==================== MAIL TEST ====================
강력한 테스트를 위해 http://www.mail-tester.com/ 에서 주소를 가져오세요.
아니면 자신에게 테스트 메시지를 보내면 됩니다.
메일 테스트용 이메일 주소? (건너뛰려면 'n') [MY_EMAIL]:
MY_EMAIL(으)로 메일 전송 중 . . .
smtp.MY_SMTP:587을(를) 사용하여 MY_EMAIL(으)로 전송 테스트 중.
SMTP 서버 연결 성공.
MY_EMAIL(으)로 전송 중 . . .
메일 전송 실패.
대체: SMTP_PASSWORD
대체: LETSENCRYPT_ACCOUNT_EMAIL
대체: DEVELOPER_EMAILS
대체: DISCOURSE_DB_PASSWORD
대체: Sending mail to
==================== DONE! ====================
이 파일의 공개 버전을 서빙하시겠습니까? (Y/n)
SMTP server connection was successful(SMTP 서버 연결 성공)라고 표시되었는데도 Sending mail failed.(메일 전송 실패)가 나오는 이유를 모르겠습니다.
비밀번호에 특수 문자가 포함된 경우, 따옴표로 비밀번호를 감싸서 시도해 보셨나요?
이전에 따옴표 안에 있었지만, 따옴표 없이 작성된 온라인 가이드를 따라갔습니다. 이제 " 이중 따옴표를 사용하여 다시 시도해 보겠습니다.
지금 바로 재구축 중입니다.
좋습니다, 다시 실행되었습니다. 잠시만요.
같은 오류가 발생합니다:
==================== MAIL TEST ====================
강력한 테스트를 위해 http://www.mail-tester.com/ 에서 주소를 가져오거나
단순히 자신에게 테스트 메시지를 보내세요.
메일 테스트용 이메일 주소? ('n' 입력 시 건너뜀) [MY_EMAIL]: MY_EMAIL
MY_EMAIL 로 메일 전송 중 . . .
MY_SMTP_SERVER:587 을 사용하여 MY_EMAIL 로 전송 테스트 중.
SMTP 서버 연결 성공.
MY_EMAIL 로 전송 중 . . .
메일 전송 실패.
대체: SMTP_PASSWORD
대체: LETSENCRYPT_ACCOUNT_EMAIL
대체: DEVELOPER_EMAILS
대체: DISCOURSE_DB_PASSWORD
대체: Sending mail to
==================== DONE! ====================
이 파일의 공개 버전을 서빙하시겠습니까? (Y/n)n
공개 로그가 생성되지 않았습니다.
아래 명령으로 이 스크립트의 출력을 확인할 수 있습니다.
LESS=-Ri less /tmp/discourse-debug.txt
그러나 먼저, 아래 세 가지 명령을 알고 있는지 확인하세요!!!
위 명령(즉, 'less')으로 파일을 볼 때 알아야 할 명령:
q -- 종료
/error<ENTER> -- 'error' 단어 검색
n -- 다음 발생 위치 검색
g -- 파일의 처음으로 이동
f -- 한 페이지 앞으로 이동
b -- 한 페이지 뒤로 이동
G -- 파일의 끝으로 이동
특수문자 없이 일반적인 비밀번호로 시도해 보았고, 따옴표를 붙이거나 빼거나 해도 결과는 여전히 동일합니다.
Sending mail failed.
Mailgun을 구성해 보시는 것을 제안합니다.
지금 바로 시도해 볼게요. 감사합니다.
그 전에 Discourse app.yml doesn't like email password contain "#" - #15 by elijah 의 내용을 참고해서 비밀번호를 큰따옴표로 감싸고, 마지막으로 특수문자를 전혀 사용하지 않는 비밀번호로 설정해 볼 예정입니다.
그렇게 해도 안 되면 Mailgun을 설정하겠습니다. (현재 사용 중인 이메일 서버에 많은 메일이 남아 있어서 최후의 수단으로 삼고 있습니다.)
진행 상황! 비밀번호를 "'mypass'"처럼 이중 따옴표로 감싸자 새로운 오류 메시지가 나타났습니다.
==================== 메일 테스트 ====================
견고한 테스트를 위해 http://www.mail-tester.com/에서 주소를 가져오거나
자기 자신에게 테스트 메시지를 보내면 됩니다.
메일 테스트에 사용할 이메일 주소? ('n' 입력 시 건너뜀) [sender_email]: my_email
my_email로 메일 전송 중 . . .
my_smtp:587을 사용하여 my_email로 전송 테스트 중.
======================================== 오류 ========================================
예상치 못한 오류
SMTP-AUTH가 요청되었지만 비밀 구문이 없습니다.
====================================== 해결 방법 =======================================
이것은 흔하지 않은 오류입니다. 권장 해결 방법이 존재하지 않습니다!
위 오류 메시지를 https://meta.discourse.org/에 보고해 주세요.
(해결 방법을 찾았다면 그것도 함께!)
=======================================================================================
대체 대상: SMTP_PASSWORD
대체 대상: LETSENCRYPT_ACCOUNT_EMAIL
대체 대상: DEVELOPER_EMAILS
대체 대상: DISCOURSE_DB_PASSWORD
대체 대상: Sending mail to
==================== 완료! ====================
이 파일의 공개 버전을 서빙하시겠습니까? (Y/n)
telnet을 수동으로 사용해 이메일을 보내는 것은 정상적으로 작동하는 것 같지만, Discourse 이메일을 사용할 때는 그렇지 않아 뭔가 문제가 있는 것으로 보입니다.
production.log 파일에서 이것을 발견했는데, 이것이 원인이 될 수 있을까요?
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:362$
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:362$
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:362$
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
더 깊이 파고들자 Job exception: SSL_connect returned=1 errno=0 state=error: dh key too small라는 메시지가 발견되어 메일 서버의 SSL에 문제가 있는 것으로 보입니다. Mailgun을 점검할 때입니다.