قد أحتاج إلى تقسيم هذا إلى ثلاثة منشورات منفصلة، لكنها مترابطة، لذا سأبدأ بواحد.
قبل بضعة أيام، استخدمت هذا البرنامج التعليمي (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) تقريبًا كلمة بكلمة وقمت بترحيل خادم Discourse المستقل الخاص بي على Digital Ocean إلى خادمين داخل موازن تحميل، حتى الآن كل شيء على ما يرام.
ثم اتبعت هذا البرنامج التعليمي (Configure an S3 compatible object storage provider for uploads)، ولكن بعد إعادة بناء Discourse من سطر الأوامر، كان موقع Discourse الخاص بي يعرض شاشة فارغة فقط. نظرت في Inspector في المتصفح لأجد أن المتصفح كان يمنع كل المحتوى الخاص بي لأنه كان يتم تقديمه من HTTP وليس HTTPS. هذا ربما لأن موازن التحميل ينهي SSL، لذا فإن كل شيء خارجي هو HTTPS، ولكن الخوادم نفسها تعمل على HTTP.
في هذه المرحلة، قمت بتعطيل خوادمي تمامًا مرة أخرى، محاولًا جعلها تعمل مع HTTPS داخل موازن التحميل، لكن ذلك لم يكن ممكنًا ببساطة. لم أتمكن من جعل Digital Ocean Space/CDN يعمل مع S3/CDN وفقًا لهذا البرنامج التعليمي (Configure an S3 compatible object storage provider for uploads). لقد مررت به بدقة وفحصت كل جانب عدة مرات، لكنه لم يعمل. الطريقة الوحيدة التي تمكنت بها من إعادة بناء Discourse كانت إزالة المعلمة DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com من app.yml، ولكن بعد ذلك، حتى لو تم بناؤه، لم أتمكن من جعل الخادم يستجيب. حصلت إما على خطأ 503 server not responding أو خطأ عادي في المتصفح server not responding أو server disconnected. لقد اختلف ذلك بناءً على إعدادات موازن التحميل و DO Space/CDN التي كنت أجربها. لقد جربت كل تركيبة ممكنة من الإعدادات ولم يُمكّنني أي منها من تقديم صفحة.
عندما تركت المعلمة DISCOURSE_S3_ENDPOINT في مكانها، حصلت على الخطأ التالي أثناء إعادة بناء Discourse، ولكنه اختفى عند التعليق على معلمة S3_ENDPOINT.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
تمت مزامنة جميع ملفاتي إلى S3، لذلك أعتقد أنه من الآمن افتراض أن مفتاح الوصول كان جيدًا، وأن المشكلة كانت ناجمة عن معلمة S3_ENDPOINT بطريقة ما.
اليوم، استسلمت لمحاولة جعل المحاولة السابقة تعمل، واستعدت نسخة احتياطية من خوادمي التي كانت فقط موازنة تحميل مع HTTP فقط، وأخيرًا تمكنت من جعلها تعمل مرة أخرى عن طريق القيام بهذا البرنامج التعليمي (Set up file and image uploads to S3) ولكن هذه المرة قمت بتحرير إعدادات S3 عبر لوحة تحكم Discourse Admin بدلاً من تحرير app.yml بالإعدادات في البرنامج التعليمي الموصى به. لقد نجحت أخيرًا، ولكن الاختلاف المهم هو أنني تركت إعدادات S3 CDN عمدًا. لقد أكدت أن الصور التي تم تحميلها إلى المشاركات يتم تخزينها على S3 ويمكنني عمل نسخة احتياطية من Discourse مباشرة إلى S3، وهذا كل ما أريده حقًا، ولكن لدي الآن ثلاث مشكلات تطاردني، واحدة حرجة، واثنتان يمكن تجاهلهما، على الرغم من أنني أود التأكد من ذلك هنا إذا أمكن.
لذلك، المشكلة الحرجة هي أن المستخدمين لم يعودوا قادرين على تسجيل الدخول باستخدام زر تسجيل الدخول إلى Patreon على صفحة تسجيل الدخول إلى Discourse. يتم عرض هذه الرسالة:
Sorry, there was an error authorizing your account. Please try again.
عنوان URL هو هذا:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
سأكون ممتنًا جدًا لبعض النصائح حول ما يمكنني تجربته لجعل هذا يعمل، ولكن مرة أخرى، أتساءل عما إذا كان هذا بسبب أن الخوادم داخليًا لا تعمل بنظام HTTPS. كما ترى من عنوان URL، خارجيًا هي تعمل بنظام HTTPS، لذا من الصعب التأكد. أعتقد أنني آمل أن يكون لدى شخص ما هنا خبرة في موازنة التحميل من Digital Ocean وما إلى ذلك مع Discourse.
المشكلتان الأخريان يتم الإشارة إليهما الآن في لوحة تحكم المسؤول على النحو التالي:
بعض النصائح بناءً على إعدادات موقعك الحالية
- يستخدم موقعك شهادة SSL. ولكن لم يتم تمكين
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)بعد في إعدادات موقعك. - تم تكوين الخادم لتحميل الملفات إلى S3، ولكن لا يوجد S3 CDN مُكوّن. يمكن أن يؤدي هذا إلى تكاليف S3 باهظة وأداء موقع أبطأ. انظر “استخدام مساحة التخزين للكائنات للتحميلات” لمعرفة المزيد.
لذلك، لا أمانع في محاولة تشغيل force_https، ولكني قلق من أنه سيمنعني من الوصول إلى خادمي لأن الخوادم الداخلية التي يتم موازنة تحميلها لا تعمل بنظام HTTPS وبسبب المشاكل التي واجهتها بالأمس، أنا متردد في قضاء اثنتي عشرة ساعة أخرى أضرب رأسي في الحائط وأشاهد عمليات إعادة بناء لا حصر لها مدتها 15 دقيقة لـ Discourse دون جدوى. مرة أخرى، إذا عرف أي شخص أنه من الآمن تشغيل force_https مع تكويناتك، فيرجى إخباري.
والقضية الثانية، مرة أخرى، لم تسر بشكل جيد عبر المعلمات المضافة إلى ملف app.yml، لذلك أنا متردد في محاولة هذا مرة أخرى أيضًا. هل يمكنك تأكيد أن هذا سيفعل نفس الشيء مثل المعلمات المضافة إلى ملف app.yml؟ إذا كان الأمر كذلك، فسأتجاهل هذه الرسالة الثانية فقط. على العكس من ذلك، إذا كان من الآمن تجربته لسبب ما، فأخبرني وسأقوم بعمل نسخة احتياطية وأجربها.
آسف على المنشور الطويل. آمل أن تتمكن من معرفة ما أحاول الحصول على مشورة بشأنه.