작동하던 테스트 환경을 DigitalOcean에서 가정용 Linux 머신(Ubuntu)으로 옮겼는데, 수신 메일 설정을 제대로 작동시키는 데 어려움을 겪고 있습니다. 라우터에서 25번 포트를 포워딩했으며, 메일 로그를 확인하면 메일이 도착하는 것을 볼 수 있습니다(로그에서 To:와 From:를 확인할 수 있습니다). 문제는 메일 수신기가 메일을 Discourse에 POST할 때 발생하며, 이때 타임아웃이 발생합니다. ISP가 라우터를 통한 루프백을 허용하지 않아, POST 명령에서 Discourse 인스턴스의 공개 도메인 이름을 사용하면 라우터가 패킷을 드롭하기 때문에 응답이 전혀 없어 멈추게 된다고 의심하고 있습니다.
이로 인해 해당 머신에서 Discourse 웹사이트를 볼 수도 없었습니다… 공개 도메인 이름을 내부 네트워크 IP 주소로 가리키는 줄을 /etc/hosts 파일에 추가하면 된다는 것을 깨달은 이후로는 Firefox에서 Discourse 인스턴스를 볼 수 있게 되었습니다.
메일 수신기 컨테이너가 유사한 작업을 수행하도록 어떤 마법을 부릴 수 있을 것 같습니다. 여기저기 읽어본 결과, /etc/hosts 파일을 사용하지 않는 것 같고, 이것이 문제의 원인이 될 수 있습니다. mail-receiver.yml 파일에 extra_hosts:를 허용하는 줄을 추가해 보았지만, 등록되지 않는 것 같습니다. mail-receiver 앱에 들어가서 /etc/hosts에 다른 줄을 추가하려고 시도해 보면(cat >> 사용), 줄이 나타나는 것을 볼 수 있지만 여전히 같은 문제가 발생합니다.
다음은 로그에서 POST 실패를 보여주는 줄입니다(참고: 이 예제에서 도메인은 임의로 설정한 것입니다):
<23>Feb 23 01:00:31 receive-mail[133]: Recipient: abc@example-discourse.org.uk<19>Feb 23 01:01:31 receive-mail[133]: Failed to POST the e-mail to https://example-discourse.org.uk/admin/email/handle_mail: execution expired (Net::OpenTimeout)<19>Feb 23 01:01:31 receive-mail[133]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize’
어떤 생각이 있으신가요?