فشل التثبيت الجديد على Ubuntu 20.04.3 LTS

فشل التثبيت الجديد على مثيل EC2 جديد مع الإعداد القياسي. قمت بتشغيل مثيل EC2 على AWS بنظام Ubuntu 20.04.3 وقمت بتطبيق جميع تحديثات Ubuntu الأحدث. نفذت التثبيت البسيط القياسي الموجود هنا

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

./discourse-setup

الفارق الوحيد هو أنه عند تشغيل الإعداد، فشل الاتصال بالخادم عبر HTTP(S) - لقد نسيت فتح منفذين وحيدين في AWS. لذا قمت بتكوين ملف app.yml يدويًا وشغلت ./launcher rebuild app بعد فتح المنافذين في مجموعة أمان AWS.

المستعرض غير قادر على الاتصال، ويظهر سجل الإنتاج هذا.

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'

لقد شغلت مثيل EC2 جديد لأنني كنت أستخدم خادمًا مُعاد استخدامه أيضًا بنظام Ubuntu 20.04.3 كان يعاني من نفس المشكلة تمامًا عند تثبيت discourse. نفس الأخطاء في سجل الإنتاج. لذا فكرت: دعني أبدأ من الصفر وأجعل هذا الأمر بسيطًا.

هل جربت إعادة التشغيل؟

نعم، قمت بتشغيل وإيقاف تشغيل المثيل وإعادة تشغيله عبر سطر الأوامر. لا فائدة.

حسنًا، أنا الآن مقتنع تمامًا بوجود مشكلة في أداة تثبيت Discourse عند استخدام Ubuntu 20.04.3 مع أحدث التحديثات. لقد قمت بتشغيل الأداة مرة أخرى وهذه المرة تأكدت من فتح المنافذ، لذا لم أحتاج إلى تعديل ملف app.yml يدويًا (وبالتالي استبعدت الأخطاء البشرية). بدا كل شيء سلسًا، وتم العثور على النطاق بنجاح. ومع ذلك… لا يوجد موقع. يُظهر سجل الإنتاج ما يلي:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'

هذا الأمر بسيط جدًا لدرجة أنه يستبعد أن يكون الخطأ مني هذه المرة، حيث أنني قمت بتشغيل السكربتات فقط.

هل لديك تثبيت آخر لـ Redis؟

كم من ذاكرة الوصول العشوائي (RAM) لديك؟ هل قام بإنشاء مساحة تبادل (swap)؟

ليس لدي أي شيء مُثبّت. إنها مثيل EC2 جديد من نوع t2.small، لذا فإن الذاكرة العشوائية (RAM) تبلغ 2 جيجابايت. يجب أن أتحقق من مساحة التبادل القياسية التي ينشئها.

إليك معلومات الذاكرة العشوائية (RAM) ومساحة التبديل (Swap). هذه هي حالة مثيل AWS جديد تمامًا (Vanilla) مع جميع تحديثات Ubuntu القياسية، وهو من نوع EC2 - t2.small. لم يتم إجراء أي تغييرات أو إضافات أو تكوينات أو تعديلات. الأوامر الوحيدة المستخدمة للتحديث قبل التثبيت كانت sudo apt update و sudo apt upgrade الأساسية. في المرة الثالثة، حاولت تثبيت Discourse الأصلي على مثيلين منفصلين بنفس نظام التشغيل (Ubuntu 20.04.3). لهذا السبب، أعتقد أن هناك مشكلة ما في أداة التثبيت والإصدار الأخير.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       973Mi       131Mi        36Mi       875Mi       855Mi
Swap:         2.0Gi       0.0Ki       2.0Gi

مساحة القرص في حال كانت ذات أهمية:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        39G  7.8G   31G  20% /

لقد قمت للتو بتشغيل التثبيت على قطرة Digital Ocean جديدة، وقد سار الأمر على ما يرام. المشكلة ليست في برنامج التثبيت.

أفضل تخمين لدي، رغم أنه لا يبدو منطقياً أن تواجه خطأ Redis، هو أنك شغّلت برنامج التثبيت عددًا كافيًا من المرات حتى وصلت إلى حد معدل Let’s Encrypt، وهذا هو المشكلة الحقيقية.

جرّب مرة أخرى باستخدام اسم نطاق مختلف (مثل forum2.example.com).

رائع! أنت محق مرة أخرى، لقد نجح الأمر.

حسنًا، لقد قمت بإعادة البناء كثيرًا لأنني كنت أجرب نقل منتدى من خادم قديم.

كيف يمكنني تجاوز هذه المشكلة؟ أنا لا أستخدم حتى Let’s Encrypt. بعد التثبيت الناجح، قمت بتحديث ملف app.yml لتغيير النطاق وتأكدت من أن قالب Let’s Encrypt مُعلق في ملف app.yml، ثم أعدت البناء، لكن هذا لم يساعد وحصلت على نفس المشكلة: فشل Redis. هل أنا عالق لأن استدعاء Let’s Encrypt مدمج في برنامج التثبيت؟

ما لم تكن تستخدم وكيلًا عكسيًا لتوفير بروتوكول HTTPS، فلا يمكنك فعل ذلك. يجب أن يكون لديك HTTPS. وإذا قمت بإزالة Let’s Encrypt، فيجب عليك أيضًا إزالة قالب HTTPS (أيا كان اسمه).

لا أفهم تمامًا سبب ظهور خطأ Redis؛ ربما قمت بإلغاء التعليق عن Redis عندما قمت بإلغاء التعليق عن Let’s Encrypt؟ هذا أفضل تخمين لدي.

يمكنك محاولة اتباع الإرشادات الموجودة في Set up Let’s Encrypt with multiple domains / redirects لإضافة اسم نطاق ثانٍ، أو الانتظار أسبوعًا.

حسنًا، إذا قرأت الموضوع، فقد تم إجراء تثبيت بسيط على مثيل جديد تمامًا، لذا لم أتمكن من إلغاء التعليق عن أي شيء، حيث أن المثبّت، بناءً على الأسئلة، هو ما ينشئ ملف app.yml. لذا فإن فشل Redis مرتبط مباشرة بحدود معدل Let’s Encrypt. إذا كان ذلك يمكن أن يساعد فريق المطورين بأي طريقة.

أنا أستخدم وكيلًا، أو بالأحرى Cloudflare، لتقديم شهادة SSL والاتصال/التسليم عبر HTTPS فقط.

اختبرت إلغاء التعليق عن قالب https - “templates/web.ssl.template.yml” وقمت بتشغيل launcher rebuild app بالطبع مع إلغاء التعليق عن قالب Let’s Encrypt أيضًا، وحدث نفس الشيء. خطأ Redis. لذا أعتقد أنني عالق، أليس كذلك؟ ما قرار مثبّت سيء، عدم وجود طريقة لتجاوز مكالمات Let’s Encrypt. ما لم تتمكن من تزويدي بشيء آخر لأجربه، فستكون الصبر فضيلة في هذا الشأن. أقدر حقًا كل مساعدتكم. أبقى محبطًا بتواضع.

هذا يجعل الأمور أكثر صعوبة بكثير، وستواجه بعض المشاكل الأخرى لاحقًا ما لم تبحث بعناية عن كيفية استخدام Cloudflare دون تعطيل Discourse.