تشغيل Discourse docker بجانب Apache

مرحبًا.

أحاول إعداد Discourse عبر Docker على خادمي الحالي. لا أستخدم أي حاويات Docker أخرى.

يعمل خادمي مع Apache (مواقع WordPress) وبعض خدمات الويب الأخرى.

لا أستطيع معرفة كيفية توجيه النطاق الفرعي ‘forum.rebelscience.club’ إلى حاوية Docker الخاصة بي.

عندما يُطلب مني ذلك:

اسم المضيف لـ Discourse الخاص بك؟ [discourse.example.com]: forum.rebelscience.club

أرى ما يلي:

جاري التحقق من اسم النطاق . . .
تحذير: يبدو أن المنفذ 443 على الجهاز غير متاح باستخدام اسم المضيف: forum.rebelscience.club.
تحذير: فشل الاتصال أيضًا بـ http://forum.rebelscience.club (المنفذ 80).

يشير ذلك إلى أن forum.rebelscience.club يحل إلى عنوان IP لا يؤدي إلى هذه الآلة حيث تقوم بتثبيت Discourse.

أول ما يجب فعله هو التأكد من أن forum.rebelscience.club يحل إلى عنوان IP الخاص بهذا الخادم.
عادةً ما يتم ذلك في نفس المكان الذي اشتريت فيه النطاق.

إذا كنت متأكدًا من أن عنوان IP يُحل بشكل صحيح، فقد تكون المشكلة متعلقة بجدار الحماية.
قد يساعد البحث في الويب عن "فتح المنافذ خادمتك السحابية".

هذه الأداة مصممة فقط لأكثر التثبيتات شيوعًا. إذا لم تتمكن من حل
المشكلة المذكورة أعلاه، فستحتاج إلى تعديل containers/app.yml بنفسك ثم كتابة الأمر التالي:

./launcher rebuild app

لست متأكدًا من كيفية إعداد ذلك. المنافذ 80 و443 متاحة، لكنها موجهة إلى النطاق الرئيسي وليس النطاق الفرعي.

أي نصائح تُقدّر جدًا.

مرحبًا @rebelCoder

تم مناقشة هذا الموضوع على نطاق واسع هنا في ميتا؛ ويمكنك البحث في ميتا عن “وكيل عكسي لأباتشي” وستجد العديد من المواضيع الشاملة والمفصلة جدًا.

باختصار، تحتاج إلى إعداد مضيف افتراضي لخادم أباتشي ليعمل كوكيل عكسي لـ Discourse.

تم نشر إعدادات Apache2 الدقيقة لهذا التكوين عدة مرات في ميتا.

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

3 إعجابات

عذراً، كان يجب أن أذكر أنني قد بحثت في / جربت عدة حلول من هذا المنتدى ومن Digital Ocean أيضاً. لكنني ما زلت غير قادر على جعل الأمر يعمل. لم قمت بإعداد Docker من قبل.

دعني أشاركك إعداداتي الحالية:

/etc/hosts:
127.0.0.1       forum.rebelscience.club

ملف المضيفات وسجل DNS يعملان بشكل صحيح حيث كان phpBB يعمل هناك اليوم. الآن أحاول توجيهه إلى حاوية Docker تحتوي على Discourse.

في containers/app.yml

لقد قمت بتحديث المنافذ:

expose:
  - "8081:80"   # http
  - "8443:443" # https

في /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
</VirtualHost>

ما الذي أفتقده؟ عند تشغيل ./discourse-setup ما زال يفشل مع الرسالة المذكورة في المنشور الأصلي.

أعتقد أنه يجب أن يكون لديك استضافة افتراضية (virtualhost) على المنفذ 443، مع ذلك، خطأ المنفذ 80 غريب، ربما تنقصك شيئًا ما (سجل CNAME؟) في إعدادات DNS الخاصة بك؟

الأمر غريب. يبدو أن الإعداد معقد بعض الشيء.

لدي فقط سجل A لـ forum.rebelscience.club

لقد قمت بتحديث ملفات .conf الخاصة بي بشهادة أيضًا:

cat /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.forum.rebelscience.club [OR]
RewriteCond %{SERVER_NAME} =forum.rebelscience.club
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

cat /etc/apache2/sites-enabled/discourse-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>

SSLCertificateFile /etc/letsencrypt/live/forum.rebelscience.club/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forum.rebelscience.club/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

الآن أرى 503 خدمة غير متاحة

أنا في حيرة تامة، ما الذي أحتاج إلى فعله بعد ذلك؟ لا يزال setup.sh يفشل مع الرسالة الأصلية.

في الحالة (إعداد المثال) أعلاه، يجب عليك فقط فتح المنفذ 8081 في Docker (وليس المنفذ 80 أو المنفذ 443).

يتم فتح المنافذ 80 و443 بواسطة وكيل العكسي خارج الحاوية، ويتم توجيه حركة المرور هذه إلى المنفذ 8081 (في مثالك أعلاه)، وهو المنفذ الذي قمت بفتحه داخل الحاوية (المُربَط بالمنفذ 80 من الداخل).

سيكون هذا فعالاً فقط إذا قمت بربط المنفذ 80 داخل الحاوية بالمنفذ 8081 (المُعرَّض للمضيف).

expose:
  - "8081:80"   # http

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

ملاحظة: @rebelCoder، إعدادات Apache2 الخاصة بك على جانب SSL تفتقر إلى الكثير من معلومات الإعدادات التي تحتاجها.

راجع هذا المنشور:

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

لم يعد هذا يمثل مشكلة ويمكن إغلاقه.

لا يمكنك استخدام discourse-setup. سيتعين عليك تعديل ملف app.yml يدويًا كما هو موضح في المواضيع المتعلقة بالتشغيل مع Apache.