النسخ الاحتياطي التلقائي على Backblaze B2
إليك كيف قمت بإعداده لموقع افتراضي مستضاف على example.com
- قم بإنشاء حساب على Backblaze (حاليًا، لا حاجة لإدخال الدفع مقابل أقل من 10 جيجابايت وهو مجاني)
- قم بإنشاء حاوية (Backblaze > B2 Cloud Storage)
- الاسم:
$sitename-discourse-$randomمملوء إلى 30 حرفًا- في هذا المثال:
example-discourse-g87he56ht8vg - تحتاج Discourse إلى أن يكون اسم الحاوية أحرفًا صغيرة وأرقامًا وشرطات فقط
- أقترح الاحتفاظ به عند 30 حرفًا أو أقل لأنه يظهر بشكل جيد في واجهة الويب الخاصة بـ Backblaze دون التفاف
- في هذا المثال:
- حاوية خاصة
- تمكين التشفير (SSE-B2)
- تمكين قفل الكائنات
- الاسم:
- قم بإنشاء مفتاح تطبيق (Backblaze > Account > App Keys)
- اسم المفتاح:
example-discourse - اسم الحاوية (السماح بالوصول إلى الحاوية (الحاويات)):
example-discourse-g87he56ht8vg - القدرات: قراءة وكتابة
- اترك
namePrefixوvalidDurationSecondsفارغين
- اسم المفتاح:
- قم بتكوين إعدادات Discourse B2 (Discourse > Admin > Settings)
backup_location:s3s3_backup_bucket:example-discourse-g87he56ht8vgs3_endpoint: يتم عرضه على صفحة الحاوية - تأكد من إضافةhttps://في البدايةs3_access_key_id: (من الخطوة السابقة)s3_secret_access_key: (من الخطوة السابقة)- يعرض لك Backblaze المفتاح مرة واحدة فقط (عند الإنشاء)!
- بالمناسبة، يمكنك أيضًا تعيين هذه كمتغيرات بيئة في ملف YML الخاص بالحاوية بدلاً من ذلك. سيسمح لك هذا بالاستعادة باستخدام هذا الملف فقط ولا شيء آخر:
env:
## Backblaze B2 Backups
# DISCOURSE_BACKUP_LOCATION: 's3' # uncomment to recover from cli
DISCOURSE_S3_ENDPOINT: 'https://....backblazeb2.com'
DISCOURSE_S3_BACKUP_BUCKET: 'example-discourse-g87he56ht8vg'
DISCOURSE_S3_ACCESS_KEY_ID: '...'
DISCOURSE_S3_SECRET_ACCESS_KEY: '...'
# DISCOURSE_DISABLE_EMAILS: 'non-staff' # uncomment to disable email during a test restore
## you can restore with no data beyond this container yml.
## uncomment DISCOURSE_BACKUP_LOCATION above, build container (./launcher rebuild ...),
## and then run this inside container (it will restore from B2 bucket):
## discourse enable_restore
## discourse restore <example-com-...tar.gz> # choose restore filename by browsing B2 webui
## remember to disable restore afterwards
- قم بتكوين الاحتفاظ بالنسخ الاحتياطي
- Discourse:
backup_frequency: 1 (نسخ احتياطي يومي في هذا المثال، ولكن يمكنك القيام بأسبوعي)maximum_backups: تجاهل هذا الإعداد - دع Backblaze يتعامل معه
s3_disable_cleanup: true (منع إزالة النسخ الاحتياطي القديم من S3 عندما يكون هناك نسخ احتياطي أكثر من الحد الأقصى المسموح به)
- Backblaze (انتقل إلى إعدادات الحاوية الخاصة بك):
- قفل الكائنات (سياسة الاحتفاظ الافتراضية): 7 أيام
- إعدادات دورة الحياة (مخصصة):
fileNamePrefix:default/example-com(اختياري)daysFromUploadingToHiding: 8 أيام- يجب أن يكون هذا قفل الكائن + 1
daysFromHidingToDeleting: 1 يوم
- Discourse:
لتلخيص الاحتفاظ في هذا المثال:
- تنشئ Discourse نسخًا احتياطيًا كل يوم.
- كل ملف نسخ احتياطي غير قابل للتغيير لمدة 7 أيام بعد تحميله إلى B2 (قفل الكائن). هذا يحميك من الحوادث، برامج الفدية، إلخ.
- بعد 8 أيام من التحميل، تنتهي صلاحية قفل الكائن على النسخة الاحتياطية. نظرًا لأنه قابل للتغيير مرة أخرى، يمكن لقاعدة دورة الحياة إخفاء ملف النسخة الاحتياطية.
- الجزء التالي من قاعدة دورة الحياة يحذف أي ملف بعد يوم واحد من إخفائه.
لذلك تحصل على نسخ احتياطي يومي. مدة الاحتفاظ هي أسبوع واحد لا يمكن خلاله حذف النسخ الاحتياطية بغض النظر عن أي شيء. ثم يتم حذف النسخ الاحتياطية بعد يومين. لذا فإن النسخة الاحتياطية تعيش لمدة 9 أيام تقريبًا.
آمل أن يساعد هذا شخصًا ما ![]()
في تفكير ثانٍ، ربما من الأفضل ترك Discourse يتعامل مع الاحتفاظ (maximum_backups). بهذه الطريقة، لن تبدأ النسخ الاحتياطية في الانتهاء تلقائيًا إذا كان Discourse معطلاً. لن ترغب في أن يتم حساب الوقت على انتهاء صلاحيتها أثناء محاولة الاستعادة. إذا اخترت هذا المسار، يمكنك تعيين maximum_backups=8 و s3_disable_cleanup=false في هذا المثال وعدم استخدام سياسة دورة حياة في B2. ستظل تستخدم سياسة قفل الكائن (7 أيام)، مع ذلك.
تعديل: في الواقع، أعتقد أنك لا تزال بحاجة إلى سياسة دورة حياة B2 لأنني أعتقد أن الملفات يتم “إخفاؤها” فقط ولا يتم حذفها عندما يقوم عميل S2 بحذفها. أنا أستخدم سياسة " Keep only the last version of the file "، وهي تعادل daysFromHidingToDeleting=1, daysFromUploadingToHiding=null.
أعتقد أنك يجب أن تفكر في الأمر وتقرر أي نهج هو الصحيح بالنسبة لك.
بالمناسبة، أدرك أن هناك بعض التداخل في هذا المنشور. أعتقد أنه مفيد كما هو، ولكن إذا أراد شخص ما، يمكنني إنشاء منشور أبسط قليلاً مع توصياتي الفعلية.