توقف S3 (ليس AWS) عن العمل بشكل عشوائي، ويفترض أنه منذ تحديث

لدي مجموعة دلو (bucket) ولكن يبدو أنها تحاول استخدام الافتراضي؟

أستخدم GarageHQ كبديل خفيف لـ MinIO.

أنا على الإصدار 3.6.0.beta1-dev
( ed6beea336 )

[2025-09-14 10:40:34] إزالة الدليل المؤقت ‘/var/www/discourse/tmp/backups/default/2025-09-14-104012’…
[2025-09-14 10:40:34] جارٍ تحميل الأرشيف…
[2025-09-14 10:40:35] استثناء: الدلو غير موجود: default

[2025-09-14 10:40:35] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:3710:in `create_multipart_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:67:in `initiate_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:58:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:42:in `block in upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:40:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:477:in `block in upload_file'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:476:in `upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:48:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:351:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'

كان آخر نسخة احتياطية أمس ولكنها لم تعد تعمل، ولا تزال الخدمات الأخرى قادرة على النسخ الاحتياطي إلى S3 المحلي الخاص بي دون مشاكل.

هل يعرف أحد كيف يمكنني إصلاح هذا؟

نعم. لقد قامت AWS بتعطيل مكتبة S3 للعديد من الخدمات الأخرى.

Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections يتضمن بعض الحلول البديلة.

لقد أنشأت هذا الملف aws-revert-template.yml للعودة إلى إصدار أقدم. لا أعرف ما إذا كان لا يزال يعمل؛ تاريخ ملفي هو 2025-08-06T05:00:00Z

حسنًا، لست مقتنعًا تمامًا بأن هذه هي المشكلة على الرغم من ذلك

ما لم أكن مخطئًا، كنت على الإصدار 3.6 لفترة أطول من يومين، ومع ذلك حصلت على نسخة احتياطية قبل يومين وقبل 10 أيام.

ليس أكثر من ذلك بكثير. أعتقد أنك مخطئ.

إليك الالتزام الذي تستخدمه:

ولكن أيضًا:

هل اسم الدلو الخاص بك هو “default”؟

نعم، أنا الآن في الـ commit، لم أكن كذلك في البداية عندما نشرت هذه المشكلة، لقد قمت بالتحديث لاستبعاد وجود خطأ

لا، كما هو مذكور في المنشور الأصلي، لهذا السبب لا أعتقد أنها نفس المشكلة التي تشير إليها، فالحاوية الخاصة بي محددة، وقد جربت كليهما في إعدادات واجهة المستخدم لقسم النسخ الاحتياطي وعبر متغيرات البيئة في ملف yaml، ومع ذلك لا يزال يحاول استخدام الافتراضي بغض النظر.

للتوضيح، لم يتغير شيء في جانب discourse أو garage منذ توقف العمل باستثناء التحديث إلى 3.5 ثم إلى 3.6.

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

ربما يمكن لشخص لديه S3 فعلي التحقق مما إذا كان يختار دلوًا بشكل صحيح؟ وكذلك الأمر بالنسبة لأطراف ثالثة أخرى مثل Backblaze و R2 وما إلى ذلك؟

لذلك قمت بإنشاء دلو باسم “Default” ويعمل كما هو مقصود، لذا نعم، فهو لا يلتقط اسم الدلو الذي أخبره به بشكل صحيح.

باستثناء أن الآلاف من الأشخاص واستضافة CDCK سيتأثرون أيضًا على الأرجح وهم ليسوا كذلك. من المرجح جدًا أنك حذفت أو أضفت حرفًا إلى سطر في ملف app.yml الخاص بك.

يمكنك القيام بأشياء مثل هذه:

grep -i S3 /var/discourse/containers/*
docker exec -it app bash -c 'grep s3 /var/www/discourse/config/discourse.conf

وإذا قمت بتكوين S3 في الإعدادات بدلاً من متغيرات البيئة، فيمكنك إلقاء نظرة على تكوين موفر تخزين كائنات متوافق مع S3 لتحميلات لمعرفة كيف تبدو.

لا يوجد خطأ في إعداداتي ولم يتغير شيء سوى تحديث discourse. لقد جربت الإعدادات في ملف yaml والإعدادات في الواجهة الرسومية، وتظهر إعدادات الواجهة الرسومية حرفيًا على أنها “cyanlabs-community” ومع ذلك لا يزال النسخ الاحتياطي يحاول الحفظ في “default”.

على الرغم من تكوين S3 في الواجهة الرسومية، لا يحتوي ملف discourse.conf على أي إشارات إلى S3 وفقًا لأمرك الثاني.

هذا يعني أن الحاوية غير موجودة، هل يمكنك محاولة إنشاء حاوية جديدة وبيانات اعتماد جديدة ومعرفة ما إذا كان التحميل هناك يعمل؟

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

لكنني أشعر أنني أدور في دوائر مفرغة هنا.

لم يكن دلو الافتراضي موجودًا في بداية هذه المحادثة، لقد أنشأته منذ ذلك الحين ويستخدم هذا الدلو على الرغم من تعيين الدلو cyanlabs-community في الإعدادات.

كلا من cyanlabs-community و default موجودان في مثيل s3، لكن Discourse لن يستخدم cyanlabs-community مهما حاولت.

دلو جديد cyanlabsdiscourse

نتيجة النسخ الاحتياطي

[2025-09-22 15:14:59] Finalizing backup...
[2025-09-22 15:14:59] Finalizing database dump file: cyanlabs-official-community-2025-09-22-151437-v20250916082012.sql.gz
[2025-09-22 15:14:59] Removing tmp '/var/www/discourse/tmp/backups/default/2025-09-22-151437' directory...
[2025-09-22 15:14:59] Uploading archive...
[2025-09-22 15:15:37] Executing the after_create_hook for the backup...
[2025-09-22 15:15:37] Deleting old backups...
[2025-09-22 15:15:37] Cleaning stuff up...
[2025-09-22 15:15:37] Removing archive from local storage...
[2025-09-22 15:15:37] Removing '.tar' leftovers...
[2025-09-22 15:15:37] Marking backup as finished...
[2025-09-22 15:15:37] Refreshing disk stats...
[2025-09-22 15:15:37] Notifying 'CyanLabs' of the end of the backup...
[2025-09-22 15:15:40] Finished!

دلو cyanlabsdiscourse

دلو الافتراضي

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

أشعر أنني جربت كل شيء، في الوقت الحالي سأستخدم فقط الدلو الافتراضي على ما أعتقد

قد يكون AWS غامضًا! يؤسفنا أنك لم تتمكن من استخدام اسم الحاوية المفضل لديك. من الصعب المساعدة دون القدرة على تكرار المشكلة، لذا أعتقد أنه سيتعين عليك التعايش مع استخدام الافتراضي كاسم للحاوية.