تم نشر Discourse على AWS ويقوم بجلب الأصول من عنوان URL الخاص بقاعدة البيانات

مرحبًا بالطاقم

أنا أشغّل Discourse على AWS ECS. عند محاولة تشغيل التطبيق، يفشل تبويب وحدة التحكم في المتصفح مع الروابط أدناه. هل فاتني أي تغيير في الإعدادات؟

محتوى مختلط: تم تحميل الصفحة في ‘https://discuss-stage.tllms.com/finish-installation/register’ عبر HTTPS، لكنها طلبت أيقونة موقع غير آمنة ‘http://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_32x32.png’. تم حظر هذا الطلب؛ يجب تقديم المحتوى عبر HTTPS.

في الرابط أعلاه، هذا هو نقطة نهاية قاعدة البيانات الخاصة بي: discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com.

لقد قمت بتوفير نقطة النهاية المذكورة أعلاه في ملف database.yml.

لقد نشرت Discourse على ECS باستخدام Docker. عند محاولة الوصول إلى التطبيق، يقوم متصفح الشبكة بجلب الموارد من الروابط أدناه بدلاً من https://discuss-stage.tllms.com/

هذه نقطة نهاية RDS الخاصة بنا discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com المستخدمة في ملف database.yml.

محتوى مختلط: تم تحميل الصفحة في ‘https://discuss-stage.tllms.com/’ عبر HTTPS، لكنها طلبت أيقونة موقع غير آمنة ‘http://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_32x32.png’. تم حظر هذا الطلب؛ يجب تقديم المحتوى عبر HTTPS.

تم رفض تحميل السكربت ‘https://discuss-stage.tllms.com/assets/browser-detect.js’ لأنه ينتهك التوجيه التالي لسياسة أمان المحتوى: “script-src https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/logs/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/sidekiq/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/mini-profiler-resources/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/assets/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/brotli_asset/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/extra-locales/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/highlight-js/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/javascripts/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/plugins/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/theme-javascripts/ https://discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com/svg-sprite/”. لاحظ أنه لم يتم تعيين ‘script-src-elem’ صراحةً، لذا تم استخدام ‘script-src’ كبديل.

يبدو أن هناك سوء تكوين في خزانة S3 الخاصة بك.

كيف قمت بتثبيت Discourse؟ هل استخدمت تثبيت Discourse القياسي الرسمي أم ربما كان استكشاف أخطاء تثبيتات Bitnami وإصلاحها؟

أراهن على أن المشكلة في إعدادات CDN غير صحيحة.
هل يمكنك مشاركة ملف config/discourse.conf؟
كما يُرجى البحث في إعدادات موقعك عن c0fbtc لمعرفة ما إذا كانت هناك نتائج مطابقة.

مرحبًا جايف

لقد قمت بتثبيته كتطبيق ريلز عادي. فيما يلي الخطوات التي اتبعتها:

  1. استنساخ مستودع GitHub.
  2. تثبيت الـ gems باستخدام Bundle.
  3. تعديل ملف database.yml للإشارة إلى نقطة نهاية AWS RDS.
  4. تعديل ملف discourse.conf للإشارة إلى AWS Elasticache.
  5. لم أستخدم أي إعدادات لحوض S3.
  6. نسخت الكود داخل حاوية Docker ونشرتها على ECS.

لم أستخدم صورة Docker الجاهزة. لقد قمت ببناء صورة Docker بنفسي.

حذف ملف التكوين

يبدو ذلك غير صحيح. لو كنت مكانك، لفحصت ما إذا كانت قاعدة البيانات محلية بالفعل ولها اسم غريب.

أعتقد أنه يجب أن يبدو هكذا:

# عنوان المضيف لخادم قاعدة البيانات
# تم تعيينه فارغًا ليحاول استخدام المنافذ (sockets) أولاً
db_host = discourse-test.c0fbtc1q6bvm.ap-south-1.rds.amazonaws.com
# اسم قاعدة البيانات التي يعمل عليها discourse
db_name = default

ما هو استخدام S3؟ وهل أحتاج إلى إنشاء ملف discourse.conf منفصل دون إجراء أي تغييرات في ملف discourse_defaults.conf؟

هذا لا علاقة له بـ S3.

يتم إنشاء ملف discourse.conf من ملف app.yml الخاص بك، لذا يجب إجراء التعديلات هناك وإعادة البناء.

ريتشارد

لقد قمت باستنساخ discourse من GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub ولم أستطع العثور على ملف app.yml في أي مكان في المستودع.

كل إعدادات discourse تشير إلى discourse_docker، وهو ما لا أريد استخدامه. أريد بناء حاويتي الخاصة.

(يجب أن أحذرك من محاولة إعادة اختراع عجلة تعمل بشكل مثالي. كما أن بعض الأشخاص هنا لن يكونوا متحمسين لدعمك لأن ذلك لا يفيد المجتمع).

بغض النظر عن ما تفعله، يجب في النهاية التأكد من أن هذه القيم تنتهي بشكل صحيح في ملف discourse.conf. إذا قمت بتعديله يدويًا، فيجب على الأقل وضع اسم مضيف AWS في db_host وترك db_name على القيمة الافتراضية default.

مرحبًا ريتشارد،

أنا في نفس الفريق مع فيجا. حالة الاستخدام المحددة التي نسعى لمعالجتها هنا هي نسخ مستودع Discourse ووضعه في حساب GitHub الخاص بشركتنا. من هناك، سنبني وننشر على AWS. السبب وراء رغبتنا في وجوده في GitHub الخاص بنا هو الحفاظ على المرونة في إجراء التغييرات وفقًا لمتطلباتنا. نود المساهمة مرة أخرى حيثما كان ذلك ممكنًا. نظرًا لأننا لم نجد ملف Docker في المستودع العام لـ Discourse، فقد انتهينا بإنشاء ملفنا الخاص لبناء صورة Docker. علاوة على ذلك، نستخدم GitHub Actions لنشر Docker إلى خدمة AWS ECS.

بالنظر إلى متطلباتنا، هل تعتقد أنه كان بإمكاننا اتباع نهج آخر؟

شكرًا لك.

نعم. توصيتي هي استخدام مستودعات discourse و discourse_docker الرسمية وتنفيذ جميع التغييرات كإضافات.

سيحميك استخدام مستودع discourse_docker الرسمي من مشاكل مثل تلك المذكورة في هذا الموضوع، كما أن عدم إنشاء نسخة منقحة من Discourse والاحتفاظ بجميع تعديلاتك في إضافات منفصلة سيمنعك عن الابتعاد عن الفرع الرئيسي ويوفر عليك بذل الكثير من الجهد لنقل جميع التغييرات من المصدر إلى نسختك المنقحة.

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

عند استخدام مستودع Discourse الرسمي، يمكنك أيضًا التفكير في الاستضافة المدارة، وسيكون الناس أكثر حماسًا (أو أقل تكلفة) عند الحاجة لمساعدتك.

شكرًا على مساهماتكم. لديّ بعض الأسئلة المتابعة:

  1. في نهج الإضافات، هل هناك احتمال أن نواجه اختناقًا في بعض المتطلبات التي قد لا يمكن تحقيقها عبر الإضافات؟ على سبيل المثال، إدارة أدوار المستخدمين بطريقة مخصصة للغاية؟
  2. كيف سيبدو خط الأنابيب من البداية إلى النهاية إذا اعتمدنا على discourse_docker ونشرناه في حساب AWS الخاص بنا على ECS؟ كما ذكرت، نستخدم حاليًا GitHub Actions للنشر على ECS في حساب AWS الخاص بنا. ما هي استراتيجية النشر التي يمكننا استخدامها من المستودع العام مع الحفاظ على أمان بيانات اعتماد AWS؟
  1. تدعم الإضافات تعديل الكائنات في Ruby (Monkey Patching) وتوسيع كائنات Ember، مما يجعل كل شيء ممكنًا في النهاية.

  2. هذا ليس من تخصصي، لذا سأترك الأمر لشخص آخر.

ابدأ دائمًا بنسخة من مستودع discourse_docker. أنشئ ملف app.yml بداخله.

استخدم أمر التمهيد (bootstrap subcommand) في سكربت launcher في نسختك العاملة من discourse_docker لإنشاء صورة Docker. ارفع صورة Docker إلى مستودع Docker. انشر صورة Docker هذه في أي مكان تفضله.

اكتب الإضافات إذا كنت بحاجة إليها. قم بسرد الإضافات المخصصة الخاصة بك في ملف app.yml مثل الإضافات الأخرى.

@ashish_rawat @Vijay_Vantipalli كيف قمت بإعداد Discourse باستخدام Docker في ECS؟ عندما أجرب ذلك على خادم EC2، يعمل Discourse بشكل جيد. لكن عندما أدفع صورة Docker الخاصة بـ Discourse إلى مستودع ECR، وأُنشئ مهمة من هذه الصورة، لا يتم تشغيل الحاوية — أحصل فقط على كود الخروج 1. عالق في هذه المشكلة منذ أكثر من أسبوع. سأكون سعيدًا جدًا لو سمعت نصيحتكم. شكرًا لكم!

تم إنشاء مثيل RDS منفصل وعنقود ElastiCache لـ Redis لهذا الغرض.

حاول فحص الحجج الموجودة في ./launcher start-cmd app — فقد يكون هناك شيء ما قد فاتك نسخه إلى ECS.

شكرًا لك على الاستجابة السريعة! أعتقد أنني فقط أغفلت شيئًا بسيطًا. سأحاول القيام بذلك.

آسف إذا كان هذا خارج نطاق عملك. لقد حاولت إضافة “-e” التي وجدتها في تطبيق start-cmd، لكن هناك حججًا أخرى مثل ما يلي:

+ /usr/bin/docker run --shm-size=512m -d --restart=always 
-h <server ip> 
-e DOCKER_HOST_IP=172.17.0.1 
--name app -t -p 80:80 
-v /var/discourse/shared/web-only:/shared 
-v /var/discourse/shared/web-only/log/var-log:/var/log 
--mac-address <address> local_discourse/app /sbin/boot

هل -v مطلوبة حقًا؟

نعم، هذه نقاط تركيب أحجام. من الضروري تمامًا أن يتوفر مساحة تخزين في /shared داخل الحاوية لـ Discourse.