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

لا يبدو أن لدي إذن تعديل الويكي، لكنني استخدمت بنجاح مزودًا مختلفًا.

OVHcloud

اسم الخدمة: تخزين الكائنات

المناطق تتوافق مع مراكز البيانات التي يتم التعرف عليها برمز مكون من ثلاثة أحرف. إذا كنت لا تعرف مكان إنشاء الحاوية الخاصة بك، فتحقق من علامة تبويب تخزين الكائنات في بوابة العميل الخاصة بك.

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: [رمز مركز البيانات]
DISCOURSE_S3_ENDPOINT: https://s3.[رمز مركز البيانات].io.cloud.ovh.net/
DISCOURSE_S3_ACCESS_KEY_ID: [المفتاح]
DISCOURSE_S3_SECRET_ACCESS_KEY: [المفتاح]
DISCOURSE_S3_BUCKET: [اسم الحاوية]
DISCOURSE_S3_BACKUP_BUCKET: [اسم الحاوية]
DISCOURSE_BACKUP_LOCATION: s3
إعجاب واحد (1)

هل جعلت OVHcloud S3 يعمل للتحميلات أو فقط للنسخ الاحتياطي؟

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

إنه متوافق جدًا مع S3، لكن هناك بعض الأمور المفقودة مثل قواعد دورة الحياة لحذف الملفات القديمة أو نقلها إلى التخزين البارد، والتي يتم العمل عليها حاليًا من قبل OVH. ومع ذلك، فإنه يعمل بشكل جيد لخدمة الملفات.

لنسخ الاحتياطية، استخدمت ببساطة خيار Discourse لحذف النسخ الاحتياطية القديمة تلقائيًا.

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

هذا رد مخيب جدًا وغير مفيد تمامًا. ما هو بالضبط المشكلة؟ الربط بوثيقة دعم تتغير يعني أنه لا أحد يمكنه أن يقول ما هو سوء الكسر هذا الذي ذكر في هذا الموضوع هنا.

تذكر أن “البيانات الوصفية” وأن شبكة CDN “لا تعرف عنها شيئًا”. أي بيانات وصفية؟ سيكون من المفيد أن نعرف ما الذي لا يعمل.

أردت فقط أن أضيف إلى هذا المنشور الخاص بي تعليمات حول كيفية استخدام iDrive E2.

يبدو أن هناك شيئًا ما قام iDrive بتفعيله مؤخرًا مما يتسبب في فشل مفاتيح الوصول المخصصة لدلو واحد فقط ما لم يتم تجاوز فحص مصادقة الدلو.
يمكنك تجاوز هذا عند استخدام rclone مع no_check_bucket = true في ملف rclone.conf، ولكن لست متأكدًا من وجود مثل هذا الإعداد البيئي لبناء Discourse.

ونتيجة لذلك، مع iDrive E2، يجب عليك حاليًا استخدام مفتاح لديه إمكانية الوصول للكتابة إلى جميع الدلاء الخاصة بك، بدلاً من دلو واحد فقط.

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

لماذا سيعرف شخص آخر المشكلة الدقيقة لموفر لا يستخدمه؟

على أي حال، يبدو أننا على وشك الانتهاء من Cloudflare R2. حسب:

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

## تسمح هذه المجموعة من الأسطر بتحميل وتنزيل الملفات المستضافة على R2 S3.
  DISCOURSE_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_ENDPOINT: https://randomnumber.r2.cloudflarestorage.com
  DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_S3_BACKUP_BUCKET: exotics-unlimited-backups
  DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_BUCKET: exotics-unlimited
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: randomnumbers
  DISCOURSE_S3_SECRET_ACCESS_KEY: randomnumbers
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## المكونات الإضافية هنا
## انظر https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
#         - git clone https://github.com/discourse/discourse-subscriptions.git
          - git clone https://github.com/discourse/discourse-follow.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/communiteq/discourse-private-topics.git
#         - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/tknospdr/discourse-auto-remove-group.git
          - git clone https://github.com/discourse/discourse-topic-voting.git
          - git clone https://github.com/discourse/discourse-livestream.git
#         - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/jannolii/discourse-topic-trade-buttons.git
##        - git clone https://github.com/tknospdr/force-tag-group-order.git

## خطافات لـ 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

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

root@talk-app:/var/www/discourse# rake uploads:migrate_to_s3
يرجى ملاحظة أن الترحيل إلى S3 غير قابل للعكس حاليًا!
[CTRL+c] للإلغاء، [ENTER] للمتابعة

ترحيل التحميلات إلى S3 لـ 'default'...
تحميل الملفات إلى S3...
- سرد الملفات المحلية
= 31 ملفًا
- سرد ملفات S3
. = 4 ملفات
- مزامنة الملفات إلى S3
#<Thread:0x00007ff89dcbcb20 /var/www/discourse/lib/file_store/to_s3_migration.rb:212 run> انتهى بـ استثناء (report_on_exception is true):
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call': You can only specify one non-default checksum at a time. (Aws::S3::Errors::InvalidRequest)
    from /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'
    from /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'
    from /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'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.226.0/lib/seahorse/client/request.rb:72:in `send_request'
    from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:17315:in `put_object'
    from /var/www/discourse/lib/file_store/to_s3_migration.rb:215:in `block (2 levels) in migrate_to_s3'

سأكون ممتنًا جدًا لبعض النصائح لإنهاء هذا الأمر بأي شكل من الأشكال.

الملفات المفقودة هي على الأرجح أصول، لذا تحتاج إلى مهمة “rake” التي تدفعها إلى s3 (s3:upload_assets – إنها قريبة من الأعلى)

ولكن أخطائك ناتجة على الأرجح عن مكتبة aws s3 الجديدة التي تعطل مجموعة من الخدمات. لذا ستحتاج إلى اختراع طريقة لخفض إصدار gem الخاص بـ aws أو استخدام خدمة أخرى.

أعتقد أنه قد يكون هناك موضوع حول كيفية القيام بذلك. لقد قمت بذلك على موقع أو موقعين، لكنني لست متأكدًا من كيفية توثيقه أو أين تم توثيقه.

أعتقد أن الأمر قد يتعلق بهذا الموضوع

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

هل أحتاج إلى تشغيل ذلك على الرغم من أن هذا جزء من التغييرات التي أجريتها في ملف app.yml؟ اعتقدت أن ذلك كان موجودًا لدفع الملفات تلقائيًا أثناء إعادة البناء.

جربت ذلك للتو. كان ناتجه:


root@talk-app:/var/www/discourse# rake s3:upload_assets
Installing CORS rules...
skipping
Skipping: assets/logo-single-3f9a3693.png
Skipping: assets/favicon-7e45025e.ico
Skipping: assets/logo-single-dev-0d38377d.png
Skipping: assets/push-notifications/posted-e02e1c60.png
Skipping: assets/push-notifications/watching_first_post-e02e1c60.png
Skipping: assets/push-notifications/README-d49cc975.md
(big long list...)
Skipping: assets/plugins/footnote_extra-95ffab71.gz.js

لا ينبغي عليك ذلك، ولكن هذه هي الأشياء التي من شأنها أن تجعل موقعك “معطلاً” (أم أن “معطلاً” يعني “الصور مفقودة” بالنسبة لك؟) تحميل الصور باستخدام migrate_to_s3 يؤثر فقط على الصور.

لا أستطيع أن أشرح تمامًا كيف تم تحميل جميع الأصول بالفعل (ما الذي كان معطلاً في الموقع؟ كيف تم تحميلها إذا كان إعداد S3 الخاص بك معطلاً؟)

هل يمكنك تحميل أي صور على موقعك؟

لا يمكنني حاليًا فعل أي شيء على الموقع.
لا تتردد في إلقاء نظرة عليه ورؤية. https://eu.technospider.com

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

هذا (ومجموعة من الملفات الأخرى) مفقود https://eufiles.technospider.com/extra-locales/ca382c69f8e6b85162b2ba58f2ce100bfe741966/en/mf.js?__ws=eu.technospider.com

هل هذه شبكة توصيل المحتوى (CDN) الخاصة بك أم الدلو الخاص بك؟ هل هذا الملف موجود في الدلو الخاص بك؟ ربما يكون في الدلو الخاص بك ولكن شبكة توصيل المحتوى (CDN) الخاصة بك معطلة؟

إليك كيف قمت بتكوين R2 مرة واحدة وأعتقد أنها نجحت.

            - "DISCOURSE_S3_REGION: 'auto'"
            - "DISCOURSE_S3_ENDPOINT: https://some-number.r2.cloudflarestorage.com"
            - "DISCOURSE_S3_ACCESS_KEY_ID: 'keyid'"
            - "DISCOURSE_S3_SECRET_ACCESS_KEY: 'secret'"
            - "DISCOURSE_S3_CDN_URL: 'https://r2.myforum.us/xyz'"
            - "DISCOURSE_CDN_URL: 'https://r2.literatecomputing.com'"
            - "DISCOURSE_S3_BUCKET: 'myforum/xyz'"
            - "DISCOURSE_S3_BACKUP_BUCKET: 'myforum/xyz/backups'"

إذًا، هذا لم ينجح أبدًا؟

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

أين يفترض أن يكون “extra-locales”؟ لا أراه تحت ‘public’ أو ‘assets’ حتى داخل الحاوية. أين يجب أن أبحث؟

آسف على الأسئلة الغبية، لكن هذه مغامرة جديدة تمامًا بالنسبة لي.
هل ما هو الـ CDN الخاص بي أم الـ bucket الخاص بي؟

مع الشرطات البادئة، وجميع علامات الاقتباس المفردة والمزدوجة؟ ليس لدي أي من هذه في ملف app.yml الخاص بي. هل يجب أن أضيف هذه وأعيد البناء للاختبار؟
هذا بالضبط كيف يبدو ملفي، مع مسافة بادئة بمقدار مسافتين لكل سطر:

## This set of lines allows R2 S3 hosted files to be uploaded and downloaded..
  DISCOURSE_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_ENDPOINT: https://randomnumber.r2.cloudflarestorage.com
  DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com
  DISCOURSE_S3_BACKUP_BUCKET: exotics-unlimited-backups
  DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_BUCKET: exotics-unlimited
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: randomnumbers
  DISCOURSE_S3_SECRET_ACCESS_KEY: randomnumbers
  DISCOURSE_S3_INSTALL_CORS_RULE: false

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

هذا ما أراه عند الوصول إلى أحد الأصول الخاصة بك:

This object does not exist or is not publicly accessible at this URL. Check the URL of the object that you're looking for or contact the owner to enable Public access.

يمكنك معرفة ما إذا كان https://eufiles.technospider.com/extra-locales/ca382c69f8e6b85162b2ba58f2ce100bfe741966/en/mf.js?__ws=eu.technospider.com يعمل إذا قمت بتغيير اسم المضيف إلى نقطة نهاية Cloudflare الخاصة بك.

هل يمكنك العثور على هذا الملف في الحاوية الخاصة بك؟ هل يمكنك الوصول إليه؟

لا أعرف، ولكن هذا هو عنوان URL الذي نسخته من أدوات المطور في متصفحي.

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

لا. أستخدم أداة مختلفة للتكوين، ولكن هذه هي إعدادات البيئة التي أنا متأكد منها أنها عملت معي في وقت ما.

أفهم. هذا محبط. حظا سعيدا.

أحصل على:

لا يبدو أن ملف XML هذا يحتوي على أي معلومات تنسيق مرتبطة به. يتم عرض شجرة المستند أدناه.
<Error>
<Code>InvalidArgument</Code>
<Message>Authorization</Message>
</Error>

نقطة النهاية الخاصة بي هي:
https://7100e60b936991e069a3230dc05d4976.r2.cloudflarestorage.com/exotics-unlimited/

لقد قمت للتو بتغيير

DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com

إلى

DISCOURSE_S3_CDN_URL: https://eufiles.technospider.com/exotics-unlimited

والآن أواجه رمز تحميل لا يختفي أبدًا.
تقدم؟ من يمكنه القول. :slight_smile:

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

سامحني لعدم معرفتي. ولكن ما هو الدلو مقابل شبكة توصيل المحتوى (CDN).

الدلو هو “الدليل الرئيسي” الذي أنشأته وحيث توجد جميع الملفات. شبكة توصيل المحتوى (CDN) هي مجموعة من الخوادم في جميع أنحاء العالم والتي تحصل على نسخة من هذا الدلو. يتم التعرف عليه باستخدام عنوان URL الذي قدمته عند إنشاء هذا الاتصال، مثل cdn.example.com.

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

سأرى ما يمكنني اكتشافه.

يبدو أنه مهما حاولت، لا يمكنني الوصول إلى أي كائنات من عنوان URL لنقطة نهاية R2.

https://7100***********dc05d4976.r2.cloudflarestorage.com/exotics-unlimited/assets/logo-815195ae.png

&

https://exotics-unlimited.7100***********dc05d4976.r2.cloudflarestorage.com/assets/logo-815195ae.png

يعطيني:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>InvalidArgument</Code>
<Message>Authorization</Message>
</Error>

ولكن عبر شبكة توصيل المحتوى (CDN):

![discourse](upload://4axzzMIqD328iAou0u6qv18Avo8.png)

يعطيني:
discourse

نظرًا لأن الخطأ يتحدث عن المصادقة، فقد بحثت في هذا قليلاً ووجدت هذه المعلومة:

ملاحظة

بشكل افتراضي، يتم تخزين أنواع ملفات معينة فقط مؤقتًا. لتخزين جميع الملفات مؤقتًا في الدلو الخاص بك، يجب عليك تعيين قاعدة صفحة “تخزين كل شيء مؤقتًا”.

لمزيد من المعلومات حول سلوك التخزين المؤقت الافتراضي وكيفية تخصيصه، راجع سلوك التخزين المؤقت الافتراضي

من هذه الصفحة:

لقد أنشأت قاعدة “تخزين كل شيء مؤقتًا”، ولكن لم يحدث أي تغيير.