السماح بـ SSL / HTTPS لإعداد Docker الخاص بك في Discourse

من المحتمل أن يكون هذا الدليل قديمًا حيث لا يوجد الآن سوى القليل من الأسباب لعدم استخدام شهادة Let’s Encrypt المدمجة التي تعمل ببساطة. راجع أيضًا:

في 2023-04-10، قال @pfaffman: لقد تُرك هذا هنا لأغراض تاريخية في الغالب.

إذًا، هل ترغب في تمكين SSL لإعداد Discourse المستند إلى Docker الخاص بك؟ لنفعل ذلك!

يفترض هذا الدليل أنك استخدمت جميع إعدادات التثبيت القياسية - ملف تكوين حاوية في /var/discourse/containers/app.yml و Docker Discourse مثبت في: /var/discourse

شراء شهادة SSL

انتقل إلى namecheap أو أي مزود آخر لشهادات SSL وقم بشراء شهادة SSL لنطاقك. اتبع جميع الخطوات الموثقة من قبلهم لإنشاء المفتاح الخاص و CSR وفي النهاية الحصول على الشهادة الخاصة بك. لقد استخدمت إعدادات Apache الافتراضية، وستعمل بشكل جيد.

احتفظ بمفتاحك الخاص وشهادتك في مكان آمن.

وضع الشهادة والمفتاح

احصل على شهادة موقعة ومفتاح وضعها في المجلد /var/discourse/shared/standalone/ssl/

المفتاح الخاص هو:

/var/discourse/shared/standalone/ssl/ssl.key

الشهادة هي

/var/discourse/shared/standalone/ssl/ssl.crt

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

ألقِ نظرة على ملف تكوين app.yml الخاص بك لمعرفة مكان تحميل المجلد المشترك.

    volumes:
      - volume:
          host: /var/discourse/shared/standalone
          guest: /shared

في الأساس، يجب أن تكون الملفات موجودة في /shared/ssl/ssl.key و /shared/ssl/ssl.crt داخل الحاوية.

لكي يتمكن جميع العملاء من العثور على مسار من شهادتك إلى شهادة جذر موثوقة (أي عدم إظهار أي تحذيرات لمستخدميك)، قد تحتاج إلى تجميع ملفات الشهادة من الموفر الخاص بك كما يلي:

cat "Your PositiveSSL Certificate" "Intermediate CA Certificate" "Intermediate CA Certificate" >> ssl.crt

تكوين NGINX

أضف مرجعًا إلى قالب nginx ssl من ملف التكوين app.yml الخاص بك:

    templates:
      - "templates/postgres.template.yml"
      - "templates/redis.template.yml"
      - "templates/web.template.yml"
      - "templates/web.ratelimited.template.yml"
      - "templates/web.ssl.template.yml"

تكوين حاوية Docker الخاصة بك

أخبر الحاوية الخاصة بك بالاستماع على SSL

    expose:
      - "80:80"
      - "443:443"

تهيئة حاوية Docker الخاصة بك

أعد بناء تطبيقك

./launcher rebuild app

اربح، لقد انتهيت!

استكشاف الأخطاء وإصلاحها

تأكد من قراءة السجلات باستخدام

./launcher logs app

إذا حدث خطأ ما.

كيف يعمل هذا

يقوم القالب بتكوين nginx باستخدام TLSv1.2 و TLSv1.3، ومجموعات تشفير قوية، ورؤوس HSTS، وإعدادات تذكرة الجلسة. يستخدم منافذ إخراج تكوين nginx لحقن تكوين SSL.

تحتوي الصورة على قواعد إعادة توجيه ستقوم بإعادة توجيه أي طلبات على المنفذ 80 إلى https://DISCOURSE_HOST_NAME، وستقوم أيضًا بإعادة توجيه الطلبات الخاصة بأسماء المضيفين الأخرى على المنفذ 443 إلى اسم المضيف القانوني.

تخصيص هذا الإعداد سهل للغاية، راجع:

يمكنك عمل نسخة من هذا الملف وتعديل القالب حسب الحاجة.

تتمثل ميزة استخدام القوالب والمنافذ هنا في أننا نحصل على الاحتفاظ بكل إعدادات NGINX الموصى بها من Discourse، والتي تتغير بمرور الوقت.

اختبار التكوين الخاص بك

راجع SSL Server Test (Powered by Qualys SSL Labs) للتأكد من أن كل شيء يعمل بشكل صحيح. من الممكن أن تكون بعض مجموعات المتصفحات وأنظمة التشغيل راضية عن https المهيأ جزئيًا، لذا تحقق من ذلك هنا أولاً.

75 إعجابًا
I need help with SSL
Broken image since https
Troubles installing SSL
NGINX Proxy Mixed Content Error
SSL on Discourse / DO sub-domain of Heroku hosted domain
Force Discourse to use SSL/HTTPS through CloudFlare
How to force redirect from https to http on Docker installation
SSL Let's Encrypt Error After Installation
Cannot connect to IP address and no errors in log
Can i change Lets Encrypt to EssentialSSL / Wildcard SLL
I have a very difficult problem installing ssl - please help
Go Daddy SSL certificate installation error in D.O. server
How Do I Uninstall SSL Certificate?
How to Set Up SSL in Discourse
Site down after enabling SSL
SSL installation
SSL certificate expired and after that - Error 404 Not Found
Skipping built-in SSL certificate?
Unable to renew Let's encrypt certificate
Adding SSL certificate
Getting Cloudflare 521 Error After Upgrade to 3.5.0.beta8-dev
Let's encrypt failing for IP behind firewall
Unable To Connect/Connection Refused due to https certificates
Rebuild goes into a loop
Transfer from bitnami to normal discourse
My site is down with a weird SSL notification
Https with let's encrypt behind a vpn?
Cannot install custom SSL new_file: no such file
Favicon is failing to load for logged-in users
How to install SSL certificate in Discourse
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
How to modify Dockerfile?
DNS validation for Let's Encrypt?
How might we better structure #howto?
Hit Let's encrypt renewal limit
Unable To Connect/Connection Refused due to https certificates
Setting up Discourse with SSL on Docker with AWS ELB breaks and returns 503 Service Unavailable (Back-end server is at capacity)
Disabe letsencrypt failed and Run discourse-setup had some not normal alert
Global setting to hide origin IP from everywhere - is it possible?
Latest update requires cache purge in CloudFlare