رسائل البريد الإلكتروني للتفعيل: discourse-doctor تعمل، بينما discourse نفسها لا تعمل

مرحباً بالجميع،

كما يقول العنوان بالضبط. سيقوم discourse-doctor بالاتصال بخادم البريد الخاص بي (الذي يعمل على الجهاز المضيف) عبر واجهته الخارجية والموجهة للإنترنت (ولكن ليس عبر localhost)، بينما discourse نفسه لن يفعل ذلك أبداً.

لا يتم تسجيل أي محاولة من قبل discourse، سواء في سجل إنتاج Rails أو في سجلات خادم البريد الخاص بي. لقد قمت حتى بتشغيل كاشف حزم على واجهة Docker ولم أرَ أي حركة مرور للبريد.

ومع ذلك، يقوم discourse-doctor بتوليد مدخلات في سجلات خادم البريد الخاص بي، كما هو متوقع، ويمكنني قراءة البريد الإلكتروني في عميل البريد الخاص بي.

لقد قمت بإعادة بناء حاوية Docker عدة مرات مع التكوين التالي:

## هذا هو قالب حاوية Docker الخاص بـ Discourse الشامل والمستقل
##
## بعد إجراء تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذراً للغاية عند التعديل!
## ملفات YAML حساسة جداً للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق عن هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
###   - "templates/web.ssl.template.yml"
###   - "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت ترغب في مشاركة منفذ Discourse مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "127.0.0.1:1234:80"   # http
    ###   - "127.0.0.1:1235:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## قم بتعيين db_shared_buffers إلى أقصى 25% من إجمالي الذاكرة.
  ## سيتم تعيينها تلقائياً بواسطة bootstrap بناءً على ذاكرة الوصول العشوائي المكتشفة، أو يمكنك تجاوزها
  db_shared_buffers: "256MB"

  ## يمكن أن يحسن أداء الفرز، لكنه يضيف استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي إصدار Git يجب أن تستخدمه هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة المدعومة؟ يعتمد على الذاكرة ونوى المعالج.
  ## سيتم تعيينها تلقائياً بواسطة bootstrap بناءً على المعالجات المكتشفة، أو يمكنك تجاوزها
  UNICORN_WORKERS: 4

  ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
  ## مطلوب. لن يعمل Discourse مع عنوان IP مجرد.
  DISCOURSE_HOSTNAME: example.com

  ## قم بإلغاء التعليق إذا كنت تريد أن تبدأ الحاوية بنفس اسم النطاق
  ## (-h option) المحدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة عناوين البريد الإلكتروني المفصولة بفواصل سيتم تعيينها كمسؤول ومطور
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@another.com'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  # عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
  # تحذير: قد يتسبب حرف '#' في كلمة مرور SMTP في مشاكل!
  DISCOURSE_SMTP_ADDRESS: submission.example.com # يعمل سجل A ولكن ليس CNAME
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: somedumbuser
  DISCOURSE_SMTP_PASSWORD: somedumbpass
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي true)

  ## إذا قمت بإضافة قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  LETSENCRYPT_ACCOUNT_EMAIL: ssl@yetanother.com

  ## عنوان CDN http أو https لهذه النسخة من Discourse (مُهيأ للسحب)
  ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## تذهب الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## أي أوامر مخصصة للتشغيل بعد البناء
run:
  - exec: echo "Beginning of custom commands"
  ## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني 'من' للتسجيل الأول، قم بإلغاء التعليق وتغيير:
  ## بعد الحصول على أول بريد إلكتروني للتسجيل، قم بإعادة التعليق على السطر. يحتاج للتشغيل مرة واحدة فقط.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 0.0.0.0/0;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {
  - exec: echo "End of custom commands"

إذن، هل تشغيل اختبار البريد الإلكتروني في /admin/email لا يرسل رسالة؟ هل /sidekiq قيد التشغيل؟ هل قمت بتثبيت قياسي؟

يتطلب Discourse اسم نطاق للعمل، لذا قد تكون مشكلتك مرتبطة بالربط به فقط على localhost.

مرحبًا جاي، شكرًا لك على الرد.

عندما أعمل sudo docker exec -it app /bin/bash، لا أرى مجلد /admin. كما أنني لا أرى مجلد /admin مُستنسخًا من مستودع Git.

أما الأمر pgrep -afl sidekiq فيُظهر عملية تعمل بهذا الاسم.

أنا أعمل Discourse خلف HAProxy، كما شرحت هنا، ومن هنا جاء الربط مع localhost: How to install Discourse behind Apache mod_proxy?

لقد حاولت تعديل expose على النحو التالي، ولا يزال لا يتم إرسال حتى طلب SYN إلى المنفذ 587 على خادم البريد الخاص بي. تم تعيين DISCOURSE_HOSTNAME إلى النطاق الصحيح، ويتم تشغيل sidekiq، ولا يزال لا أعرف أين أجد /admin/email.

expose:
  - "1234:80"   # http

/admin/email هي مسار نسبي
يجب الوصول إليها عبر متصفح ويب:
{اسم مضيف Discourse الخاص بك}/admin/email