@pfaffman قام بتعديل هذا بشكل كبير في 2022.02.24. ألومني إذا كان هناك خطأ.
إذا كنت ترغب في تشغيل مواقع ويب أخرى على نفس الجهاز مثل 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. يجب أن يبدو كالتالي:
# base templates used; can cut down to include less functionality per container templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # remove - https will be handled by outer nginx
# - "templates/web.letsencrypt.ssl.template.yml" # remove -- https will be handled by outer nginx
- "templates/web.socketed.template.yml" # <-- Added
تأكد من إزالة أو التعليق على المنافذ المكشوفة عن طريق وضع علامة # في المقدمة.
# which ports to expose?
# expose: comment out entire section by putting a # in front of each line
# - "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 على النحو التالي:
server_name discourse.example.com; # <-- change this
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 $proxy_add_x_forwarded_for;
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
واتبع التعليمات. إذا لم تفهم المطالبات، فربما لا يجب عليك القيام بذلك، ولكن يمكنك مراجعة وثائق certbot للحصول على مساعدة.
يعتقد @pfaffman أن certbot سيفعل ذلك نيابة عنك، ولكن إذا قمت بإجراء تغييرات على إعداد nginx، فستحتاج إلى
sudo service nginx reload
إنشاء مواقعك الأخرى
لقد انتهيت من قسم Discourse!
قم بإنشاء “مواقع” NGINX أخرى، ثم اربطها ومكّنها، كما في الخطوة الأخيرة أعلاه.
نصائح
sudo netstat -tulpn: سيخبرك هذا بالمنافذ المستخدمة/var/log/nginx/error.log: هو موقع سجل nginx على أوبونتو. سيخبرك هذا بالخطأ عندما تحصل على خطأ 502 Bad Gateway.