Cloudflare R2: التنقل في إعداداته ومعالجة أخطاء التكوين

هل لا يزال هناك أي تطوير على Cloudflare R2؟ لقد بدا جيدًا بالنسبة لي..

هل قرأت الملاحظة المتعلقة بذلك أعلاه؟ إنها غير متوافقة مع ملفات gzip، ولم يكن هناك أي مؤشر على وجود خطة لتغييرها. ربما تعمل مع كل شيء ما عدا التحميلات؟

هل جربتها؟ هل نجحت؟

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

نعم، لقد قرأته، ولكن ذلك كان قبل عامين وقد تكون بعض الأشياء قد تغيرت.

أردت تجربته اليوم، وقمت بتفعيل R2 وإضافة الموقع. أنا فقط لست متأكدًا من كيفية تكوين هذا في خطوة discourse. لأنني لم أتمكن من العثور على مكان الحصول على رموز المفتاح أو السر من Cloudflare حتى الآن. أنا أجرب، ربما يمكن أن يساعدني تفصيل صغير :slight_smile:

3 إعجابات

نفس الشيء :thinking: الدلو الخاص بي نشط ولكن ربما لا يدعم discourse بعد ولكني آمل في ذلك.

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

تصف هذه الصفحة كيفية الحصول على المفاتيح: Authentication · Cloudflare R2 docs

إعجابَين (2)

لقد جربت كل شيء ولكنني دائمًا ما أحصل على هذا الخطأ:

Aws::S3::Errors::BadRequest

أتساءل ما الذي أفتقده؟

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

[
  {
    "AllowedOrigins": [
      "https://SITENAME.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "HEAD",
      "DELETE",
      "PUT"
    ]
  }
]

أي أفكار؟

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

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

لكن عدم وجود نسخ احتياطية من S3 يبدو وكأنه الكثير للتخلي عنه.

يبدو هذا وكأنك لا تملك المفتاح الصحيح أو نقطة النهاية الصحيحة.

إعجابَين (2)

بصراحة، أنا حاليًا أستخدم Cloudflare على موقع Discourse الخاص بي ومن الجيد عمومًا أن يكون كل شيء في مكان واحد. لذا فإن التعامل مع Amazon يمكن أن يكون مرهقًا بعض الشيء عندما يكون لديك R2. لقد حاولت تثبيت Amazon S3 لفترة من الوقت ولسبب ما لم أتمكن من تحميل ملفات الأنماط. (حسنًا، سأحاول مرة أخرى) ولكن سيكون من الجيد عدم تجاهل Cloudflare، خاصة عند استخدام منتدى دعم Cloudflare Discourse :slight_smile:

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

هذا يحدث عادةً عندما لا تضيف المقطع الذي يدفع الأصول إلى s3 (ستحتاجه أيضًا لكي تعمل أي خدمة شبيهة بـ s3 إذا قمت بتعيين المتغير use_s3).

إعجابَين (2)

إذًا، هل جربت شيئًا آخر وجعلته يعمل؟ ماذا فعلت؟ هل يمكنك كتابة ذلك كما فعل الآخرون في تكوين موفر تخزين كائنات متوافق مع S3 لتحميل الملفات؟

هل يعمل للنسخ الاحتياطي؟

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

لم أتمكن من رؤية أي شيء في رموز الخطأ أيضًا. سيكون من الرائع لو تمكنت من تشغيله، حيث سيكون وجود كل شيء تقريبًا في لوحة واحدة (Cloudflare) أمرًا مثيرًا وفعالًا.

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

لقد قمت بتحميل صورة من لوحة R2 ويمكنني الوصول إليها. ومع ذلك، لا يمكنني تحميل صورة عبر discourse، فإنه يعطي الخطأ أعلاه.

إذًا، ربما لا يعمل كما تقول الوثائق إنه لا يعمل.

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

أو ربما أدين لك باعتذار. يبدو أنني تمكنت من جعله يعمل، على الرغم من أنه ليس لدي وقت لأعد بأنني أستطيع كتابة تعليمات تسمح لك بجعله يعمل.

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
  DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
  DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
  DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
  DISCOURSE_CDN_URL: '=CDN_URL='
  DISCOURSE_S3_BUCKET: '=BUCKET='
  DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

لا تنس المقطع الذي يقوم بمهمة rake لدفع التحميلات إلى S3.

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

4 إعجابات

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

تحتاج إلى اتباع التعليمات لدفع الأصول إلى S3:

ماذا استخدمت لشبكة توصيل المحتوى (CDN)؟ إذا كانت Cloudflare، كيف قمت بتكوينها؟

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

لقد أضفت هذا. عندما أقوم بإعادة التحويل البرمجي، تتغير جميع الروابط على الموقع بعنوان URL الخاص بـ CDN. ومع ذلك، لم يتم تحميل ملفات الأنماط هذه إلى Cloudflare. لذلك، أضفت إعداد منطقة التحميل فقط إلى ملف app.yml وقمت بالتحويل البرمجي بهذه الطريقة. عندما أقوم بتنشيط S3 من المسؤول، يتم تحميل الصور التي تم تحميلها حديثًا إلى Cloudflare R2 ويتم توفير الوصول.

المشكلة الوحيدة هي أنه عندما أضيف إعدادات S3 قبل التحويل البرمجي لملف app.yml، لا يبدو أن ملفات الأنماط التي تم إنشاؤها حديثًا يتم تحميلها. لكن عناوين URL وعناوين URL الخاصة بـ CDN تتغير على الموقع.

CORS:

[
  {
    "AllowedOrigins": [
      "https://domain.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "PUT",
      "HEAD",
      "DELETE"
    ]
  }
]

هل يمكن أن تكون لهذه المشكلة علاقة بـ Argo؟ ومع ذلك، يتم تحميل الصور حاليًا دون أي مشاكل.

لتصحيح الأخطاء، يمكنك الدخول إلى الحاوية ومحاولة تشغيل مهام الـ rake هناك ورؤية ما يحدث.

لقد أمضيت حوالي 4 ساعات في هذا أمس، لذا أخشى أن ينتهي دعمي المجاني لهذا المشروع.

لا أعرف شيئًا عن أمور CORS. سأسمح بكل شيء من كل مكان للتأكد من أن هذه ليست المشكلة. لم أفعل شيئًا بخصوص CORS في موقع الاختبار الخاص بي.

هل تقوم بتشغيل هذا تحت k8s؟

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

أعتذر عن إضاعة وقتك. لو كان بإمكاني المساعدة مالياً لفعلت. أنا أحترم وقتك.

لا أعرف ما هو k8s. أعمل على خادمي الخاص. وقمت بتفعيل argo. R2 نشط أيضاً. كل شيء يعمل بشكل جيد جداً الآن، فقط بعد التجميع الجديد لا يتم تحميل ملفات الأنماط (js، css، إلخ) إلى R2. سأعيد تشغيل الاختبارات اللازمة لاحقاً وأضيفها هنا. إذا نجحت، سأشرح بالتفصيل كيفية العثور على المشكلة أو جعلها تعمل.

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

ما هو Argo؟

إذا كان هذا تثبيتًا قياسيًا، فيمكنك تشغيل أمر rake داخل الحاوية

./launcher enter app
rake ...

هل أنت متأكد من أنك تتضمن الجزء USE_S3؟ (أعتقد ذلك، حيث أعتقد أن هذا هو ما يجعل الأصول متوقعة على شبكة توصيل المحتوى)

Argo: Overview · Cloudflare Argo Smart Routing docs

لقد أضفت إعداد USE_S3 قبل التجميع، مثال أدناه:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_S3_BUCKET: 'cloudflaredomain'
  DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

بعد إعادة التجميع، تتغير جميع عناوين URL كما هو متوقع. عنوان url لشبكة توصيل المحتوى (CDN). المشكلة الوحيدة هي أن هذه الأصول لم يتم تحميلها إلى R2. لقد أضفت هذا الإعداد بالفعل:

  after_code:
     - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

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

هذه هي بداية app.yml:

templates:
  #- "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.template.yml"
  #- "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

الآن سأحاول الدخول إلى الحاوية وتحميل الأصول إلى S3.