저는 @kvsf 님의 오류가 이미 수정되었거나, 설정 내에서 근본적인 부분들이 변경되었을 것이라고 생각하지만, 같은 문제 영역 내에서 제 설정, 추가적인 접근 방법, 그리고 도움을 구하기 위해 이 스레드를 계속 이어가고자 합니다.
기본 설정
- Google Workspace Business Starter
- Gmail 라우팅 구성 > SMTP 릴레이 설정: i) 도메인 내 등록 사용자만 허용, ii) 포럼 호스팅 서버 IP를 통한 IP 화이트리스트 적용 및 SMTP 인증 강제, iii) TLS 강제 적용
- discourse 문서에 따른 discourse docker 설치
- 아래에 따른
app.yml 설정
expose:
- "80:80" # http
- "443:443" # https
env:
DISCOURSE_HOSTNAME: "forum.mydomain.com"
DISCOURSE_DEVELOPER_EMAILS: 'dev@mydomain.com'
DISCOURSE_SMTP_ADDRESS: "smtp-relay.gmail.com"
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: "user@mydomain.com"
DISCOURSE_SMTP_PASSWORD: "mypass"
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_OPEN_TIMEOUT: 25
DISCOURSE_SMTP_READ_TIMEOUT: 25
DISCOURSE_SMTP_DOMAIN: "mydomain.com"
DISCOURSE_NOTIFICATION_EMAIL: "noreply@mydomain.com"
LETSENCRYPT_ACCOUNT_EMAIL: dev@mydomain.com
내 테스트
./discourse-doctor를 실행하면 이 설정은 다음과 같은 오류를 발생시킵니다.
Testing sending to ...
SMTP server connection successful.
Sending to artificial.testadress@gmail.com. . .
Sending mail failed.
end of file reached
그 후 먼저 discourse 및 이메일 로그를 확인했습니다.
docker 내부에서 동일한 프로세스를 수동으로 테스트해 보았습니다 (docker exec -it <CONTAINER_ID> bash를 사용하여 연결). 다음 명령을 통해:
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587
문제는 발생하지 않았고 정상적으로 작동했습니다. 따라서 저는 app.yml의 파라미터 설정이 이상하거나, discourse 내부에서 스크립트 간 통신 오류가 있거나, … 수많은 가능성이 있다고 생각합니다. ^^ app.yml을 변경하여 다양한 설정을 테스트할 때마다 ./launcher rebuild app를 실행하지 않아도 되도록, 기존 코드를 다음과 같이 변경하여 /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb 파일을 직접 편집하기 시작했습니다:
class SMTP
attr_accessor :settings
DEFAULTS = {
:address => 'smtp-relay.gmail.com',
:port => 587,
:domain => 'mydomain.com',
:user_name => 'user@mydomain.com',
:password => 'mypass',
:authentication => 'login',
:enable_starttls => nil,
:enable_starttls_auto => true,
:openssl_verify_mode => 'peer',
:ssl => nil,
:tls => nil,
:open_timeout => 25,
:read_timeout => 25
}
def initialize(values)
self.settings = DEFAULTS #.merge(values)
end
이것은 위에서 언급한 것과 동일한 동작을 보입니다(커스터마이즈된 app.yml 설정이 주어졌을 때).
도움 요청
이제 막혀 있습니다. 물론 나머지 설정들을 더 조정해 볼 수 있고 (discourse에서 비추천하는 SSL 전용 사용으로 되돌리는 것도 가능하지만), 저는 다음과 같이 하고 싶습니다:
- 이 문제를 더 깊이 있게 분석하고 조사하는 방법을 배우는 것
- 이를 통해 실제로 무슨 일이 일어나고 있는지, 그리고 문제가 무엇인지 이해하는 것
- 문제를 수정하고 모든 것을 원활하게 사용할 수 있게 되는 것 (+마침내 포럼이 제대로 작동하게 만드는 것)
미리 도움을 주셔서 감사합니다.