لقد حاولت تثبيت نسخة خاصة من 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 لأنه لا يمكنه الاتصال بهذه المكونات؟ ماذا فاتني أو فعلت خطأ؟
يبدو أنك انحرفت عن التثبيت القياسي عن طريق إعداد حاويات منفصلة لـ Redis و Postgres، لذا أخشى أنه ليس لدي إجابة جاهزة لك. كيف قمت بتكوين إعدادات Redis داخل Discourse؟
شيء آخر - أرى redis:4-alpine. أخشى أنك بحاجة إلى الانتقال إلى إصدار أحدث من Redis لأن Discourse يتطلب الإصدار 6.20 أو أعلى. لا أعتقد أن هذا هو سبب مشكلتك على الرغم من ذلك.
إذا كنت لن تستخدم postgres و redis المقدمين، فستكون مسؤولاً عن معرفة سبب عدم عمل لديك. هناك الكثير من الأشياء التي يمكن أن تكون كذلك ولا يمكننا تخمينها أو استنتاجها. أوصي بتثبيت قياسي على جهاز افتراضي منفصل لمعرفة كيفية عمل الأشياء قبل محاولة إعداد معقد للغاية.
لم أقم بأي تثبيت “غير قياسي”! لقد قمت، كما هو موضح في الوثائق، بتنزيل كل شيء من Github، وتغيير المنافذ المكشوفة فقط وتشغيل البرنامج النصي:
لم أغير أي شيء في تكوين redis، ولا postgres.
لم أغير أي شيء لإصدار redis.
تم تثبيت هذه البرامج بواسطة البرنامج النصي discourse-setup الأصلي.
@pfaffman ماذا تقصد بـ “تعديل ملف yml يدويًا”؟ أي ملف yml تتحدث عنه؟ هناك العديد من ملفات .yml في “containers”…
بالمناسبة، لدي حاليًا وكيل عكسي على الجهاز، والذي يبدو أن لديه تكوينًا بسيطًا: ملفات subdomain.conf متعددة تحدد إعادة توجيه subdomain:80 → port XXX. هل هذا هو المطلوب؟
أوصي بـ تثبيت قياسي على جهاز افتراضي منفصل لمعرفة كيفية عمل الأشياء قبل محاولة إعداد معقد للغاية.
لا أريد إعدادًا معقدًا ، أحتاج فقط إلى تشغيل Discourse مع بعض الحاويات الأخرى، وهذا هو ما تم تصميم Docker من أجله…
بشكل عام، لا يقوم discourse-setup بتثبيت مثيلات postgres و redis منفصلة، وبالتأكيد ليس الإصدارين 12 و 4.
هل يمكنك من فضلك نشر التكوين الخاص بك والتغييرات التي أجريتها على container.yml والبرامج النصية؟ تأكد من إزالة أي إعدادات سرية.
أيضًا، يرجى إخبارنا بالالتزام (commit) الذي تستخدمه من مستودع discourse_docker.
لقد قمت بتعديل كل من discourse-setup وملف سيتم الكتابة فوقه عند تحديث discourse-docker. تغيير أي شيء بخلاف app.yml الخاص بك هو بالتأكيد غير قياسي.
لماذا؟ وأيًا كان ما احتجت إلى تغييره هناك، فهذه ليست الطريقة الصحيحة للقيام بذلك. ستحتاج إلى وضع هذه التغييرات في ملف app.yml الخاص بك.
لن يعمل Discourse على منفذ غير قياسي، لذا فهذا ليس تثبيتًا قياسيًا.
يتضمن التثبيت القياسي postgres و redis في حاوية واحدة. كما تمت الإشارة، أنت تستخدم إصدارات غير مدعومة من redis و postgres. يمكنك أيضًا إجراء تثبيت من حاويتين كما هو موضح هنا الانتقال من حاوية مستقلة إلى حاويات ويب وبيانات منفصلة (ويمكنك استخدام ./discourse-setup --two-container لجعل discourse-setup ينشئ حاويات بيانات ويب منفصلة، على الرغم من أنه أكثر تعقيدًا في الصيانة (عليك أن تعرف متى تقوم بتحديث حاوية البيانات).
حسنًا، أحتاج بعد ذلك إلى:\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شكرًا مرة أخرى على مساعدتك!
يتم إنشاء app.yml بواسطة discourse-setup. لا يمكنك تشغيل discourse-setup إذا لم يتمكن من الوصول إلى المنافذ، ولكن إذا قرأت المصدر، سترى أنه يمكنك تشغيل ./discourse-setup --skip-connection-test وتشغيله على أي حال.
سيكون nginx الخاص بك مسؤولاً عن let’s encrypt، لذا سترغب في التعليق على قالب let’s encrypt. أشك في أن هذا موصوف في موضوع الوكيل العكسي المرتبط أعلاه وأدناه.
> لا يمكنك استخدام ./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-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؟
عذرًا على الإزعاج، أحتاج إلى التأكد بنسبة 100% لأنني بالتأكيد لست خبيرًا :
أقوم بتشغيل ./discourse-setup --skip-connection-test --skip-rebuildمرة أخرى (كان التشغيل السابق بدون خيار --skip-rebuild). لا أحتاج إلى حذف ما تم تثبيته من التشغيل السابق.
ثم أقوم بتحرير ملف app.yml الموجود وأعلق المنافذ (لقد تم التعليق عليها بالفعل)
لست بحاجة إلى تشغيل discourse-setup مرة أخرى (إلا إذا قمت بتغيير مقدار ذاكرة الوصول العشوائي لديك وأردت تحديث إعدادات الذاكرة إلى الإعدادات الافتراضية الموصى بها).\n\nفقط قم بتحرير المنافذ وأعد البناء
فتح متصفح على discourse.mydomain.com يقودني إلى… مثيل Nextcloud الذي يعمل على الخادم. يبدو أنه يجب إصلاح التكوين، حيث لا يتم توجيه حركة المرور بشكل صحيح إلى حاوية discourse…
لا أريد تثبيت NPM لأنني قرأت أنه ليس أداة قوية وأن التكوين لـ discourse يتضمن ترميز IP بشكل ثابت: هل يجب أن أفعل ذلك على أي حال؟