Discourse لا يعمل مع Apache وإعادة توجيه الوكيل

رغم أنني كنت أعتزم تمامًا التخلي عن Discourse نظرًا لغياب تام للوثائق الحالية التي لا تركز بشكل مفرط على CentOS/Nginx، إلا أن فردًا كريمًا للغاية وصبورًا في DigitalOcean ردّ على موضوع أنشأته هناك، وبعد بعض المحاولات والأخطاء، ساعد في إعداد دليل بسيط وواضح للمستخدمين المحتملين لـ Discourse الذين يواجهون نفس الظروف التي واجهتها.

كمرجع سريع، تلك الظروف هي:

تثبيت Discourse على نفس الخادم مع Apache | باستخدام Ubuntu 18.04 | DigitalOcean

شكرًا لـ Bobbyiliev @ DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (الإجابة الأولى)

المتطلبات المسبقة

  • لضمان السلامة، تأكد من عمل نسخة احتياطية من Droplet الخاص بك، حتى تتمكن في حال حدوث أي خطأ من العودة إلى نسخة عاملة
  • اتصل عبر SSH بدروبلتك
  • تثبيت Apache، ويمكنك اتباع الخطوات حول كيفية القيام بذلك هنا:

الخطوة 1 - تثبيت Docker

لتثبيت Docker، يرجى اتباع الخطوات هنا:

الخطوة 2 - تحميل Discourse

أولاً، أنشئ مجلدًا لتخزين ملفات Discourse فيه:

mkdir /var/discourse

بعد ذلك، استنسخ صورة Docker الرسمية لـ Discourse إلى /var/discourse.

git clone https://github.com/discourse/discourse_docker.git /var/discourse

الخطوة 3 - تكوين Discourse للاستماع على المنفذ 8080

سنستخدم قالب standalone.yml الذي يتضمن جميع الخدمات الضرورية مثل PostgreSQL و Redis وغيرها.

انسخ ملف العينة باستخدام الأمر التالي:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

بعد ذلك، عدّل الملف باستخدام محررك المفضل. افتح /var/discourse/containers/app.yml وحدّث المنافذ في السطرين 23 و24:

## which TCP/IP ports should this container expose?
expose:
  - "8080:80"   # fwd host port 8080   to container port 80 (http)
  - "8443:443"   # fwd host port 8443 to container port 443 (http)

أيضًا، إذا لم تكن لديك شهادة SSL بعد، تأكد من التعليق على السطر 16:

  #- "templates/web.ssl.template.yml"

فقط أضف رمز # في بداية السطر - "templates/web.ssl.template.yml، وإلا فلن يبدأ Discourse.

الخطوة 4 - إعداد Discourse

تغيير المجلد:

cd /var/discourse

ثم، ابدأ Discourse (وبما أن هذه هي المرة الأولى التي تبدأ فيها الخدمة، فسيتم تهيئة التطبيق مع التغييرات الجديدة الموجودة في ملف app.yml):

./discourse-setup

ملاحظة: تأكد من تقديم إعدادات خادم البريد الصالحة، وإلا فقد يفشل الإعداد.

الخطوة 5 - إعداد Apache

في /etc/apache2/sites-available/، أنشئ ملفًا جديدًا باسم forum.example.com.conf وأضف محتوى Vhost التالي:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • فعّل Vhost باستخدام الأمر التالي:
a2ensite forum.example.com
  • فعّل Mod Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • أعد تشغيل Apache:
systemctl restart apache2

وبعد ذلك، ستكون قادرًا على الوصول إلى Discourse مباشرة عبر اسم النطاق الخاص بك.


ملاحظة 1: عند تثبيت Discourse، قد يتم الكتابة فوق ملف app.yml وسيتم إلغاء التعليق على السطرين 16/17 (SSL). ستحتاج إلى تعليق هذين السطرين مرة أخرى ثم إعادة بناء التطبيق (لا تنسَ تغيير المجلد): ./launcher rebuild app

ملاحظة 2: SSL غير مفعّل لـ Discourse مع هذا الدليل. ومن غير المستغرب أنه لا يبدو أن هناك أي وثائق حول تمكين SSL من Let’s Encrypt إذا كان لديك بالفعل مفعّل في Apache. إذا صادف أحد ما حلاً لهذه المشكلة، يرجى التواصل معنا.