إذا كنت ترغب في تشغيل مواقع ويب أخرى على نفس الجهاز الذي يعمل عليه Discourse، فأنت بحاجة إلى إعداد وكيل NGINX أو HAProxy إضافي أمام حاوية Docker.
ملاحظة: هذا مخصص للمسؤولين المتقدمين
يفترض هذا الدليل أنك قد قمت بالفعل بإعداد Discourse ليعمل بشكل صحيح - وإلا، فقد يكون من الصعب تحديد ما إذا كانت الإعدادات تعمل بشكل صحيح أم لا.
لا يمكنك استخدام ./discourse-setup لإعداد Discourse إذا كان خادم آخر يستخدم المنفذ 80 أو 443. ستحتاج إلى نسخ وتحرير samples/standalone.yml باستخدام محرر النصوص المفضل لديك.
تثبيت nginx خارج الحاوية
أولاً، تأكد من أن الحاوية لا تعمل:
cd /var/discourse
./launcher stop app
ثم قم بتثبيت nginx و certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
تغيير تعريف الحاوية
هنا نغير طريقة إعداد Discourse فعلياً. لا نريد أن تستمع الحاوية إلى المنافذ - بدلاً من ذلك، سنخبرها بالاستماع إلى ملف خاص.
تحتاج إلى تعديل /var/discourse/containers/app.yml لتعطيل ssl وإضافة قالب لإنشاء مقبس nginx. يجب أن يبدو هكذا:
# القوالب الأساسية المستخدمة؛ يمكن تقليلها لتشمل وظائف أقل لكل قالب حاوية:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # إزالة - سيتم التعامل مع https بواسطة nginx الخارجي
# - "templates/web.letsencrypt.ssl.template.yml" # إزالة - سيتم التعامل مع https بواسطة nginx الخارجي
- "templates/web.socketed.template.yml" # <-- تمت الإضافة
تأكد من إزالة أو تعليق المنافذ المعرّضة بوضع # في المقدمة.
# أي المنافذ التي يجب تعريضها؟
# expose: علّق القسم بأكمله بوضع # في مقدمة كل سطر
# - "80:80" # http
# - "443:443" # https
الآن يمكنك
/var/discourse/launcher rebuild app
إعادة بناء Discourse لجعل بياناته متاحة عبر المقبس.
إذا كنت تستخدم بعض الوكلاء العكسيين الآخرين الذين لا يمكنهم استخدام مقبس ويب، يمكنك بدلاً من ذلك تعريض منفذ مختلف في القسم أعلاه مثل - 8080:80.
إنشاء «موقع» NGINX لـ nginx الخارجي
أنشئ ملف موقع لـ Discourse:
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
بعد ذلك، عدّل هذا الملف عن طريق تعليق هذه الأسطر:
#listen 80 default_server;
#listen [::]:80 default_server;
وتعديل server_name و location stanza على هذا النحو:
server_name discourse.example.com; # <-- قم بتغيير هذا
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
إذا كنت تستخدم تثبيتاً من حاويتين، فسيكون سطر المقبس:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
ثم، في واجهة سطر الأوامر:
certbot --nginx
```\nواتبع التعليمات. إذا لم تفهم المطالبات، فمن المحتمل أنك لا ينبغي أن تقوم بذلك، ولكن يمكنك الرجوع إلى وثائق `certbot` للمساعدة.
يرى @pfaffman أن `certbot` سيقوم بذلك نيابةً عنك، ولكن إذا قمت بإجراء تغييرات على تكوين nginx، فستحتاج إلى
sudo service nginx reload
## إنشاء مواقعك الأخرى
لقد انتهيت من قسم Discourse!
أنشئ مواقع NGINX أخرى، ثم اربطها وفعلها، كما في الخطوة الأخيرة أعلاه.
## نصائح
- `sudo netstat -tulpn` : سيخبرك هذا بأي المنافذ المستخدمة
- `/var/log/nginx/error.log` : هو موقع سجل nginx على Ubuntu. سيخبرك هذا بما هو الخطأ عندما تحصل على خطأ 502 Bad Gateway.