تكوين موفر تخزين كائنات متوافق مع S3 للتحميلات

هل سيتم إضافة دعم/توافق Contabo S3؟ أم أن شخصًا ما وجد حلاً بديلاً لجعله يعمل؟

إعجابَين (2)

نحن، القائمون على صيانة Discourse، ندعم AWS S3 فقط. تم اختبار المزودين المدرجين هنا من قبلنا أو من قبل المجتمع لمعرفة ما إذا كانوا يطبقون ما يكفي من واجهة برمجة تطبيقات S3 لتكون متوافقة مع Discourse.

وفقًا للموضوع الأصلي، اختبر @tuxed خدمة Contabo ووجد أنها غير كافية. يقع على عاتق Contabo تطوير امتثال تنفيذها لواجهة S3، إذا اعتبروا ذلك متوافقًا مع مصالحهم التجارية، وليس شيئًا يمكننا القيام به.

4 إعجابات

هل هذا لا يزال به خلل؟ لماذا شبكة توصيل المحتوى الخاصة بـ Digitalocean ليست جيدة؟

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

هل اتبعت الروابط؟

يبدو أن شبكة توصيل المحتوى (CDN) لا تعرف البيانات الوصفية. ولكن يمكنك تجربتها ومعرفة ما إذا كانت تعمل! أخبرنا إذا قمت بذلك. كنت أتساءل عما إذا كان قد تم إصلاحها في اليوم الآخر. بالنظر إلى الوثائق، لن أجربها بنفسي في أي وقت قريب.

إعجابَين (2)

أبحث عن طريقة سهلة لإضافة دعم شبكة توصيل المحتوى (CDN) إلى منتداي على DigitalOcean. إذا كان S3 أسهل، فسأختار هذا الخيار.

لا أريد المخاطرة بإعداد لم يعمل بشكل جيد من قبل.

إعجابَين (2)

الحل الموصى به هو ببساطة عدم استخدام شبكة توصيل المحتوى الخاصة بهم. يمكنك استخدام Spaces، إذا اتبعت التعليمات أعلاه، وشيء مثل bunny.net لشبكة توصيل المحتوى. إنها رخيصة وسهلة.

AWS S3 هو ما تستخدمه cdck، لذا فهو مُختبر ومدعوم بشكل أفضل قليلاً، ولكن ما لم تكن بارعًا بالفعل في AWS، فإن مستودع Spaces هو حل جيد. فقط لا تستخدم شبكة توصيل المحتوى الخاصة بـ Digital Ocean.

إعجابَين (2)

لقد مررت بهذا للتو - إعداد شبكة توصيل المحتوى (CDN)، مع الاحتفاظ بالصور محليًا في الوقت الحالي - أولاً مع Fastly، ثم شبكة أخرى لا أتذكرها. استقر الأمر على Bunny.net. سهلة الإعداد للغاية. لديهم دليل إرشادي خاص بـ Discourse. نحن نستضيف أنفسنا في DigitalOcean مع أكثر من 100 جيجابايت من الصور. معدل نجاح ذاكرة التخزين المؤقت بنسبة 65٪ ويتزايد.

إعجابَين (2)

هل تعمل سياسة tombstone فقط على aws.amazon؟

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

لا. إنها مشكلة في Backblaze فقط.

إعجابَين (2)

تم تقسيم 3 مشاركات إلى موضوع جديد: استكشاف حلول لمشاكل تحميل صور الملف الشخصي للمستخدم

حسنًا، من أين أبدأ؟ إذًا، أنا أستخدم Cloudflare للتخزين المؤقت ونظام أسماء النطاقات (DNS)، و Backblaze B2 للتخزين. تمكنت من جعله يعمل، ولكن بشكل جزئي فقط. أثناء عملية ./launcher rebuild app، رأيت أنه يقوم بتحميل الأصول، لذلك كنت متحمسًا جدًا لأنه بدا وكأنه يعمل. بعد اكتمال إعادة البناء بنجاح، لم أتمكن من الوصول إلى الموقع. أحصل فقط على بعض النقاط المتحركة في منتصف الصفحة.

بناءً على مقالة Backblaze Deliver Public Backblaze B2 Content Through Cloudflare CDN، قمت بتعيين سجل CNAME ممثل (Proxied) يشير إلى عنوان URL الأصلي الودود f000.backblazeb2.com يسمى gtech-cdn.

CNAME gtech-cdn –\u003e f000.backblazeb2.com

تتحدث المقالة أيضًا عن قواعد الصفحة (Page Rules)؛ لقد حاولت تشغيلها وإيقافها دون جدوى.

إليك عناصر التكوين ذات الصلة:

  DISCOURSE_HOSTNAME: mmhmm.com

  DISCOURSE_CDN_URL: https://mmhmm.com

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-west-000
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-000.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <secret>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <secret>
  DISCOURSE_S3_CDN_URL: https://gtech-cdn.mmhmm.com
  DISCOURSE_S3_BUCKET: gtech-uploads
  DISCOURSE_S3_BACKUP_BUCKET: gtech-uploads/backups
  DISCOURSE_BACKUP_LOCATION: s3

تحت قسم **hooks:**...

  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

أحد الأشياء التي تربكني هو ما يجب وضعه في المتغيرين DISCOURSE_S3_CDN_URL و DISCOURSE_CDN_URL. هل قمت بتعيينهما بشكل صحيح بناءً على المعلومات التي قدمتها؟

بالنظر إلى وحدة تحكم أدوات المطور في المتصفح، أحصل على أخطاء 404 على نصوص .js البرمجية. لا يبدو أن عنوان URL يتم بناؤه بشكل صحيح. ألا ينبغي أن يحتوي على /file/<اسم_الحاوية> فيه قبل /assets؟ إذا أضفت ذلك يدويًا لإنشاء عنوان URL صحيح، فإنه يعمل:

https://gtech-cdn.mmhmm.com/file/gtech-uploads/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.br.js

شكرًا على أي مساعدة، أقدرها كثيرًا!!!

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

لا يتم حل https://gtech-cdn.mmhmm.com، لذا فهذا هو أول ما يجب إصلاحه. .
لست متأكدًا من أنه يمكنك استخدام cloudflare كشبكة توصيل محتوى (CDN) بهذه الطريقة، ولكن ربما أكون مخطئًا.

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

عذرًا، كان يجب أن أذكر أن mmhmm.com هو نطاق وهمي. إنه يستجيب لـ ping.

فيما يتعلق بعدم إمكانية استخدام Cloudflare كشبكة توصيل محتوى (CDN)، أعتقد أنني لا أفهم. المقالة التي ربطتها article هي بوضوح لاستخدامها كشبكة توصيل محتوى. إذا لم يكن هذا صحيحًا، فمرة أخرى، ما هي القيم التي يجب استخدامها في المتغيرين DISCOURSE_S3_CDN_URL و DISCOURSE_CDN_URL؟

مع خالص التقدير،

إذا قدمت عناوين URL وهمية، فلن تحصل إلا على إجابات وهمية.

هل يخدم عنوان URL البيانات المتوقعة؟ هل يمكنك استردادها من عنوان URL للمنتدى؟

أعتقد أن شبكة توصيل المحتوى S3 يجب أن تعمل. إنها تستخدم عنوان URL للمنتدى لشبكة توصيل المحتوى الخاصة بالمنتدى، ولست متأكدًا من ذلك.

شبكة توصيل المحتوى العادية لها عنوان URL مختلف عن المنتدى، ويمكن لشبكة توصيل المحتوى الاعتماد على أن البيانات ثابتة بدلاً من الاضطرار إلى تخمين ما هو ديناميكي.

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

أبذل قصارى جهدي لعدم نشر معلوماتي عبر منتديات مختلفة، لذا يرجى عذر سريتي بشأن هذا الأمر.

يقع المنتدى على “https://mmhmm.com”، وهو سجل DNS لـ Cloudflare يتم تخزينه مؤقتًا (مُخزن مؤقتًا). قبل تكوين Discourse لاستخدام Backblaze، كان كل شيء يعمل بشكل صحيح.

https://gtech-cdn.mmhmm.com”، كما ذكرنا سابقًا، يتم حله ويستجيب أيضًا لـ ping. الهدف من سجل CNAME، f000.backblazeb2.com، يتم حله أيضًا. هذا هو عنوان URL الودي لـ B2 الذي يوجهك المقال إلى استخدامه. هذه ليست المشكلة رغم ذلك. المشكلة هي أن Discourse يقدم عناوين URL لملفات .js باستخدام عنوان URL غير صالح لن يعمل أبدًا لأنه يفتقد جزء “/file/gtech-cdn” من المسار. إذا أخذت أحد عناوين URL .js غير المكتملة هذه وأضفت المعلومات المفقودة إليها يدويًا، فسيتم تحميل نص ملف .js بشكل جيد.

بالطبع، ما زلت أحاول فهم كيف من المفترض أن يعمل كل هذا بهذين المتغيرين. أنا متعلم بصري وأحتاج حقًا إلى مخطط انسيابي أو شيء من هذا القبيل لمساعدتي في فهم ما يفترض أن يحدث مع التفاعلات بين Cloudflare CDN و Discourse و Backblaze B2.

شكرا لمساعدتك.

أوه، وسأحاول معالجة جملتك الأخيرة حول شبكة توصيل محتوى (CDN) عادية…

المقال من Backblaze يجعلك تنشئ قاعدتي صفحة لكل دلو (في حالتي، يتم استخدام دلو واحد)، والذي إذا كنت أفهمه بشكل صحيح فهو يشبه قاعدة جدار حماية في طريقة معالجته.

القاعدة 1 تقول أن https://gtech-cdn.mmhmm.com/file/*/* يجب أن تستخدم التخزين المؤقت القياسي (والذي تم تعيينه في مكان آخر في Cloudflare لمدة شهر واحد)
القاعدة 2 تعيد توجيه أي شيء (302 - إعادة توجيه مؤقت) لا يتطابق مع نمط القاعدة 1.

لذلك لن يتم تخزين كل شيء مؤقتًا بالذهاب إلى mmhmm.com… على الأقل هذا هو فهمي.

تحرير: لم ينجح هذا.
بالتركيز على هذا الأمر أكثر قليلاً، قررت لأسباب واضحة أن أستخدم عنوان URL الخاص بـ S3 كهدف لـ CNAME بدلاً من عنوان URL الودود الذي اقترحته مقالة Backblaze. أنا الآن أنتظر فقط انتهاء صلاحية TTL لسجل DNS.

فيما يتعلق بهذا الخطاف:

لا أرى شيئًا يتعلق بـ s3 في تفريغ rake --tasks. هل هذا لا يزال ذا صلة أم أنني أفتقد بعض المكونات الإضافية؟

أرى أيضًا هذا عند تشغيل الأمر يدويًا:
uploads:migrate_to_s3

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.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21: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
(See full trace by running task with --trace)
root@ubuntu-s-2vcpu-4gb-nyc2-01-app:/var/www/discourse#
root@ubuntu-s-2vcpu-4gb-nyc2-01-app:/var/www/discourse# rake uploads:migrate_to_s3
Please note that migrating to S3 is currently not reversible!

تم تقسيم 6 مشاركات إلى موضوع جديد: Cloudflare R2: إعداد التنقل ومعالجة أخطاء التكوين

يبدو أن Cloudflare يعمل الآن:

انظر Cloudflare R2: Navigating Setup and Handling Configuration Errors - #13 by pfaffman

إعجابَين (2)