لقد ارتكبت هذا الخطأ، وتركت discourse.example.com في ملف mail-receiver.yml.
لقد قمت بإصلاح هذا الآن، ولكن يبدو أن mail-receiver لا “يحصل” على التفاصيل الجديدة.
كيف يمكنني “إعادة تعيين” mail-receiver (على سبيل المثال، ما هو الأمر المكافئ لـ ./launcher rebuild app؟).
تعديل: لم أقرأ المنشور السابق بعناية كافية، الأمر هو ./launcher rebuild mail_receiver.
هذه هي مشكلتك. لا يمكن لمستقبل البريد الوصول إلى عنوان URL الخاص بالمنتدى الخاص بك. لذا، إما أن لديك عنوانًا خاطئًا بطريقة ما أو أن هناك مشكلة في الشبكة داخل دوكر بين مستقبل البريد والمنتدى الخاص بك، على ما أعتقد.
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:// في أي مكان يجب أن تكون فيه؟
## this is the incoming mail receiver container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild mail-receiver
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed
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
## Where e-mail to your forum should be sent. In general, it's perfectly fine
## to use the same domain as the forum itself here.
MAIL_DOMAIN: forum.[domain].co.nz
# uncomment these (and the volume below!) to support 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
## The URL of the mail processing endpoint of your Discourse forum.
## This is simply your forum's base URL, with `/admin/email/handle_mail`
## appended. Be careful if you're running a subfolder setup -- in that case,
## the URL needs to have the subfolder included!
DISCOURSE_MAIL_ENDPOINT: 'https://forum.[domain].co.nz/admin/email/handle_mail'
## The master API key of your Discourse forum. You can get this from
## the "API" tab of your admin panel.
DISCOURSE_API_KEY: 639[rest of API key]884ef
## The username to use for processing incoming e-mail. Unless you have
## renamed the `system` user, you should leave this as-is.
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# uncomment to support 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 خارج الحاوية لتحديد ما إذا كان خاصًا بالحاوية أو بالنظام المضيف بشكل عام.
يقوم Docker بإنشاء شبكات افتراضية للحاويات، وفي حالة عدم تحديد شبكة، ستستخدم الحاويات الشبكة الافتراضية. هذه الشبكة الافتراضية لا تسمح بالاتصال بين الحاويات.
عادةً ما يكون هذا جيدًا لـ mail-receiver لأن حاوية Discourse الخاصة بك ستكون المنفذ 443 مكشوفًا خارج تلك الشبكة، وعندما تحاول mail-receiver الاتصال بـ 1.2.3.4، ستغادر شبكة Docker. سيتعرف نظام المضيف (أو بعض الشبكات الأبعد) على أنه يحتاج فقط إلى العودة مرة أخرى، وسينتهي به الأمر بالدخول إلى حاوية Discourse من الخارج.
هناك احتمالان يتبادران إلى الذهن. الأول هو أن mail-receiver على دراية بعنوان IP لحاوية Discourse عند البحث عن اسم النطاق، وبالتالي يتم حظر الاتصال داخل الحاوية. أعتقد أن هذا غير مرجح.
الآخر هو أن جدار حماية على نظام المضيف يمنع الاتصالات من مغادرة حاوية والدخول إلى حاوية أخرى. قد تستخدم Vultr قواعد جدار حماية افتراضية تسبب ذلك، أو أتذكر أيضًا بشكل غامض أن Docker يقوم بتثبيت بعض القواعد في UFW افتراضيًا، لذلك قد يكون هذا مرتبطًا إذا تم استخدام ذلك.
هذا ينطبق فقط على دعم TLS على جانب خادم البريد، أي لكي تتمكن خوادم البريد الأخرى من تسليم رسائل البريد الإلكتروني إلى mail-receiver عبر TLS.
جدير بالقيام به نظرًا لأن حاوية Discourse تحتوي بوضوح على شهادة ولكن لا ينبغي أن يؤثر ذلك على اتصال mail-receiver بـ Discourse. من المحتمل أن يؤدي إعادة البناء إلى تصحيح شيء ما في شبكة الحاوية.
شكرًا لك، لقد قمت بإلغاء التعليق على تلك الأسطر، والسطر الخاص بالمجلد.
ملف mail-receiver.yml الخاص بي يبدو الآن كالتالي:
root@forum:/var/discourse# cat containers/mail-receiver.yml
## this is the incoming mail receiver container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild mail-receiver
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed
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
## Where e-mail to your forum should be sent. In general, it's perfectly fine
## to use the same domain as the forum itself here.
MAIL_DOMAIN: forum.[domain].co.nz
# uncomment these (and the volume below!) to support 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
## The URL of the mail processing endpoint of your Discourse forum.
## This is simply your forum's base URL, with `/admin/email/handle_mail`
## appended. Be careful if you're running a subfolder setup -- in that case,
## the URL needs to have the subfolder included!
DISCOURSE_MAIL_ENDPOINT: 'https://forum.[domain].co.nz/admin/email/handle_mail'
## The master API key of your Discourse forum. You can get this from
## the "API" tab of your admin panel.
DISCOURSE_API_KEY: '074[rest of API key - yes I generated a new one limited to the system user]d98'
## The username to use for processing incoming e-mail. Unless you have
## renamed the `system` user, you should leave this as-is.
DISCOURSE_API_USERNAME: system
volumes:
- volume:
host: /var/discourse/shared/mail-receiver/postfix-spool
guest: /var/spool/postfix
# uncomment to support 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
أنا عالق حقًا الآن، هل لدى أي شخص أي أفكار حول ما قد يسبب هذا؟
شكراً على النصيحة بخصوص جدار الحماية! لقد واجهت أيضاً مشاكل مشابهة لمشاكل @MathiasFoster، حيث لم يتمكن حاوية mail-receiver من الوصول إلى موقع المنتدى في حاوية app. كان الأمر محيراً في البداية، بما أن الحاويات مسموح لها بالاستماع إلى العالم الخارجي دون مشاكل.
أنا أيضاً أستخدم Vultr كمزود خدمة الخادم الافتراضي الخاص بي مع صورة نظام التشغيل Ubuntu الخاصة بهم. يبدو أن بعض التوليفات بين إعدادات صورة نظام التشغيل الافتراضية بالإضافة إلى Docker تمنع بالفعل الاتصال عبر الحاويات.
على أي حال، في حالتي، كان كافياً السماح بـ HTTPS على المضيف:
$ ufw allow https
بعد ذلك، تمكن mail-receiver من إرسال البريد كما هو متوقع.