هذا دليل لتمكين HTTPS على تثبيت موجود لـ Discourse باستخدام Let’s Encrypt. يفترض وجود تثبيت سابق دون تمكين HTTPS.
مستوى المستخدم المطلوب: مدير النظام
هذا الدليل مخصص فقط للتثبيتات الموجودة حيث لم يتم تمكين HTTPS. فاتباع دليل الإعداد الرسمي يؤدي إلى تمكين HTTPS تلقائيًا كإعداد افتراضي.
هل ترغب في إضافة https إلى موقع Discourse الخاص بك مجانًا تمامًا، بفضل أصدقائنا في Let’s Encrypt؟
هل كل شيء آخر على موقعك جاهز لـ 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"
هل 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 سكريبت بدء إلى الحاوية الخاصة بك يقوم بـ:
- تشغيل nginx خفيف الوزن لخدمة تحديات ACME على المنفذ
80قبل تشغيلnginxالرئيسي. - إصدار شهادة RSA (4096-bit) وشهادة ECDSA (ec-256) من Let’s Encrypt باستخدام وضع webroot مع
/var/www/discourse/publicكمجلد. - تثبيت الشهادات في المجلد
/shared/ssl/الذي يتوقعهnginx. في نفس الوقت، يقوم بإعداد مهمة مجدولة (cron job) لتجديد الشهادات تلقائيًا. سيتم تجديد شهاداتك تلقائيًا. لا يحدث شيء إذا لم تنتهِ الشهادات من الصلاحية. إذا انتهت صلاحية شهادة ما، فستتلقى بريدًا إلكترونيًا من Let’s Encrypt على عنوان البريد الإلكتروني الذي قدمته أثناء الإعداد. - تعيين
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.