لا يمكنني تعيين nginx: [emerg] لا يمكن تحميل الشهادة "/var/discourse/shared/standalone/ssl/ssl.crt": فشل BIO_new_file()

(SSL: خطأ:02001002:مكتبة النظام:fopen:لا يوجد ملف أو دليل:fopen('/var/dis (…)
أتبع الدليل، لكنني لا أستطيع العثور على أي شيء يتعلق بهذا الخطأ

مرحبًا @slivo

لنرى ناتج الأمر التالي:

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

هل هناك أي أدلة؟

cd ssl: لا يوجد ملف أو دليل بهذا الاسم

مرحبًا @slivo

هذا يشير إلى أن إعداداتك لـ Lets Encrypt لم تنشئ الشهادات عند إعادة بناء الحاوية آخر مرة.

بالطبع، أنا متأكد من أنك تعرف ذلك بالفعل!

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

./launcher rebuild app

أعدت بنائها مرة أخرى. قمت بإعدادها وفقًا للإرشادات. تم تعيين شهادة SSL معتمدة (/etc/nginx/sites-enabled/discourse.conf)، لكنني أواجه خطأً:

SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE

لا يمكنني تشغيل nginx على الإطلاق.

 nginx.service: Control process exited, code=exited status=1
 nginx.service: Failed with result 'exit-code'.

Process: 3840 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 25108 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=1/FAILURE)

// فشل بدء تشغيل خادم ويب عالي الأداء وخادم وكيل عكسي.

مرحبًا @slivo

شكرًا لك على التحديث بخصوص إعداد هذا.

هل تقوم بإعداد Discourse باستخدام بناء Docker القياسي دون وجود خادم وكيل عكسي خارج الحاوية؟

نعم، وأيضًا أستخدم هذا الدليل Run other websites on the same machine as Discourse

مرحبًا @slivo

في الرابط أعلاه، هذا ملخص لتشغيل Discourse في حاوية Docker مع تعريض التطبيق عبر مقبس UNIX إلى وكيل عكسي.

في هذه الحالة، لا يجب تمكين SSL في ملف yml الخاص بالحاوية؛ ويجب عليك تكوين SSL باستخدام Let’s Encrypt عبر certbot خارج الحاوية على الوكيل العكسي فقط.

يبدو الهيكل العام عالي المستوى كالتالي:

مستخدمو الويب <-- HTTPS --> وكيل عكسي <-- HTTP --> حاوية Docker

يرجى نشر ملف yml الخاص بك مع إخفاء كلمات المرور وعناوين البريد الإلكتروني باستخدام xxxx؛ ودعنا نرى ما لديك.

شكرًا لك.

لكن الآن لم أفهم. ثم قمت بإنشاء شهادة جديدة باستخدام certbot. ولديها هنا كما يلي:

/etc/letsencrypt/live/myadress.com/fullchain.pem
تم حفظ ملف المفتاح الخاص بك في:
/etc/letsencrypt/live/myadress.com/privkey.pem

هل يجب علي تغيير العنوان في هذا الملف أم في /etc/nginx/sites-enabled/discourse.conf أم أنني أقوم بذلك بشكل خاطئ تماماً؟

مرحبًا @slivo

عند إعداد وكيل عكسي أمام تطبيق آخر باستخدام مثيل nginx: يجب أن تكون دقيقًا جدًا بشأن موقع ملفات الإعداد، هل هي داخل الحاوية أم خارجها؟

لا أعرف ما إذا كنت أفهم تمامًا. أريد فقط تشغيل discourse خلف Nginx. ليس لدي تطبيق آخر على الخادم، لكنني أريد القيام بذلك للحصول على حماية أكبر من الخارج.

مرحبًا @slivo

أتفهم إحباطك. دعني أشرح لك ذلك بلطف.

في إحدى منشوراتك أعلاه، تقول:

/etc/letsencrypt/live/myadress.com/fullchain.pem
تم حفظ ملف مفتاحك في:
/etc/letsencrypt/live/myadress.com/privkey.pem

لم تذكر ما إذا كنت داخل حاوية Docker أم خارجها.

كما تعلم، يعمل nginx (في حالتك) مباشرة على المضيف وأيضًا داخل التطبيق (حاوية Docker).

عندما تنشر:

/etc/letsencrypt/live/myadress.com/fullchain.pem
تم حفظ ملف مفتاحك في:
/etc/letsencrypt/live/myadress.com/privkey.pem

كيف يمكننا، كأشخاص خارجيين، معرفة ما تقصده بالضبط إذا لم تنشر المعلومات الكاملة؟ هل هذا الإعداد داخل الحاوية أم خارجها؟ يمكننا أن “نخمن” و"نفترض" أنك تتحدث عن الإعداد خارج الحاوية، ولكن نظرًا لأنك لا توفر هذه التفاصيل، فلا يمكننا التأكد من ذلك. تجربتي هي أن أقصر طريق بين المشكلة والحل هو عدم افتراض أي شيء والانتباه جيدًا للتفاصيل.

بالإضافة إلى ذلك، لم تنشر ملف yml الخاص بك. كما لم تنشر ملفات إعدادات nginx خارج الحاوية. لذلك، لا يمكننا “رؤية” ما تفعله فعليًا في إعداداتك.

آمل أن يكون هذا مفيدًا.