@Falco - قد يكون من الجيد إضافة تحذير لـ Scaleway، بأنها تدعم 1000 جزء فقط للتحميل متعدد الأجزاء، بينما تدعم AWS 10,000. هذه ليست مشكلة للتحميلات العادية، ولكنها مشكلة لتحميلات النسخ الاحتياطي التي تتجاوز حجمًا معينًا حيث سيستخدم S3 SDK 10,000 جزء ما لم يتم تعديله يدويًا وسيفشل.
اكتشاف رائع! يرجى إضافته إلى ويكي OP إذا استطعت.
شكراً لك، أود أيضاً أن أضيف أنه يمكنك استخدام أي من هذه الأدوات للنسخ من سحابة إلى أخرى، وخاصة من وإلى التخزين الكائني المتوافق مع S3، على سبيل المثال، Rclone و Shargate و Gs Richcopy360 و GoodSync. كل هذه متوافقة مع السحب المماثلة.
لقد اكتشفنا مشكلة للتو، لا تسمح Cloudflare R2 بالقراءة العامة من عنوان URL لنقطة نهاية S3، بل فقط النطاق المخصص أو نطاق r2.dev عشوائي.
(التنزيلات الموقعة مسبقًا تعمل، فقط لا يوجد وصول عام مباشر مدعوم.)
لكن discourse يستخدم عنوان URL لشبكة توصيل المحتوى (CDN) فقط للصور المضمنة، وليس للتنزيلات المباشرة، التي تستخدم عنوان URL لنقطة نهاية S3.
هل هناك طريقة لجعله يستخدم عنوان URL لشبكة توصيل المحتوى (CDN) لجميع الملفات، أو فرض استخدام عنوان URL موقع مسبقًا؟
ذات صلة:
الحل البديل المذكور في هذا المنشور يعمل، إضافة ?dl=1 يصلح الأمر، لأنه يجبر discourse على استخدام عنوان URL موقع مسبقًا لـ S3.
Fixed in 2023-03-16 now R2 working with Discourse like charm with free plan
ولكن مع بعض التردد فشلت النسخ الاحتياطية بصمت وظلت النسخ الاحتياطية على الجهاز المحلي، مما أدى إلى امتلاء القرص. نظرت إلى أخطاء wasabi و Discourse ولم أجد أبدًا تفسيرًا من شأنه أن يجعل أيًا من الطرفين “يصلح” أي شيء.
أرى هذا أيضًا مع بعض التردد (كل بضعة أشهر) على الرغم من أن Discourse الخاص بي يعمل في AWS Lightsail وأقوم بالتحميل إلى AWS S3. لذلك لست متأكدًا من أن خطأ wasabi هو السبب.
هل سيكون من الممكن اكتشاف هذا الخطأ وتنبيه المسؤول؟ أنا أتحقق من مساحة القرص وأزيل النسخ الاحتياطية القديمة عند الترقية ولكن في بعض الأحيان يكون ذلك متأخرًا جدًا ويتعطل المنتدى بسبب عدم وجود مساحة قرص.
أرى هذا أيضًا بشكل متكرر (كل بضعة أشهر) على الرغم من أن Discourse الخاص بي يعمل في AWS Lightsail وأقوم بالتحميل إلى AWS S3. لذلك لست متأكدًا من أن هذا خطأ wasabi.
أنا متأكد تمامًا من أن المشكلة كانت تحدث بسبب إعادة تشغيل نظام التشغيل التلقائية للتحديثات الأمنية أثناء تشغيل النسخ الاحتياطي. تأكد من جدولة عمليات إعادة تشغيل نظام التشغيل والنسخ الاحتياطي في أوقات مختلفة. كان ذلك بعد أن نقلت هذا الموقع من wasabi عندما توصلت إلى هذا التفسير، لكنني متأكد تمامًا من أن هذا هو السبب.
uptime يقول إنه يعمل منذ 300 يومًا، لذلك لا أعتقد أن هذه هي المشكلة. ولكن على نفس المنوال، كان لدي نسخ احتياطية من Discourse مجدولة في الساعة 2:00 صباحًا ولقطات Lightsail في الساعة 2:30 صباحًا، لذلك ربما لم يكتمل التحميل في بعض الأحيان وتتسبب اللقطة في حدوث مشكلة. لقد فصلت العمليتين بساعة - سنرى ما إذا كان ذلك سيحدث فرقًا.
بغض النظر، أعتقد أنه من المعقول تحذير المسؤولين إذا فشل التحميل، لأي سبب كان.
أعتقد أن الوقت قد حان لإجراء ترقيات للنواة وإعادة التشغيل. ![]()
هل يمكن أن تكون ذاكرة الوصول العشوائي لديك تنفد؟
بعد تطبيق النسخ الاحتياطي عن بُعد لـ Backblaze، أرى هذا الخطأ في لوحة التحكم الخاصة بي:
تم تكوين الخادم لتحميل الملفات إلى S3، ولكن لم يتم تكوين S3 CDN. يمكن أن يؤدي هذا إلى تكاليف S3 باهظة وأداء أبطأ للموقع. راجع “استخدام تخزين الكائنات للتحميلات” لمعرفة المزيد.
لم أقم بتكوين تحميل الملفات، بل قمت فقط بتكوين النسخ الاحتياطي عبر هذا الإعداد:
DISCOURSE_S3_REGION: "s3.us-west-00X"
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_S3_ENDPOINT: https://s3.us-west-00X.backblazeb2.com
DISCOURSE_S3_ACCESS_KEY_ID: mykeyid
DISCOURSE_S3_SECRET_ACCESS_KEY: myaccesskey
DISCOURSE_S3_BUCKET: community-forum
DISCOURSE_S3_BACKUP_BUCKET: community-forum/backups
DISCOURSE_BACKUP_LOCATION: s3
هل فعلت شيئًا خاطئًا؟
يبدو أن هناك خطأ في التكوين، لاحظت عند محاولة تحميل ملف إلى منشور، تلقيت هذا الخطأ:
قيمة غير مدعومة لـ canned acl ‘public-read’
سأكون ممتنًا لأي مساعدة.
DISCOURSE_S3_BUCKET: community-forum
قم بإزالة هذا إذا كنت لا تريد تحميل الملفات إلى S3.
لقد أنقذت الموقف يا أخي.
شكراً جزيلاً!
لقد فصلت العمليتين بساعة - سنرى ما إذا كان ذلك سيحدث فرقًا.
هل نجح ذلك؟
لقد حدث ذلك مرة واحدة في الشهر الماضي منذ أن فصلت العمليتين بساعة ، لذلك لم “يصلحه” ، ولا يحدث كثيرًا لأقول ما إذا كان قد ساعد.
على الجانب المشرق ، لاحظت وجود قسم لحالة النسخ الاحتياطي في صفحة المسؤول يعرض مساحة القرص المتاحة ، مما يوفر عليّ فتح طرفية باستمرار وإجراء أمر df فقط للتحقق من النسخ الاحتياطي العالقة. قمت بتخصيص النص لتذكير نفسي بأنني أتوقع حوالي 80 جيجابايت مجانًا.
لقد قمت بتخصيص النص لتذكير نفسي بأنني أتوقع حوالي 80 جيجابايت مجانًا
هذه فكرة جيدة.
لقد رأيت الصورة قبل أن أقرأ أنك قمت بتخصيص النص وتساءلت عن المنطق الذي كان يلعب دورًا لتحديد أن هذا كان “جيدًا”!
لم أتمكن من تشغيل هذا مع Scaleway باستخدام صورة Bitnami Discourse.\nتم تعيين متغيرات البيئة ولكن من الواضح أنه لم يتم قراءتها/تطبيقها بشكل صحيح (أو على الإطلاق؟).\n\nلذلك قمت بتعيين متغيرات S3 في لوحة الإدارة وتعيين المنطقة مباشرة في وحدة تحكم rails (لا يزال الأمل في أن يصبح هذا مجرد حقل نصي):\nSiteSetting.s3_region=\"fr-par\"\n\nلقد أعطاني خطأ في التحقق، لكنني علقت فحص التحقق قبل تحديث الإعداد، ثم أعدته مرة أخرى.
لم أتمكن من تشغيل هذا مع Scaleway باستخدام صورة Bitnami Discourse.
صورة Bitnami ليست مُعبأة من قِبلنا ولا تتبع توصياتنا. كل ما هو موثق هنا تم اختباره فقط مقابل التثبيت الرسمي.
تم حل هذه المشكلة عن طريق تمكين “s3 use cdn url for all uploads”، وهو خيار أضافه discourse مؤخرًا.
نظرًا لأننا كنا نستخدم R2 من قبل، احتجنا إلى استخدام discourse remap لاستبدال الروابط المعطلة يدويًا، وقمنا بمزامنة ملفات s3 للتأكد، ثم أعدنا خبز جميع المنشورات.
أحاول إعداد هذا مع idrive e2، وهو متوافق مع s3. ومع ذلك، أحصل على خطأ/تتبع مكدس غير مفيد للغاية في نهاية ./launcher rebuild app:
I, [2023-10-14T15:08:08.026184 #1] INFO -- : cd /var/www/discourse & sudo -E -u discourse bundle exec rake s3:upload_assets
rake aborted!
Aws::S3::Errors::InternalError: We encountered an internal error, please try again.
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/dualstack.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/accelerate.rb:56:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/client.rb:12369:in `put_object'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:1472:in `put'
/var/www/discourse/lib/s3_helper.rb:78:in `upload'
/var/www/discourse/lib/tasks/s3.rake:41:in `block in upload'
/var/www/discourse/lib/tasks/s3.rake:41:in `open'
/var/www/discourse/lib/tasks/s3.rake:41:in `upload'
/var/www/discourse/lib/tasks/s3.rake:197:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/s3.rake:197:in `each'
/var/www/discourse/lib/tasks/s3.rake:197:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets
(See full trace by running task with --trace)
I, [2023-10-14T15:08:16.413098 #1] INFO -- : Installing CORS rules...
skipping
Uploading: assets/admin-2ebebf57104b0beb47a1c82fe5a8c6decd07f60a706640345fed296a094d1536.js
هذا هو الإعداد الذي كنت أستخدمه، ولكني جربته أيضًا مع DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY و DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: Dallas
DISCOURSE_S3_ENDPOINT: https://y0o9.tx21.idrivee2-4.com
DISCOURSE_S3_ACCESS_KEY_ID: <snip>
DISCOURSE_S3_SECRET_ACCESS_KEY: <snip>
DISCOURSE_S3_BUCKET: discourse
DISCOURSE_S3_INSTALL_CORS_RULE: false
لاحظ أنني لا أستخدمه للنسخ الاحتياطي (تم إعداده بالفعل في واجهة المستخدم مع backblaze) ولا لـ DISCOURSE_CDN_URL لأنني لست متأكدًا مما إذا كان idrive يدعم ذلك - كنت أخطط للتجربة مع ذلك بمجرد حصولي على بعض الملفات الفعلية في الحاوية.
يبدو أنه غير متوافق بما فيه الكفاية مع S3 لاحتياجات Discourse.
إذا كنت ترغب في التعمق أكثر، فإن الخطوة التالية ستكون تكرار ذلك في تثبيت تطوير والحصول على استدعاء API الدقيق الذي يفشل.
