مشاكل مع AWS CDN و S3

,

@Falco هل هذا لا يزال هو الحال؟ أعتقد أنني قرأت شيئًا عن مشكلات حديثة في استخدام AWS ولكني لا أستطيع العثور على الموضوع مرة أخرى.

أواجه العديد من المشكلات في استخدام AWS S3 باتباع المواضيع ذات الصلة كأدلة.

النسخ الاحتياطي يعمل كما هو متوقع ولكن استخدام Cloudfront كشبكة توصيل محتوى (CDN) أو إلغاء التعليق على DISCOURSE_USE_S3 و/أو DISCOURSE_S3_BUCKET يتسبب في ظهور مؤشر تحميل دائم.

أشتبه في أن لدي شيئًا تم تكوينه بشكل خاطئ في حاوية التحميلات و/أو توزيع Cloudfront ولكني لم أتمكن من العثور على خطأ. كل من حاوية التحميلات وحاوية النسخ الاحتياطي تقع خلف التوزيع والنسخ الاحتياطي يعمل بشكل جيد، فماذا يعني ذلك؟؟؟

discourse-cdn.repealobbba.org CNAME —> amazonassigned.cloudfront.net

DISCOURSE_CDN_URL: https://discourse-cdn.repealobbba.org

## S3 storage config
#  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: ACCESS_KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: SECRET_ACCESS_KEY
  DISCOURSE_S3_CDN_URL: amazonassigned.cloudfront.net  or
#  DISCOURSE_S3_BUCKET: repeal-obbba-discuss-uploads
  DISCOURSE_S3_BACKUP_BUCKET: repeal-obbba-discuss-backups
  DISCOURSE_BACKUP_LOCATION: s3

بالإضافة إلى ذلك، فإن إضافة هذا إلى التكوين

    after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

يعطي خطأ فشل في التهيئة (FAILED TO BOOTSTRAP)

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets فشل مع الإرجاع #<Process::Status: pid 8484 exit 1>
مكان الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
فشل التنفيذ مع المعلمات {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
فشل التهيئة برمز خروج 1
** FAILED TO BOOTSTRAP ** يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحد.

كالعادة… أي أفكار أو اقتراحات ستكون موضع تقدير.

تحتاج إلى إضافة المقطع الذي يقوم بتحميل الأصول إلى S3.

أوه. أنا مخطئ، أنت تقوم بذلك.

هذا يشير إلى وجود خطأ ما في إعدادات الحاوية (bucket).

أعتقد أنه كان هناك موضوع سابق يقوم بإنشاء ملف JSON لتكوين حاوية، لكني لا أعرف ما إذا كان لا يزال موجودًا.

إعجاب واحد (1)

أتفق
على الرغم من عدم استخدام سياسة حاوية (bucket policy) على حاوية النسخ الاحتياطي، إلا أن إضافة سياسة إلى حاوية التحميلات أدت إلى إزالة فشل التمهيد (bootstrap failure).
يمكن العثور على ملف json الخاص بالسياسة في CloudFront > التوزيعات (Distributions) > التوزيع الخاص بك (your distribution) > تحرير المصدر (Edit origin)
Screenshot 2025-12-10 141220

لسوء الحظ، يستمر رمز التحميل الدائم (perpetual throbber).

تعديل ملكية الكائن (Object Ownership) و قوائم التحكم في الوصول (ACLs) لا يغير النتيجة.
Screenshot 2025-12-10 141936

الإعدادات الحالية. أعتقد أنها الإعدادات الموصى بها أو ربما أنا مرتبك.
Screenshot 2025-12-10 141702
Screenshot 2025-12-10 141835

بعد تغيير الإعدادات، تحتاج إلى تشغيل مهمة rant لتحميل الأصول.

أيضًا، يمكنك فتح وحدة تحكم المطور (developer console) والتحقق مما إذا كانت الملفات التي يحاول الوصول إليها موجودة في الحاوية (bucket) أو ما إذا كانت هناك مشكلة في شبكة توصيل المحتوى (cdn).

إعجاب واحد (1)

شكرًا لمتابعتك…

نعم، يتم تشغيل مهام rake، ولا يحدث أي فرق.

./launcher enter app
rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

لا يزال رمز التحميل (Throbber) مستمرًا.

rake uploads:migrate_to_s3 ينتج خطأ

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

يُظهر مدقق CDN واحد على الأقل أن discourse-cdn.repealobbba.org → Amazon CloudFront

وما زالت وحدة التحكم تُظهر أن الملفات والصور الخاصة بـ js يتم استدعاؤها من شبكة توصيل المحتوى (CDN)
Screenshot 2025-12-10 192413

يتم استدعاء الأصول من شبكة توصيل المحتوى (cdn)، ولكن هل هي موجودة هناك؟ إذا لم تكن كذلك، فهل هي في الحاوية (bucket)؟ وهل يمكن الوصول إليها من الحاوية؟

من المحتمل أن تكون لديك بعض عمليات الرفع في حاوية مختلفة أو شيء يمنعها من أن تكون في المكان المتوقع. إذا كان الأمر كذلك، فستحتاج إلى إصلاحها يدويًا كما هو مذكور. ستحتاج إلى الوصول إلى وحدة التحكم (console) ورؤية مكانها في سجل الرفع.

هل تبدو مهمة رفع الأصول (upload assets task) وكأنها تعمل؟ يستمر رمز التحميل (throbber) في العمل لأن الأصول الأخرى لا يتم تحميلها.

إعجاب واحد (1)

نعم إنها موجودة، الملفات موجودة في الحاوية (bucket) تحت اسم assets\nيمكن الوصول إليها: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png\n\nهناك حاويتان فقط، uploads و backups. النسخ الاحتياطية تعمل بشكل جيد.\n\nأعطت rake s3:upload_assets الخطأ التالي: \nrake aborted!\nAws::S3::Errors::AccessControlListNotSupported: The bucket does not allow ACLs (Aws::S3::Errors::AccessControlListNotSupported)\n\nقمت بالتبديل إلى تمكين قوائم التحكم في الوصول (ACLs) وشغلت مرة أخرى s3:upload_assets تعديل: uploads:migrate_to_s3 ولكن…\nFileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)\n\n??? You need to fix this manually. (FileStore::ToS3MigrationError)

يبدو أنك أصلحت الحاوية (bucket) وهي الآن قادرة على تحميل الأصول (assets)، لذا يجب أن يعمل الموقع الآن. التعامل مع عمليات التحميل التي لن تتم ترحيلها هي مشكلة أخرى (معقدة).

إليك أحد الأصول التي تحاول تقديمها:

https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

الشهادة (cert) معطوبة، لذا هذه هي مشكلتك. هناك شهادة، لكنها لا تتطابق مع عنوان URL.

كما اقترحت سابقًا، انظر إلى علامة تبويب الشبكة (network tab) في أدوات المطور (dev tools) في متصفحك وشاهد هذا:

إعجاب واحد (1)

تعديل من الأعلى
تم التبديل إلى تمكين قوائم التحكم في الوصول (ACLs) وتشغيل s3:upload_assets تعديل: uploads:migrate_to_s3 مرة أخرى

يكتمل s3:upload_assets الآن دون مشاكل

أرى أخطاء الشبكة. هل الشهادة مشكلة من AWS؟

شكراً جزيلاً لك مرة أخرى على وقتك في هذا الأمر!!

نعم. الشهادة لا تتطابق مع اسم المضيف. إنها تتطابق مع *.cloudfront.net

هذا يعمل: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

هذا لا يعمل: https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

هذا يعمل: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/start-discourse-6f03a463.br.js

لذا تحتاج إلى تغيير شبكة توصيل المحتوى (CDN) الخاصة بـ s3 إلى https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com – أوه، أعتقد أن هذا هو عنوان الحاوية (bucket)، لذا لن يكون مثاليًا، ولكنه سيعمل.

إعجاب واحد (1)

لست متحمسًا جدًا لـ “لذا لن يكون مثاليًا” :wink:

أبحث في أسماء النطاقات البديلة لـ AWS كحل محتمل.

ربما أنا فقط، ولكن إضافة شبكة توصيل محتوى (CDN) يستخدمها @Discourse داخليًا لا ينبغي أن تكون صعبة للغاية وتتطلب الدعم اللطيف من أشخاص مثل @pfaffman

ربما يمكن لـ @Falco أو @sam و @team (لا يمكن ذكر الفريق) التدخل؟؟

نعم، جميع المواقع التي نستضيفها تستخدم مزيج S3 و CloudFront. حتى هذا الموقع الذي تتصفحه الآن.

إعجابَين (2)

شكرًا للتأكيد! بعد رؤية هذا، قمت بإعادة ضبط DISCOURSE_S3_CDN_URL: إلى amazonassigned.cloudfront.net على أمل أن يحل مشكلات الشهادة وعنوان URL.
Screenshot 2025-12-11 133250

أعدت البناء وأعدت تشغيل جميع أوامر rake المذكورة في الوثائق.
rake posts:rebake
rake uploads:migrate_to_s3 لا يزال يولد FileStore::ToS3MigrationError
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

لا يزال الموقع لا يعمل.

أي اقتراحات؟

اتضح أن هذا كان مفيدًا.
Screenshot 2025-12-12 001849