حاوية Discourse-app تبدأ ثم تتوقف بصمت

عزيزي المجتمع،

لقد حاولت تثبيت نسخة خاصة من Discourse، متبعًا التعليمات الرسمية على discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub. على الرغم من أن النصوص البرمجية تبدو معقدة للغاية، إلا أنني اضطررت إلى تعديل ملفات container.yml و discourse-setup يدويًا لتعيين إعداداتي الخاصة…

المشكلة الأولى: على الرغم من تعقيدها، فإن نص التثبيت لا يسمح بتعديل المنفذ المكشوف! لا يمكن استخدام المنافذ 80/443 على خادمي، حيث يستخدمها nginx. لذلك اضطررت مرة أخرى إلى تعديل نص الإعداد لتعيين المنافذ 3080/3443 كمنافذ مطلوبة للوصول إلى Discourse.

بعد ذلك، تمكنت من تشغيل جميع الحاويات. بالنظر إلى المكدس باستخدام Portainer، اكتشفت أن التطبيق يبدأ ويتوقف بصمت والسجلات لا تقدم الكثير من المعلومات حول السبب. نظرًا لأن redis و postgres لا ينشران أي منفذ، فهل يمكن أن يفشل تطبيق Discourse لأنه لا يمكنه الاتصال بهذه المكونات؟ ماذا فاتني أو فعلت خطأ؟

_discourse-app_logs.txt (10.4 Ko)

شكرًا مقدمًا على أي مساعدة!

Caused by:

Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:6379

لذا فهو غير قادر على الاتصال بـ Redis على عنوان الحلقة المحلية IPv6.

مرحباً ريتشارد، شكراً على الرد السريع! أنا لست متخصصاً في تكنولوجيا المعلومات، بل أحب فقط اللعب بالأدوات: ما هو الحل لهذه المشكلة؟

شكراً مقدماً على نصيحتك!

يبدو أنك انحرفت عن التثبيت القياسي عن طريق إعداد حاويات منفصلة لـ Redis و Postgres، لذا أخشى أنه ليس لدي إجابة جاهزة لك. كيف قمت بتكوين إعدادات Redis داخل Discourse؟

شيء آخر - أرى redis:4-alpine. أخشى أنك بحاجة إلى الانتقال إلى إصدار أحدث من Redis لأن Discourse يتطلب الإصدار 6.20 أو أعلى. لا أعتقد أن هذا هو سبب مشكلتك على الرغم من ذلك.

إعجابَين (2)

يعمل برنامج الإعداد فقط للإعداد القياسي. إذا كنت تقوم بشيء أكثر تعقيدًا، فسيتعين عليك تعديل ملف yml يدويًا. هذا أبسط بكثير من تعديل البرنامج.

لن يعمل Discourse على منفذ غير قياسي. ستحتاج إلى وكيل عكسي أمامه. انظر مواضيع مثل تشغيل مواقع ويب أخرى على نفس الجهاز مثل Discourse.

إذا كنت لن تستخدم postgres و redis المقدمين، فستكون مسؤولاً عن معرفة سبب عدم عمل لديك. هناك الكثير من الأشياء التي يمكن أن تكون كذلك ولا يمكننا تخمينها أو استنتاجها. أوصي بتثبيت قياسي على جهاز افتراضي منفصل لمعرفة كيفية عمل الأشياء قبل محاولة إعداد معقد للغاية.

3 إعجابات

لم أقم بأي تثبيت “غير قياسي”! لقد قمت، كما هو موضح في الوثائق، بتنزيل كل شيء من Github، وتغيير المنافذ المكشوفة فقط وتشغيل البرنامج النصي:

  • لم أغير أي شيء في تكوين redis، ولا postgres.
  • لم أغير أي شيء لإصدار redis.
    تم تثبيت هذه البرامج بواسطة البرنامج النصي discourse-setup الأصلي.

@pfaffman ماذا تقصد بـ “تعديل ملف yml يدويًا”؟ أي ملف yml تتحدث عنه؟ هناك العديد من ملفات .yml في “containers”…

بالمناسبة، لدي حاليًا وكيل عكسي على الجهاز، والذي يبدو أن لديه تكوينًا بسيطًا: ملفات subdomain.conf متعددة تحدد إعادة توجيه subdomain:80 → port XXX. هل هذا هو المطلوب؟

أوصي بـ تثبيت قياسي على جهاز افتراضي منفصل لمعرفة كيفية عمل الأشياء قبل محاولة إعداد معقد للغاية.

لا أريد إعدادًا معقدًا :blush:، أحتاج فقط إلى تشغيل Discourse مع بعض الحاويات الأخرى، وهذا هو ما تم تصميم Docker من أجله…

شكرًا مرة أخرى على مساعدتك!

بشكل عام، لا يقوم discourse-setup بتثبيت مثيلات postgres و redis منفصلة، وبالتأكيد ليس الإصدارين 12 و 4.

هل يمكنك من فضلك نشر التكوين الخاص بك والتغييرات التي أجريتها على container.yml والبرامج النصية؟ تأكد من إزالة أي إعدادات سرية.
أيضًا، يرجى إخبارنا بالالتزام (commit) الذي تستخدمه من مستودع discourse_docker.

3 إعجابات

لقد قمت بتعديل كل من discourse-setup وملف سيتم الكتابة فوقه عند تحديث discourse-docker. تغيير أي شيء بخلاف app.yml الخاص بك هو بالتأكيد غير قياسي.

لماذا؟ وأيًا كان ما احتجت إلى تغييره هناك، فهذه ليست الطريقة الصحيحة للقيام بذلك. ستحتاج إلى وضع هذه التغييرات في ملف app.yml الخاص بك.

لن يعمل Discourse على منفذ غير قياسي، لذا فهذا ليس تثبيتًا قياسيًا.

يتضمن التثبيت القياسي postgres و redis في حاوية واحدة. كما تمت الإشارة، أنت تستخدم إصدارات غير مدعومة من redis و postgres. يمكنك أيضًا إجراء تثبيت من حاويتين كما هو موضح هنا الانتقال من حاوية مستقلة إلى حاويات ويب وبيانات منفصلة (ويمكنك استخدام ./discourse-setup --two-container لجعل discourse-setup ينشئ حاويات بيانات ويب منفصلة، على الرغم من أنه أكثر تعقيدًا في الصيانة (عليك أن تعرف متى تقوم بتحديث حاوية البيانات).

إعجاب واحد (1)

حسنًا، أحتاج بعد ذلك إلى:\n- مسح جميع البرامج التي تم تثبيتها باستخدام البرامج النصية المعدلة (آمل أن يكون هذا قابلاً للعكس بسهولة).\n- تنزيل البرنامج النصي مرة أخرى. لقد استخدمت git clone https://github.com/discourse/discourse_docker.git /var/discourse للتثبيت الحالي: هل هذا جيد؟\n- تغيير بعض الإعدادات المحتملة في الملف app.yml فقط، قبل تشغيل ./discourse-setup.\n- تشغيل البرنامج النصي للتثبيت القياسي (أفضل حاوية واحدة).\n- إعداد وكيل nginx لتوجيه discourse.example.com:80/443 إلى الحاوية المناسبة. هل تقدم الوثائق تلميحات لهذا الجزء؟\n\nيرجى إكمال القائمة إذا فاتني أي خطوة!\n\nشكرًا مرة أخرى على مساعدتك!

:white_check_mark:

انظر Run other websites on the same machine as Discourse

إعجابَين (2)

الشيء الوحيد الذي سيتم تثبيته هو دوكر.

يبدو جيدًا.

يتم إنشاء app.yml بواسطة discourse-setup. لا يمكنك تشغيل discourse-setup إذا لم يتمكن من الوصول إلى المنافذ، ولكن إذا قرأت المصدر، سترى أنه يمكنك تشغيل ./discourse-setup --skip-connection-test وتشغيله على أي حال.

سيكون nginx الخاص بك مسؤولاً عن let’s encrypt، لذا سترغب في التعليق على قالب let’s encrypt. أشك في أن هذا موصوف في موضوع الوكيل العكسي المرتبط أعلاه وأدناه.

راجع استخدام مدير وكيل Nginx لإدارة مواقع متعددة مع Discourse أو تشغيل مواقع ويب أخرى على نفس الجهاز مثل Discourse (والذي تم ربطه بالفعل).

إعجاب واحد (1)

مرحباً @pfaffman،

بالاطلاع على الوثائق الخاصة بـ تشغيل مواقع ويب أخرى على نفس الجهاز مثل Discourse، أحتاج إلى بعض التأكيد:

  • تقول المشاركة

> لا يمكنك استخدام ./discourse-setup لإعداد Discourse إذا كان خادم آخر يستخدم المنفذ 80 أو 443. ستحتاج إلى نسخ وتعديل samples/standalone.yml باستخدام محرر النصوص المفضل لديك.

وأفهم أنني بحاجة إلى تعديل app.yml قبل تشغيل discourse-setup، كما هو مذكور بالفعل في المقدمة
> لا يمكنك استخدام ./discourse-setup لإعداد Discourse إذا كان خادم آخر يستخدم المنفذ 80 أو 443. ستحتاج إلى نسخ وتعديل samples/standalone.yml باستخدام محرر النصوص المفضل لديك.

هل يمكنك بعد ذلك تأكيد العملية التالية:

  • تنزيل كل شيء من Github
  • تشغيل discourse-setup مرة واحدة مع الخيار --skip-connection-test → سيؤدي هذا إلى إنشاء containers/app.yml
  • تعديل app.yml كما هو موضح في الوثائق أعلاه
  • تحديث البرنامج باستخدام /var/discourse/launcher rebuild app
  • إنشاء موقع nginx للإشارة إلى مقبس Discourse وإعادة تشغيل nginx
  • أخيرًا، تشغيل متصفح للوصول إلى Discourse على https://discourse.mydomain.com، والذي يشير ببساطة إلى عنوان IP للخادم.

شكراً مقدماً على نصيحتك!

تحديث:

  • تنزيل كل شيء من Github: تم
  • تشغيل discourse-setup مرة واحدة مع الخيار --skip-connection-test: كل شيء سار على ما يرام حتى النهاية، حيث عاد البرنامج النصي
docker: استجابة خطأ من الخادم: فشل برنامج التشغيل في برمجة الاتصال الخارجي لنقطة النهاية app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): خطأ في بدء تشغيل الوكيل في مساحة المستخدم: الاستماع إلى tcp4 0.0.0.0:443: ربط: العنوان قيد الاستخدام بالفعل.

يبدو هذا طبيعيًا بالنسبة لي، حيث يحاول الحاوية الوصول إلى نفس المنافذ التي يستخدمها خادم الويب الحالي. ومع ذلك، نظرًا لعدم إنشاء أي حاوية discourse (كما هو موضح بواسطة docker container ls)، أود منك تأكيد ذلك قبل المتابعة إلى تكوين nginw…

شكراً مقدماً على مساعدتك!

أعتقد أنك بحاجة إلى التعليق على المنافذ.

هل تقصد “قبل تشغيل discourse-setup”؟ في هذه الحالة، أي ملف يجب أن أقوم بتعديله، حيث أن app.yml غير موجود قبل تشغيل البرنامج النصي؟ أريد تثبيت تطبيق يحتوي على حاوية واحدة: هل يجب أن أقوم بتشغيل نفس البرنامج النصي discourse-setup مرة أخرى أو الأمر /var/discourse/launcher rebuild app؟

بالمناسبة، هل عمليتي المذكورة أعلاه صحيحة؟

قم بتحرير الملف الموجود باستخدام nano أو ما شابه ذلك وقم بالتعليق على المنافذ. ./launcher rebuild app.

ربما في حالتك، يمكنك أيضًا استخدام --skip-rebuild، لذا ستقوم بتشغيل

./discourse-setup --skip-connection-test --skeip-rebuild
nano containers/app.yml
./launcher rebuild app

عذرًا على الإزعاج، أحتاج إلى التأكد بنسبة 100% لأنني بالتأكيد لست خبيرًا :wink::

  • أقوم بتشغيل ./discourse-setup --skip-connection-test --skip-rebuild مرة أخرى (كان التشغيل السابق بدون خيار --skip-rebuild). لا أحتاج إلى حذف ما تم تثبيته من التشغيل السابق.
  • ثم أقوم بتحرير ملف app.yml الموجود وأعلق المنافذ (لقد تم التعليق عليها بالفعل)
  • ثم أقوم بتشغيل ./launcher rebuild app

شكرًا مرة أخرى على وقتك!

لست بحاجة إلى تشغيل discourse-setup مرة أخرى (إلا إذا قمت بتغيير مقدار ذاكرة الوصول العشوائي لديك وأردت تحديث إعدادات الذاكرة إلى الإعدادات الافتراضية الموصى بها).\n\nفقط قم بتحرير المنافذ وأعد البناء

مرحباً جاي،

هذه نتيجة إعادة البناء لهذا الصباح:

  • ./launcher rebuild app = حسنًا، بعض التحذيرات، لكن دوكر يقول إن local_discourse/up يعمل.
  • لقد قمت بإعداد موقع nginx وفقًا للتعليمات الواردة في Run other websites on the same machine as Discourse وأعدت تشغيل nginx = حسنًا.
  • لقد قمت بإعداد إدخال DNS لجعل discourse.mydomain.com يشير إلى عنوان IP للخادم = حسنًا.
  • فتح متصفح على discourse.mydomain.com يقودني إلى… مثيل Nextcloud الذي يعمل على الخادم. يبدو أنه يجب إصلاح التكوين، حيث لا يتم توجيه حركة المرور بشكل صحيح إلى حاوية discourse…

لا أريد تثبيت NPM لأنني قرأت أنه ليس أداة قوية وأن التكوين لـ discourse يتضمن ترميز IP بشكل ثابت: هل يجب أن أفعل ذلك على أي حال؟

شكرًا مقدمًا على نصائحك!

إذًا، يبدو هذا وكأنه مشكلة في وكيل العكس nginx الخاص بك والذي لديك أمام تثبيت Discourse الخاص بك.

انتظر… ماذا؟ ولماذا تحتاج إلى تثبيت NPM خارج الحاوية؟

إعجابَين (2)