إعداد دعم HTTPS باستخدام Let's Encrypt

:bookmark: هذا دليل لتمكين HTTPS على تثبيت موجود لـ Discourse باستخدام Let’s Encrypt. يفترض وجود تثبيت سابق دون تمكين HTTPS.

:person_raising_hand: مستوى المستخدم المطلوب: مدير النظام

:exclamation: هذا الدليل مخصص فقط للتثبيتات الموجودة حيث لم يتم تمكين HTTPS. فاتباع دليل الإعداد الرسمي يؤدي إلى تمكين HTTPS تلقائيًا كإعداد افتراضي.

هل ترغب في إضافة https إلى موقع Discourse الخاص بك مجانًا تمامًا، بفضل أصدقائنا في Let’s Encrypt؟

:bell: هل كل شيء آخر على موقعك جاهز لـ HTTPS؟

قبل البدء، يرجى الانتباه إلى أنه لكي يعمل HTTPS بشكل صحيح، يجب أن يكون كل مورد فردي على الصفحة متوافقًا مع HTTPS. خذ في الاعتبار شبكة توصيل المحتوى (CDN) الخاصة بك، وتسجيل الدخول عبر وسائل التواصل الاجتماعي، وملفات الشعار، وأي جافا سكريبت تابع لجهة خارجية، والصور، والخطوط، أو CSS — يجب أن تكون جميعها متاحة عبر HTTPS!

ملاحظة: سيقوم ./discourse-setup بتمكين Let’s Encrypt. اعتبارًا من مارس 2017، يمكنك تشغيله مرة أخرى، والضغط على زر الإدخال عدة مرات وإدخال عنوان بريدك الإلكتروني؛ ستقوم السكربت بتضمين القوالب المطلوبة وإدراج عنوان بريدك الإلكتروني حسب الحاجة. ما لم تكن مدير نظام خبيرًا وتعرف سببًا لعدم القيام بذلك، فيجب عليك تشغيل discourse-setup بدلاً من القراءة أكثر من ذلك. (إذا قمت بتثبيت Discourse منذ وقت طويل جدًا، فقد لا يزال يتعين عليك تعديل app.yml يدويًا.)

ملاحظة: إذا تم الوصول إلى Discourse الخاص بك عبر وكيل عكسي (مثل Cloudflare)، فلن يعمل هذا الإعداد.

إعداد HTTPS مع Let’s Encrypt

1. تعديل app.yml

قم بالوصول إلى ملف إعدادات Discourse:

cd /var/discourse
nano containers/app.yml
  • أضف القوالب التالية:
    templates:
      - "templates/web.template.yml"
      - "templates/web.ssl.template.yml"
      - "templates/web.letsencrypt.ssl.template.yml"
    

:warning: هل Discourse هو الموقع الوحيد على خادمك؟

إذا كنت تستخدم بالفعل web.socketed.template.yml، لأنك تستضيف مواقع ويب أخرى عبر المنفذ 80 على نفس الخادم، توقف. يجب عليك استخدام عميل Let’s Encrypt على نظام المضيف؛ سيفشل التحقق لأن العميل المستخدم غير قادر على الارتباط بالمقابس المطلوبة.

2. فتح منافذ HTTPS

تأكد من فتح المنافذ التالية لحركة مرور HTTPS:

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

3. إضافة بريد إلكتروني لـ Let’s Encrypt

أدخل عنوان البريد الإلكتروني لإشعارات Let’s Encrypt:

env:
  LETSENCRYPT_ACCOUNT_EMAIL: 'your-email@example.com'

4. إعادة بناء التطبيق

طبّق التغييرات عن طريق إعادة بناء الحاوية:

./launcher rebuild app

5. التحقق من HTTPS

قم بالوصول إلى موقعك عبر https://yourdomain.com. في حالة النجاح، سترى موقعك محميًا بـ HTTPS.

راجع مواردك:

  • تأكد من تحميل الأصول (مثل الصور، البرامج النصية) عبر HTTPS.
  • أعد تكوين تسجيل الدخول عبر وسائل التواصل الاجتماعي وشبكة توصيل المحتوى (CDN) لـ HTTPS حسب الحاجة.
  • عالج أي تحذيرات في وحدة تحكم المتصفح تتعلق بأصول غير آمنة.

يقوم Discourse تلقائيًا بتمكين force_https بعد إعادة البناء بشهادة HTTPS صالحة.

كيف يعمل ذلك؟

يستخدم القالب GitHub - acmesh-official/acme.sh: A pure Unix shell script ACME client for SSL / TLS certificate automation · GitHub وهو

أبسط سكريبت قشري لعميل شهادة Let’s Encrypt المجاني

بسيط وقوي، تحتاج فقط إلى 3 دقائق لتعلمه.

مكتوب بالكامل بلغة bash، ولا توجد تبعيات لـ python أو acme-tiny أو العميل الرسمي لـ Let’s Encrypt. سكريبت واحد فقط لإصدار وتجديد شهاداتك تلقائيًا.

ربما هو أصغر وأسهل وأذكى سكريبت قشري لإصدار وتجديد الشهادات المجانية من Let’s Encrypt تلقائيًا.

يضيف web.letsencrypt.ssl.template.yml سكريبت بدء إلى الحاوية الخاصة بك يقوم بـ:

  1. تشغيل nginx خفيف الوزن لخدمة تحديات ACME على المنفذ 80 قبل تشغيل nginx الرئيسي.
  2. إصدار شهادة RSA (4096-bit) وشهادة ECDSA (ec-256) من Let’s Encrypt باستخدام وضع webroot مع /var/www/discourse/public كمجلد.
  3. تثبيت الشهادات في المجلد /shared/ssl/ الذي يتوقعه nginx. في نفس الوقت، يقوم بإعداد مهمة مجدولة (cron job) لتجديد الشهادات تلقائيًا. سيتم تجديد شهاداتك تلقائيًا. لا يحدث شيء إذا لم تنتهِ الشهادات من الصلاحية. إذا انتهت صلاحية شهادة ما، فستتلقى بريدًا إلكترونيًا من Let’s Encrypt على عنوان البريد الإلكتروني الذي قدمته أثناء الإعداد.
  4. تعيين force_https إلى true إذا تم الحصول على شهادات صالحة.

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

فحص السجلات

إذا لم يعمل HTTPS، فراجع السجلات بحثًا عن أخطاء SSL أو Let’s Encrypt باستخدام:

./launcher logs app

التحقق من ملفات الشهادة

تأكد من وجود ملفات الشهادة والمفتاح باستخدام:

ls -l /var/discourse/shared/standalone/ssl

يجب أن ترى ملفات مثل:

  • yourdomain.com.cer (RSA)
  • yourdomain.com.key (RSA)
  • yourdomain.com_ecc.cer (ECDSA)
  • yourdomain.com_ecc.key (ECDSA)

تجديد الشهادات يدويًا

إذا فشل التجديد التلقائي، فيمكنك إعادة إصدار شهاداتك يدويًا:

./launcher enter app
sv stop nginx
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d example.com -k 4096 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert -d example.com --fullchainpath /shared/ssl/example.com.cer --keypath /shared/ssl/example.com.key --reloadcmd "sv reload nginx"
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d example.com --keylength ec-256 -w /var/www/discourse/public
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert --ecc -d example.com --fullchainpath /shared/ssl/example.com_ecc.cer --keypath /shared/ssl/example.com_ecc.key --reloadcmd "sv reload nginx"
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop

إعادة البناء بشهادات نظيفة

احذف ملفات الشهادات القديمة وأعد البناء للبدء من جديد:

rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app

القيود

تقوم شهادات Let’s Encrypt بالتحقق فقط من النطاق والتشفير. فهي لا تؤكد الملكية أو الهوية، مما قد يتم تحديده في بعض المتصفحات. لمزيد من التفاصيل، راجع مجتمع Let’s Encrypt.

143 إعجابًا
Setting up Let's Encrypt for multisite
How should I enable letsencrypt while discourse is beside other websites
Cant setting SLL (Let's Encrypt) for Discourse
Add to homescreen banner on Android
How to Set Up SSL in Discourse
Setting up SSL with my domain name and Discourse instance
Issue installing on subdomain
Completely automated SSL certificate generation
German 1&1-hosting user experience?
Problem with my SSL certificate
Replacement for whitelist-iframe
Site throws a blank screen after trying to enable LetsEncrypt
Missing file(discourse.conf) when launching after lets encrypt update?
Missing file(discourse.conf) when launching after lets encrypt update?
My discourse has either been hacked or catfished?
Discourse has stopped opening
Using a certificate when Discourse is installed behind a reverse proxy
Can discourse be installed in private mode
My Forum Is showing "Privacy Error" after upgrading SSL certificate
Using a certificate when Discourse is installed behind a reverse proxy
Why my forum not pop-up "Add to Home screen"(PWA) automatically?
Why my forum not pop-up "Add to Home screen"(PWA) automatically?
HTTPS : issue while trying to set up SSL certification
HTTPS : issue while trying to set up SSL certification
SSL received a record that exceeded the maximum permissible length
Discourse site loads via IP but via domain only header
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Defaultish app won't rebuild
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Why is the Apple Touch Icon loaded via HTTP instead of HTTPS?
Defaultish app won't rebuild
Unable to connect Discourse and WordPress
I have a very difficult problem installing ssl - please help
Not able to access site after letsencrypt cert expiry and rebuild due to IPV6
Cannot connect to IP address and no errors in log
Http logo urls after enabling LetsEncrypt
How to install SSL certificate in Discourse
White blank page on mobile app
Cloud installation not working
My forum goes offline after removing https
Trying to use Let's Encrypt + Cloudflare
New user invite links only give ERR_SSL_PROTOCOL_ERROR
[DigitalOcean] hostname having "www" in A records showing blank page
Error at LetsEncrypt validation
Migrate a phpBB3 forum to Discourse
Set Up Let's Encrypt with Second Domain for Existing Discourse Install
Not starting up after rebuild
Port 443 of computer does not appear to be accessible
Make auto-linked URLs use HTTPS
Unable to change domain name
LetsEncrypt certificate not renewing
How to deny request from unauthorized domain pointing to my IP address?
No login is possible after recovery a Discourse Backup on a new server
Letsencrypt issued on every build?
My Discourse is Down. Certificate Issue?
Setup Let’s Encrypt + non-www > www
No connection accepted on http / https after fresh installation on Ubuntu 22.04 LTS
SSL certificate expired and after that - Error 404 Not Found
SSL didn't renew automatically and I can't manually renew it
443 address already in use? Letencrypt
Set up Let’s Encrypt with multiple domains / redirects
Using Discourse with Cloudflare: Best Practices
./launcher rebuild app error bootstrap failed with exit code 125
Set up Let’s Encrypt with multiple domains / redirects
Uncaught ReferenceError: Discourse is not defined due to Cloudflare Rocket Loader
Let's Encrypt SSL Certificate Not Renewing
Uploads paths have 80 port but protocol is https
Bootstrap error during Discourse install: ENOENT - /etc/runit/1.d/letsencrypt
How to install Discourse in the AWS EC2 Instances(Ubuntu Server LTS)?
Question about the email configuration
Discourse-saml: There was an error authorizing your account
Problem in installing Let's Encrypt SSL for www and non-www
Email not sending out after installation. I need help please
Discourse not starting up: nginx: unable to open supervise/ok: file does not exist
Failed to bootstrap: Failure with receiving network data
Error when installing ssl Let's Encrypt
How to adjust dependencies for https?
Clicking links is stuck in click tracking, shows ERR_FAILED
Minimum needed to get LetsEncrypt working on a GCE instance
Can we install discourse in another container distro?
Problem with my SSL certificate
Cant setting SLL (Let's Encrypt) for Discourse
[PAID] setup ssl - Let's encrypt
Error after moving from HTTP to HTTPS
How to renew Let's Encrypt?
ServiceWorker script evaluation failed due to HTTP (not HTTPS)
Defaultish app won't rebuild
Too many redirects after enabling https