لا يمكن الوصول إلى خادم Discourse في VM من المضيف

مرحبًا! لقد قمت بتثبيت Discourse بنجاح في جهاز افتراضي يعمل بنظام Ubuntu 18.04 (باستخدام VMware Workstation 15 Player) متبعًا هذا الدليل. يعمل الوصول إلى http://localhost:3000/ من داخل الجهاز الافتراضي بشكل جيد، لكنني لا أستطيع الوصول إليه من نظام Windows 10 المضيف. تم تكوين شبكة الجهاز الافتراضي في وضع الجسر (bridged mode)، ولتشغيل خادم Rails أقوم بتنفيذ الأمر التالي:

bundle exec rails server --binding=0.0.0.0

ومع ذلك، عندما أذهب إلى http://192.168.0.172:3000/ من جهاز المضيف، أحصل على خطأ “تم رفض الاتصال”. لقد جربت إعداد خادم HTTP بسيط بلغة Python داخل الجهاز الافتراضي:

python3 -m http.server 3000

وأستطيع الوصول إليه فعليًا من جهاز المضيف، لذا أعتقد أن المشكلة خاصة بـ Discourse. هل هناك شيء فاتني؟

شكرًا مقدّمًا!

مرحبًا @Hugo_Lol

قد تجد أنه من المفيد مراجعة كيفية إعداد إعادة توجيه المنافذ بين المضيف والآلة الافتراضية، على سبيل المثال:

مثال آخر:

ربما يمكنك استخدام هذه الأمثلة للحصول على فكرة حول كيفية البدء في حل هذه المشكلة؟

أتمنى أن يكون هذا مفيدًا.

مرحبًا @neounix، شكرًا على الرد. لقد قمت بالفعل بتكوين شبكة الآلة الافتراضية في وضع الجسر، ويمكنني الوصول إليها من الخارج باستخدام خادم HTTP بسيط بلغة بايثون يستمع على نفس المنفذ (3000) والعنوان (0.0.0.0)، لكن لسبب ما لا يعمل ذلك مع خادم Discourse… :thinking:

هل لديك أي أفكار؟

مرحبًا @Hugo_Lol،

أهلاً وسهلاً بك.

أنا لست مستخدمًا لنظام ويندوز، لذا لا يمكنني تقديم المزيد من المساعدة، آسف على ذلك!

أفضل اقتراح لدي هو البحث عن أدلة في ملفات السجل المختلفة لـ Discourse الموجودة في /var/log.

المشكلة هنا هي أن خيار --binding يتم تجاهله تمامًا. جربت الأمر الخاص بك محليًا ولاحظت هذا السطر في المخرجات (المخرجات صاخبة جدًا لذا من السهل جدًا تفويت هذا السطر):

I, [2020-06-08T17:26:55.938086 #21001]  INFO -- : listening on addr=127.0.0.1:3000 fd=15

عند قراءة ملف config/unicorn.conf.rb، لجعل الخادم يستمع إلى 0.0.0.0، ستحتاج إلى تعيين متغير البيئة UNICORN_BIND_ALL=1. لذا يجب أن يعمل الأمر التالي: UNICORN_BIND_ALL=1 bundle exec rails server.

بدلاً من ذلك، يمكنك استخدام سكربت bin/unicorn الذي يقبل خيار --host الذي يمكنك استخدامه للربط بـ 0.0.0.0.

هذا هو الحل! إنه يعمل الآن. شكرًا جزيلًا لكم كلاهما. :clap:

شكرًا لك، هذا أنقذني من كثير من المتاعب.
أتساءل عما إذا كان بإمكانك تحديث أدلة المستخدمين الرسمية لتشمل هذا بدلاً من الحل غير الفعال باستخدام bundle exec rails server -b 0.0.0.0.
لقد رأيت ذلك في كل مكان على الإنترنت ولم أستطع تخيل أنه لن يعمل.

بالتأكيد، يمكنك القيام بذلك بنفسك! إنها ويكي :+1:t3:

شكرا يا أخي! كانت لدي نفس المشكلة، وهذا حلها!