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

إذًا، هل يعمل الآن؟

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

ممتاز. لقد استغرق الأمر مني وقتًا طويلاً ولكن بصرف النظر عن حقيقة أنه يعمل، فقد تعلمت أيضًا الكثير عن تكوين Discourse!

شكرا لك!

إعجابَين (2)

حسنًا. قررت نشر الدليل خطوة بخطوة الذي أنشأته عند قيامي بهذا الإعداد.

كيفية تكوين النسخ الاحتياطي لـ Discourse Forum S3 و S3 CDN (Itechguides.com)

الخطوات في هذا الدليل مخصصة لاستخدام مساحات DigitalOcean و StackPack CDN.

3 إعجابات

@pfaffman كنت أتساءل عما إذا كان بإمكانك مساعدتي في مشكلة النسخ الاحتياطي الإضافية هذه:

بعد إكمال النسخ الاحتياطي لـ S3 وتكوين الاستنساخ، لا يعمل النسخ الاحتياطي التلقائي الخاص بي. تُظهر لقطة الشاشة أدناه التكوين الخاص بي.

يمكنني تشغيل النسخ الاحتياطي يدويًا. المشكلة هي النسخ الاحتياطي التلقائي المجدول - فهي لا تعمل

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

لا أعرف. يمكنك إلقاء نظرة على مهام sidekiq والتأكد من أنها قيد التشغيل. يجب أن يعمل.

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

تم تقسيم 4 مشاركات إلى موضوع جديد: نصائح حول Google Cloud S3

مرحباً،

شكراً لتصحيح مشاركتي. لكنني لا أستطيع تعديل مشاركتي لتجنب المعلومات المضللة.

مرحباً،

أنا عالق بعض الشيء ومحتار وآمل أن يتمكن شخص ما من مساعدتي.
كان لدي في البداية تثبيت Bitnami وأدركت كم ستكون هذه المشكلة على طول الطريق، فأعدت التثبيت باستخدام التثبيت القياسي.
تمكنت من استعادة النسخة الاحتياطية الخاصة بي وكان كل شيء على ما يرام، على الرغم من أنني انتقلت من الإصدار 2.8 إلى الإصدار التجريبي 2.9.

اختبرت نسختي الاحتياطية مرة أخرى على Google Bucket الخاص بي ولا تزال تعمل بشكل رائع.

لاحظ أن جميع إعدادات S3 تم إجراؤها من خلال واجهة الويب وليس عبر متغيرات البيئة.

لأسباب تتعلق بالخصوصية (GDPR)، قمت بإنشاء حاوية نسخ احتياطي جديدة في أوروبا (لنسميها discourse-backup-eu)، والآن بعد أن تمكنت من تغيير متغير البيئة، قمت بتعيين DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com، وأعدت بناء التطبيق، وغيرت اسم حاوية النسخ الاحتياطي في واجهة الويب، وأعدت تشغيل النسخ الاحتياطي وكنت سعيدًا جدًا برؤية ملفات النسخ الاحتياطي تظهر في حاوية النسخ الاحتياطي الجديدة الخاصة بي في أوروبا.

الآن أردت أن تذهب التحميلات إلى حاوية أخرى وتجنب ملء مساحة قرص VM الخاصة بي.

لذلك قمت بتكوين حاوية جديدة (لنسميها discourse-uploads)، وجعلتها عامة، وأضفت دور Storage Legacy Bucket Owner إلى حساب الخدمة الخاص بي على تلك الحاوية الجديدة.
ثم أضفت قاعدة إلى موازن التحميل الحالي الخاص بي (لنسميه https://www.example.com) لاستخدام حاوية خلفية مع تمكين Cloud CDN كما هو موضح هنا. القاعدة هي /discourse-uploads/* تشير إلى الحاوية discourse-uploads.

اختبرت CDN الخاص بي باستخدام ملف test.jpg في جذر الحاوية ولكن لم أتمكن من الوصول إليه عبر https://www.example.com/discourse-uploads/test.jpg واضطررت إلى إنشاء مجلد فرعي يسمى discourse-uploads داخل الحاوية، ونقلت test.jpg إلى الداخل والآن يمكنني رؤية صورتي التجريبية عبر https://www.example.com/discourse-uploads/test.jpg.

في واجهة المستخدم الرسومية، قمت بتغيير اسم الحاوية الوهمي تحت “s3 upload bucket” (أجبرت على تعيينه سابقًا أثناء إعداد النسخ الاحتياطي) إلى discourse-uploads، وملأت عنوان URL الخاص بـ CDN بـ https://www.example.com/discourse-uploads وحددت “enable s3 uploads”.

منذ ذلك الحين، إذا حاولت تحميل صورة، سأحصل على نافذة منبثقة تقول “Invalid Argument” في نافذة المتصفح (قادمة من خطأ 422 مع محتوى JSON يقول نفس الشيء بشكل أساسي).

حاولت إعادة بناء جميع المشاركات، ولكن لم يكن هناك تأثير، وما زلت أحصل على الخطأ.

لذلك، فكرت، يجب أن أحاول استخدام متغيرات البيئة بدلاً من واجهة الويب.

واستخدام التكوين التالي:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

أعدت بناء التطبيق.
بعد ذلك، لا يمكنني فتح discourse لأن الأصول لم يتم تحميلها إلى الحاوية وأحصل على 404.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

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

غيرت متغير البيئة إلى
DISCOURSE_S3_BUCKET: discourse-uploads
(بالتفكير في أنه لاحقًا يمكنني اللعب بقاعدة المضيف بدلاً من ذلك لتجنب الاضطرار إلى التحميل إلى مجلد فرعي).

وأعدت البناء لمعرفة ما إذا كان أي شيء سيتم تحميله، ولكن لم يتم تحميل أي شيء إلى الحاوية ولا يزال discourse يفشل في الفتح بسبب أخطاء 404.

إذًا أسئلتي هي:

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

شكرا لك!

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

هل قمت بتضمين هذا الجزء؟

لقد قدمت طلب سحب (PR) مع قالب للقيام بذلك منذ فترة، لكنني لا أعتقد أنه حظي بأي اهتمام.

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

إذا كنت تستخدم متغيرات البيئة (وهو ما يجب عليك فعله)، فلن تكون هذه الإعدادات مرئية بعد الآن في واجهة المستخدم الرسومية.

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

تم دمج منشور في موضوع موجود: نصائح حول Google Cloud S3

نعم. إذا كانت ذاكرتي لا تخونني، فهناك مناقشة أعلاه حول عدم سماح Google بشيء ما (الوصول إلى القائمة، ربما؟)، ولكن كان هناك حل بديل حول استخدام شيء “قديم”. هذا ما أتذكره. سيتعين عليك التمرير عبر الرسائل الـ 100 أعلاه للعثور عليه. إذا نجح الأمر، فسيكون من الرائع إذا كان بإمكانك تحديث المنشور الأصلي لتقول كيف نجحت في جعله يعمل حتى يتمكن الشخص التالي الذي يحتاج إلى معرفة ذلك من العثور عليه بسهولة أكبر.

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

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

هل تقترح علي تحديث المنشور الأصلي بهذه المعلومات؟ لا أعتقد أنني أستطيع.

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

أعتقد أنه قد يكون هناك تراجع هنا، ما رأيك @Falco؟

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

قد يكون هناك تراجع. هل أنت متأكد من أنك أضفت المخصص

الذي تحتاجه Google فقط؟

إعجابَين (2)

أوه. حسنًا، اعتقدت أن شخصًا ما قد فعل ذلك. :person_shrugging:

هذا ما كنت أقترحه. إنها ويكي، لذلك أنا متأكد تمامًا من أنه يمكنك ذلك، على الرغم من أنني لست متأكدًا بنسبة 100% من مستويات الثقة المعنية.

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

شكراً على إجابتك، نعم لقد قمت بتضمينها:

لاحظ أنني جربت مع وبدون المجلد الفرعي
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
و
DISCOURSE_S3_BUCKET: discourse-uploads

شكراً مرة أخرى

إعجابَين (2)

@tuanpembual فعل ذلك في البداية ولكنه أشار إلى مالك كائن الإرث للتخزين بدلاً من مالك حاوية الإرث للتخزين ****

أنا مجرد “مستخدم أساسي” وهذا هو السبب على الأرجح لعدم قدرتي على تعديله.

3 إعجابات

سأحاول تلخيص إجابات أسئلتي:

  • هل تتعارض واجهة المستخدم الرسومية للويب ومتغيرات البيئة؟

إذا استخدمت متغيرات البيئة (وهو ما يجب عليك فعله)، فلن تكون تلك الإعدادات مرئية بعد الآن في واجهة المستخدم الرسومية للويب.

  • متى يفترض تحميل الأصول إلى الحاوية؟
    بإضافة هذا المقطع إلى app.yml في قسم الخطاف (hook)، سيتم تحميله بعد after_assets_precompile (أثناء إعادة بناء التطبيق).
 after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
  • كيف يمكنني تصحيح هذا؟ لا أرى أي خطأ في السجلات
    عن طريق تشغيل:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
  • هل من الممكن تعيين مجلد فرعي للحاوية في الإعداد؟

هل أحتاج حقًا إلى استخدام حاويات منفصلة للتحميلات والنسخ الاحتياطي؟

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

  1. حاويات مختلفة
  • s3_upload_bucket: your-uploads-bucket
  • s3_backup_bucket: your-backups-bucket
  1. بادئات مختلفة
  • s3_upload_bucket: your-uploads-bucket/uploads
  • s3_backup_bucket: your-uploads-bucket/backups

يمكنك استخدام البادئات لتنظيم البيانات التي تخزنها في حاويات Amazon S3. البادئة هي سلسلة من الأحرف في بداية اسم مفتاح الكائن. يمكن أن تكون البادئة بأي طول، تخضع للحد الأقصى لطول اسم مفتاح الكائن (1,024 بايت). يمكنك التفكير في البادئات كطريقة لتنظيم بياناتك بطريقة مشابهة للمجلدات. ومع ذلك، فإن البادئات ليست مجلدات.

  • بمجرد نجاح هذا، هل يتم نقل الصور التي تم تحميلها سابقًا إلى الحاوية؟ إذا قمت بإعادة التحميل، كيف ستبدو عناوين URL للصور التي تم تحميلها سابقًا؟

لقد قمت بتمكين تحميلات S3 في مثيل Discourse الخاص بي (والذي يعمل منذ فترة)؛ ماذا أفعل مع التحميلات المحلية الحالية؟

لترحيل التحميلات الحالية إلى S3، يمكنك إجراء عدد قليل من مهام rake. للقيام بذلك، تحتاج إلى وصول SSH، وأذونات الجذر، وأن تكون قد دخلت إلى تطبيق discourse (وفقًا لـ عمليات الإدارة المجمعة). أوه، و عليك تعيين بعض متغيرات البيئة في app.yml. ليس للمبتدئين.

بمجرد الانتهاء من كل ذلك، تكون جاهزًا لمهام rake:

rake uploads:migrate_to_s3
rake posts:rebake

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

3 إعجابات

مرحباً، لقد كنت أبحث عن مزودي تخزين الكائنات، ورأيت في المنشور الأصلي أنه بالنسبة لبعضهم، ستحتاج إلى “تجاوز CORS وتكوينه يدويًا”. أنا لست على دراية بـ CORS أو أي شيء يتعلق بتكوينه، لذلك هل يجب أن أتجنب تلك التي تحتاج إلى هذا الإعداد، أم أنه من السهل إعداده؟

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

إذا احتجت إلى السؤال (كما سأفعل) فسأختار واحدًا آخر.

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

فقط قم بالتأكيد، بمجرد الانتهاء من خطوات

rake uploads:migrate_to_s3
rake posts:rebake

يمكنني إزالة مجلد التحميلات المحلي بالكامل، نعم؟

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