私はこの間違いを犯し、mail-receiver.yml ファイルに discourse.example.com を残していました。
今は修正しましたが、mail-receiver は新しい詳細を「取得」していないようです。
mail-receiver を「リセット」するにはどうすればよいですか (例: ./launcher rebuild app に相当するコマンドは何ですか?)。
編集: 前の投稿を十分に読みませんでした。コマンドは ./launcher rebuild mail_receiver です。
「いいね!」 1
現在、mail-receiver が Discourse にメールを配信できず、さらに問題が発生しています。ヘルプを検索しましたが、うまくいきませんでした。
ログ:
Starting Postfix
12月14日 03:12:32 forum-mail-receiver postfix/master[1]: daemon started -- version 3.5.6, configuration /etc/postfix
12月14日 03:15:47 forum-mail-receiver postfix/smtpd[113]: connect from mail-pl1-f169.google.com[209.85.214.169]
12月14日 03:15:47 forum-mail-receiver postfix/smtpd[113]: 821CB37A659: client=mail-pl1-f169.google.com[209.85.214.169]
12月14日 03:15:47 forum-mail-receiver postfix/smtpd[113]: 821CB37A659: message-id=<602f2194be912e92b969eacf5eac26e2@frontapp.com>
12月14日 03:15:47 forum-mail-receiver postfix/cleanup[120]: 821CB37A659: message-id=<602f2194be912e92b969eacf5eac26e2@frontapp.com>
12月14日 03:15:47 forum-mail-receiver postfix/qmgr[98]: 821CB37A659: from=<[my personal email address]>, size=4086, nrcpt=1 (queue active)
<23>12月14日 03:15:47 receive-mail[122]: Recipient: nobody@[my forum URL]
12月14日 03:16:20 forum-mail-receiver postfix/smtpd[113]: disconnect from mail-pl1-f169.google.com[209.85.214.169] ehlo=1 mail=1 rcpt=1 bdat=1 quit=1 commands=5
<19>12月14日 03:16:47 receive-mail[122]: Failed to POST the e-mail to [my forum URL]/admin/email/handle_mail: execution expired (Net::OpenTimeout)
<19>12月14日 03:16:47 receive-mail[122]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/lib/ruby/2.7.0/net/http.rb:1483:in `request'
/usr/local/lib/site_ruby/mail_receiver/discourse_mail_receiver.rb:43:in `process'
/usr/local/bin/receive-mail:13:in `<main>'
12月14日 03:16:47 forum-mail-receiver postfix/pipe[121]: 821CB37A659: to=<nobody@[my forum URL]>, relay=discourse, delay=60, delays=0.17/0.01/0/60, dsn=4.3.0, status=deferred (temporary failure)
12月14日 03:17:32 forum-mail-receiver postfix/qmgr[98]: 7C67437A663: from=<[my personal email address]>, size=4093, nrcpt=1 (queue active)
これが原因となっている可能性のあることは何か考えられますか?
mail-receiver.yml ファイルは有効で、スペルミスがないか確認しました。
これは私の API キーのスコープです。
メールは mail-receiver に届いていますが、mailq に溜まっているだけです。
それとも、メール受信者コンテナを完全に削除して最初からやり直す方法はありますか?
pfaffman
(Jay Pfaffman)
2022 年 12 月 15 日午後 12:39
4
APIキーが設定されていないことが原因である可能性があります
@pfaffman … ご回答ありがとうございます。mail-receiver.yml の設定で確実に設定されています。引用符で囲むべきでしょうか?
pfaffman
(Jay Pfaffman)
2022 年 12 月 15 日午後 10:28
6
(Net::OpenTimeout)
それが問題です。メール受信者がフォーラムのURLにアクセスできません。そのため、何らかの理由でURLが間違っているか、メール受信者とフォーラムの間でDockerにネットワークの問題があるかのどちらかです。
さらにトラブルシューティングするにはどうすればよいですか?
mailq 内から ping forum.[mydomain].co.nz を実行すると、次のようになります。
64 bytes from [ip].vultrusercontent.com ([ip]): icmp_seq=1 ttl=64 time=0.113 ms
64 bytes from [ip].vultrusercontent.com ([ip]): icmp_seq=2 ttl=64 time=0.074 ms
64 bytes from [ip].vultrusercontent.com ([ip]): icmp_seq=3 ttl=64 time=0.069 ms
などと表示され、接続が成功していることがわかります。
forum.[mydomain].co.nz はフォーラムがホストされている場所であり、この同じ URL が MAIL_DOMAIN および DISCOURSE_MAIL_ENDPOINT で使用されています。
mail-receiver.yml の設定をさらに詳しく見ると、引用符や https:// が必要な場所で欠けているということはありませんか?
## これは受信メール受信コンテナのテンプレートです
##
## このファイルを編集した後は、必ず再構築してください
## /var/discourse/launcher rebuild mail-receiver
##
## *編集には非常に注意してください*
## YAML ファイルは、空白や配置の間違いに非常に敏感です!
## 必要に応じて、http://www.yamllint.com/ でこのファイルを検証してください
base_image: discourse/mail-receiver:release
update_pups: false
expose:
- "25:25" # SMTP
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
## フォーラムに送信されるべきメールの送信先。一般的に、フォーラム自体の
## ドメインと同じドメインをここに使うことは全く問題ありません。
MAIL_DOMAIN: forum.[domain].co.nz
# TLS をサポートするために、これらのコメントを解除してください(および以下のボリュームも!)
# POSTCONF_smtpd_tls_key_file: /letsencrypt/discourse.example.com/discourse.example.com.key
# POSTCONF_smtpd_tls_cert_file: /letsencrypt/discourse.example.com/fullchain.cer
# POSTCONF_smtpd_tls_security_level: may
## Discourse フォーラムのメール処理エンドポイントの URL。
## これは単にフォーラムの基本 URL に `/admin/email/handle_mail` を
## 追加したものです。サブフォルダ設定を実行している場合は注意してください -- その場合、
## URL にサブフォルダを含める必要があります!
DISCOURSE_MAIL_ENDPOINT: 'https://forum.[domain].co.nz/admin/email/handle_mail'
## Discourse フォーラムのマスター API キー。管理パネルの「API」タブから
## 取得できます。
DISCOURSE_API_KEY: 639[rest of API key]884ef
## 受信メールの処理に使用するユーザー名。`system` ユーザーの名前を
## 変更していない限り、そのままにしておくべきです。
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# TLS をサポートするためにコメントを解除してください
# - volume:
# host: /var/discourse/shared/standalone/letsencrypt
# guest: /letsencrypt
コンテナ内でpingを実行していますか?つまり、まず./launcher enter mail-receiverを実行してからですか?
また、ping(通常はICMP)はhttp/https(TCP)への接続とは異なり、ネットワーク構成の多くの要因によって異なる動作をする可能性があることに注意してください。
コンテナに入った後、curlを使用してフォーラムにhttpsで接続できるかどうかを確認することをお勧めします。たとえば、次のようになります。
cd /var/discourse
./launcher enter mail-receiver
curl -v https://forum.[domain].co.nz
動作する場合、大量のHTMLが出力されます。動作しない場合は、エラーが表示され、-vを使用すると、失敗した理由を明らかにするのに役立つ多くの情報が表示されます。
失敗した場合は、コンテナ固有の問題か、ホストシステム全般の問題かを特定するために、コンテナ外で同じcurlコマンドを実行してみる価値もあります。
「いいね!」 3
@Simon_Manning様 、ありがとうございます。大変助かりました。ping経由の接続とcurl経由の接続が必ずしも同じではないということを知りませんでした。
コンテナ内でpingを実行したところ、成功しました。
ご指示に従い、コンテナ内でcurlを実行したところ、失敗しました。
root@forum:/var/discourse# ./launcher enter mail-receiver
x86_64 arch detected.
WARNING: containers/mail-receiver.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/mail-receiver.yml
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@forum-mail-receiver:/# curl -v https://forum.[domain].co.nz
* Trying [IPv4 address]:443...
* Trying [IPv6 address]:443...
* Immediate connect fail for [IPv6 address]: Cannot assign requested address
* connect to [IPv4 address] port 443 failed: Connection timed out
* Failed to connect to forum.[domain].co.nz port 443: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to forum.[domain].co.nz port 443: Connection timed out
その後、exitしてから再度curlを実行したところ、以下のようになりました。
root@forum:/var/discourse# curl -v https://forum.[domain].co.nz
* Trying 127.0.1.1:443...
* Connected to forum.[domain].co.nz (127.0.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
...and so on.
これはホストシステムの問題ではなく、コンテナ固有の問題のようです。何か考えられることはありますでしょうか?
また、このインスタンスのVPSプロバイダーであるVultrにサポートチケットを開き、彼らの側で問題が発生しているかどうかを確認しています。
Dockerはコンテナ用の仮想ネットワークを作成し、指定がない場合はコンテナはデフォルトネットワークを使用します。このデフォルトネットワークでは、コンテナ間の通信は許可されません。
通常、これはmail-receiverにとっては問題ありません。なぜなら、Discourseコンテナは、そのネットワークの外側にポート443が公開されており、mail-receiverが1.2.3.4に接続しようとすると、Dockerネットワークを離れるからです。ホストシステム(またはそれより先のネットワーク)は、再び戻ってくる必要があると認識し、最終的に外部からDiscourseコンテナに入ることになります。
考えられる可能性は2つあります。1つは、mail-receiverがドメイン名を検索する際に、DiscourseコンテナのIPを何らかの方法で認識しており、そのためコンテナ間の接続がブロックされているという可能性です。これは可能性が低いと思います。
もう1つは、ホストシステムのファイアウォールが、コンテナから出て別のコンテナに入る接続をブロックしているという可能性です。Vultrはデフォルトのファイアウォールルールを使用している可能性があり、それが原因となっているか、あるいはDockerがデフォルトでUFWにいくつかのルールをインストールすることをかすかに覚えています。もしUFWを使用している場合は、それに関連している可能性があります。
「いいね!」 2
pfaffman
(Jay Pfaffman)
2022 年 12 月 21 日午後 7:42
11
https は使用できません。これらのコメントを解除していないためです。
これは、メールサーバー側の TLS サポートにのみ適用されます。つまり、他のメールサーバーが TLS を介して mail-receiver にメールを配信できるようにするためです。
Discourse コンテナーには明らかに証明書がありますが、mail-receiver が Discourse に接続するのには影響しないはずなので、実行する価値があります。ただし、コンテナーのネットワークで何かを修正する場合、再構築によって影響が出る可能性があります。
コメントアウトされた行とボリュームの行をコメント解除しました。
私の mail-receiver.yml ファイルは以下のようになります。
root@forum:/var/discourse# cat containers/mail-receiver.yml
## これは受信メールコンテナのテンプレートです
##
## このファイルを変更した後は、必ず再構築してください
## /var/discourse/launcher rebuild mail-receiver
##
## 編集は *非常に注意深く* 行ってください!
## YAMLファイルは空白やインデントの間違いに非常に敏感です!
## 必要に応じて http://www.yamllint.com/ でこのファイルを検証してください
base_image: discourse/mail-receiver:release
update_pups: false
expose:
- "25:25" # SMTP
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
## フォーラムに送信されるメールの宛先。通常は、
## フォーラム自体と同じドメインを使用しても問題ありません。
MAIL_DOMAIN: forum.[domain].co.nz
# TLSをサポートするためにコメントを解除してください(下のボリュームも!)
POSTCONF_smtpd_tls_key_file: /letsencrypt/forum.[domain].co.nz/forum.[domain].co.nz.key
POSTCONF_smtpd_tls_cert_file: /letsencrypt/forum.[domain].co.nz/fullchain.cer
POSTCONF_smtpd_tls_security_level: may
## Discourseフォーラムのメール処理エンドポイントのURL。
## これは単にフォーラムのベースURLに `/admin/email/handle_mail` を
## 追加したものです。サブフォルダの設定を実行している場合は注意してください。その場合、
## URLにサブフォルダを含める必要があります!
DISCOURSE_MAIL_ENDPOINT: 'https://forum.[domain].co.nz/admin/email/handle_mail'
## DiscourseフォーラムのマスターAPIキー。これは管理パネルの
## 「API」タブから取得できます。
DISCOURSE_API_KEY: '074[rest of API key - yes I generated a new one limited to the system user]d98'
## 受信メールの処理に使用するユーザー名。`system` ユーザーを
## 名前変更していない限り、そのままにしておくべきです。
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# TLSをサポートするためにコメントを解除
- volume:
host: /var/discourse/shared/standalone/letsencrypt
guest: /letsencrypt
新しいメールを送信して ./launcher logs mail-receiver を実行すると、次のようになります。
Dec 21 22:41:21 forum-mail-receiver postfix/smtpd[132]: connect from mail-pj1-f54.google.com[209.85.216.54]
Dec 21 22:41:23 forum-mail-receiver postfix/smtpd[132]: 16DAC379E42: client=mail-pj1-f54.google.com[209.85.216.54]
Dec 21 22:41:23 forum-mail-receiver postfix/cleanup[139]: 16DAC379E42: message-id=<94fc2bef18b410ae8b121c6af2da2df4@frontapp.com>
Dec 21 22:41:23 forum-mail-receiver postfix/qmgr[100]: 16DAC379E42: from=<[my email address]>, size=5585, nrcpt=1 (queue active)
<23>Dec 21 22:41:23 receive-mail[141]: Recipient: nobody@forum.[domain].co.nzDec 21 22:41:50 forum-mail-receiver postfix/smtpd[143]: connect from mail-oa1-f50.google.com[209.85.160.50]
Dec 21 22:41:52 forum-mail-receiver postfix/smtpd[143]: 2E445379E48: client=mail-oa1-f50.google.com[209.85.160.50]
Dec 21 22:41:52 forum-mail-receiver postfix/cleanup[139]: 2E445379E48: message-id=<6b2f9d646dc46f4fec4af006de01d3ae@frontapp.com>
Dec 21 22:41:52 forum-mail-receiver postfix/qmgr[100]: 2E445379E48: from=<[my email address]>, size=4100, nrcpt=1 (queue active)
<23>Dec 21 22:41:52 receive-mail[147]: Recipient: nobody@forum.[domain].co.nzDec 21 22:41:53 forum-mail-receiver postfix/smtpd[132]: disconnect from mail-pj1-f54.google.com[209.85.216.54] ehlo=2 starttls=1 mail=1 rcpt=1 bdat=1 quit=1 commands=7
Dec 21 22:41:58 forum-mail-receiver postfix/qmgr[100]: 1194937A670: from=<double-bounce@forum-mail-receiver.localdomain>, size=942, nrcpt=1 (queue active)
Dec 21 22:41:58 forum-mail-receiver postfix/smtp[149]: fatal: unknown service: smtp/tcp
Dec 21 22:41:59 forum-mail-receiver postfix/qmgr[100]: warning: private/smtp socket: malformed response
Dec 21 22:41:59 forum-mail-receiver postfix/qmgr[100]: warning: transport smtp failure -- see a previous warning/fatal/panic logfile record for the problem description
Dec 21 22:41:59 forum-mail-receiver postfix/master[1]: warning: process /usr/lib/postfix/sbin/smtp pid 149 exit status 1
Dec 21 22:41:59 forum-mail-receiver postfix/master[1]: warning: /usr/lib/postfix/sbin/smtp: bad command startup -- throttling
Dec 21 22:41:59 forum-mail-receiver postfix/error[150]: 1194937A670: to=<postmaster@forum-mail-receiver.localdomain>, orig_to=<postmaster>, relay=none, delay=1192, delays=1191/1/0/0.01, dsn=4.3.0, status=deferred (unknown mail transport error)
<19>Dec 21 22:42:23 receive-mail[141]: Failed to POST the e-mail to https://forum.sobercheck.co.nz/admin/email/handle_mail: execution expired (Net::OpenTimeout)<19>Dec 21 22:42:23 receive-mail[141]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/lib/ruby/2.7.0/net/http.rb:1483:in `request'
/usr/local/lib/site_ruby/mail_receiver/discourse_mail_receiver.rb:43:in `process'
/usr/local/bin/receive-mail:13:in `<main>'Dec 21 22:42:23 forum-mail-receiver postfix/pipe[140]: 16DAC379E42: to=<nobody@forum.[domain].co.nz>, relay=discourse, delay=60, delays=0.23/0.01/0/60, dsn=4.3.0, status=deferred (temporary failure)
Dec 21 22:42:25 forum-mail-receiver postfix/smtpd[143]: disconnect from mail-oa1-f50.google.com[209.85.160.50] ehlo=2 starttls=1 mail=1 rcpt=1 bdat=1 quit=1 commands=7
<19>Dec 21 22:42:52 receive-mail[147]: Failed to POST the e-mail to https://forum.[domain].co.nz/admin/email/handle_mail: execution expired (Net::OpenTimeout)<19>Dec 21 22:42:52 receive-mail[147]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/lib/ruby/2.7.0/net/http.rb:1483:in `request'
/usr/local/lib/site_ruby/mail_receiver/discourse_mail_receiver.rb:43:in `process'
/usr/local/bin/receive-mail:13:in `<main>'Dec 21 22:42:52 forum-mail-receiver postfix/pipe[146]: 2E445379E48: to=<nobody@forum.[domain].co.nz>, relay=discourse, delay=60, delays=0.15/0.01/0/60, dsn=4.3.0, status=deferred (temporary failure)
Dec 21 22:45:45 forum-mail-receiver postfix/anvil[135]: statistics: max connection rate 1/60s for (smtp:209.85.216.54) at Dec 21 22:41:21
Dec 21 22:45:45 forum-mail-receiver postfix/anvil[135]: statistics: max connection count 1 for (smtp:209.85.216.54) at Dec 21 22:41:21
Dec 21 22:45:45 forum-mail-receiver postfix/anvil[135]: statistics: max cache size 2 at Dec 21 22:41:50
何が原因なのか、誰かアイデアはありますか?
pfaffman
(Jay Pfaffman)
2022 年 12 月 22 日午後 2:30
14
しまった!はい。TLSとhttpsを混同していました。
これは全く機能していません。メール受信者からDiscourseにメールが渡されていません。
メール受信者を完全にリセットして最初からやり直すことはできますか?そうすれば機能するかもしれません。
どうすればできますか?
pfaffman
(Jay Pfaffman)
2023 年 1 月 9 日午前 3:07
16
メールコンテナを編集して再構築するだけで済みます。
jryans
(J. Ryan Stinnett)
2023 年 1 月 26 日午前 10:52
17
ファイアウォールに関するヒントをありがとうございます!私も @MathiasFoster さんと同様の問題に遭遇しました。mail-receiver コンテナが app コンテナのフォーラムサイトに到達できないのです。最初は少し不可解でした。コンテナが外部への通信を問題なく許可されているように見えたからです。
私も VPS プロバイダーとして Vultr を利用しており、彼らの Ubuntu OS イメージを使用しています。OS イメージのデフォルトと Docker の何らかの組み合わせが、コンテナ間の通信をブロックしているようです。
いずれにせよ、私の場合は、ホストで HTTPS を許可するだけで十分でした。
$ ufw allow https
その後、mail-receiver は期待どおりにメールを配信できるようになりました。
「いいね!」 1