لدي تثبيت مُدار ذاتيًا لمنصة Discourse يعمل بشكل جيد على خادم VPS يعمل بنظام Ubuntu 18.04 منذ نحو عام. ومع نمو المنتدى، بدأت في التحضير للانتقال إلى خادم VPS أكثر قوة. لذا، استخدمت صورة Ubuntu 20.04 محدودة، وطبقت بعض إجراءات التثبيت المعتادة، ثم قمت بتثبيت Discourse عبر Docker وفقًا لدليل التثبيت الذي يستغرق 30 دقيقة. استخدمت نفس القيم تمامًا كما في التثبيت الذي يعمل بشكل جيد. ولكن: رسالة التفعيل الإلكترونية لا تُرسَل. لم يساعد دليل استكشاف الأخطاء المتعلقة بالبريد الإلكتروني في تثبيت Discourse جديد — إذ يمكنني الاتصال باستخدام telnet، لكنني أحصل على الخطأ التالي عند تشغيل ./discourse-doctor:
>==================== اختبار البريد ====================
للحصول على اختبار دقيق، احصل على عنوان من http //www mail-tester com/
أو أرسل ببساطة رسالة تجريبية إلى نفسك.
عنوان البريد الإلكتروني لاختبار البريد؟ ('n' لتخطي) [مجهول]: test-9ymkghbvc@srv1 mail-tester com
جاري إرسال البريد إلى test-9ymkghbvc@srv1.mail-tester com...
جاري اختبار الإرسال إلى test-9ymkghbvc@srv1.mail-tester com باستخدام smtp mailbox org:587.
==================== خطأ ======================
خطأ غير متوقع
>
>503 5.5.1 خطأ: لم يتم تمكين المصادقة
>
>
>================== الحل =====================
>هذا ليس خطأ شائعًا. لا يوجد حل موصى به!
>
>يرجى الإبلاغ عن رسالة الخطأ الدقيقة أعلاه إلى https //meta discourse org/
(وأي حل، إذا وجدته!)
=================================================
(كان علي إزالة بعض أجزاء الروابط أعلاه لأتمكن من النشر هنا)
حقيقة غريبة: أحصل على نفس الخطأ عند تشغيل ./discourse-doctor على خادم VPS الذي يعمل بشكل جيد أيضًا، لذا لا أعرف ما إذا كان هذا الخطأ ذا صلة.
كما ترون، أنا أستخدم مزود البريد الإلكتروني mailbox.org والذي يعمل بشكل ممتاز ويُعد خيارًا رائعًا من حيث الخصوصية وإعداد بنية بريد إلكتروني قوية. لقد تحققت من المضيف والمنفذ، وأستخدمهما في Thunderbird وفي تثبيت Discourse الآخر لسنوات.
هل لديكم أي أفكار؟ الفرق الوحيد الذي أراه بين خادمي VPS هو أن الخادم الذي يعمل يعمل بنظام Ubuntu 18.04 بينما المشكلة موجودة على الخادم الذي يعمل بنظام Ubuntu 20.04.
المنفذ 587 مفتوح، ويمكنني الاتصال بخادم SMTP باستخدام telnet كما هو موضح في دليل استكشاف الأخطاء وإصلاحها.
كما قمت باختبار التعطيل باستخدام ufw - النتيجة نفسها.
لا يوجد خطأ مطبعي في ملف yaml - لقد أزلت هذه النقاط عمدًا في منشوري (حساب منتدى جديد - يُسمح بـ رابطين فقط في المنشور).
السبب كان عنوان البريد الإلكتروني للمرسل الذي يستخدمه Discourse افتراضيًا. يتم إنشاؤه من اسم المضيف المُدخل أثناء الإعداد (في حالتي، شيء مشابه لـ v220200xxxxxxxxxxxx.powersrv.de)، مما ينتج عنه عنوان المرسل noreply@v220200xxxxxxxxxxxx.powersrv.de، وهو مرفوض من قبل خادم SMTP.
إذن، لماذا أستخدم هذا الاسم المضيف غير الصديق؟ فقط لأن الخادم مُعد لاستبدال الخادم الحالي الذي أصبح صغيرًا جدًا بالنسبة لمجتمعنا المتنامي على Discourse. أنا أقوم بإعداد واختبار الخادم الجديد قبل تبديل إعدادات DNS لتوجيهها إلى هذا الخادم الجديد لاحقًا. أريد فقط توفير الوقت لإنشاء إعدادات DNS مؤقتة صديقة هنا.
كيفية حل المشكلة؟
ابحث عن هذه الأسطر في نهاية ملف app.yml:
## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني "من" للتسجيل الأول، فقم بإلغاء التعليق وتغييره:
## بعد استلام بريد التسجيل الأول، قم بإعادة التعليق على السطر. فهو يحتاج إلى التشغيل مرة واحدة فقط.
قم بإلغاء التعليق على السطر الأخير وعدّله إلى عنوان يقبله خادم SMTP الخاص بك كمرسل صالح، على سبيل المثال: - exec: rails r "SiteSetting.notification_email='USER@DOMAIN.TLD'"
الآن قم بتشغيل ./launcher rebuild app لتطبيق التغييرات، وها هو الحل - الآن يتم إرسال بريد التفعيل ويمكنك تفعيل حساب المسؤول وإكمال الإعداد.
كيف اكتشفت ذلك؟
أنشأت حساب بريد جديد مع موفر مساحة الويب الخاص بي، وقمت بتشغيل إعداد Discourse مرة أخرى باستخدام بيانات اعتماد SMTP هذه - وتلقيت بريد التفعيل كما هو متوقع. لذا كنت أعرف أن المشكلة يجب أن تكون مرتبطة بإعدادات SMTP (وليس أي شيء آخر يتعلق بإعدادات Ubuntu / Docker / Discourse).
بعد تفعيل حساب المسؤول باستخدام خادم SMTP الآخر، ذهبت إلى الإعدادات > البريد الإلكتروني > تم تخطيها ووجدت محاولات الفشل في إرسال بريد التفعيل: 553 5.7.1 <noreply@v220200xxxxxxxxxxxx.powersrv.de>: Sender address rejected: not owned by user USER@DOMAIN.TLD
الخلاصة
أود أن أوجه انتباه فريق تطوير Discourse إلى طلب الميزة اقتراح - السماح بإعداد “من” للبريد الإلكتروني للنظام بشكل اختياري أثناء الإعداد. يرجى النظر في حالات التثبيت الاختباري (مثل النسخ للاختبار قبل الترقية الفعلية للمثيل) التي لا تملك عنوان مضيف صديق. سيكون من الأسهل بكثير إعداد هذه الحالات دون الحاجة إلى الذهاب إلى app.yaml. أيضًا، أعتقد أنه من الجيد منح المسؤول خيار استخدام عناوين بريد إلكتروني غير مرتبطة باسم مضيف Discourse.
شكرًا لكم
كما أشكر أيضًا @codinghorror على توجيهي إلى كيفية كتابة كتل الكود.