النسخ الاحتياطي والاستعادة

sections.operations

النسخ الاحتياطي والاستعادة

جولة احتفاظ ليلية، وسكربتات نسخ احتياطي تحت `scripts/backup/`، ومسار استعادة موثَّق لـMongo وPostgres وMinIO.

النسخ الاحتياطي والاستعادة

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

النسخ الاحتياطي مسؤولية المشغّل. يوفّر Skrum السكربتات وجولة الاحتفاظ، بينما توفّر أنت الجدول والوجهة الخارجية والمراقبة واختبارات التعافي.

أهداف التعافي والجدول

  • الوتيرة الموصى بها: نسخة كاملة كل ليلة واختبار استعادة كل ثلاثة أشهر. استخدم وتيرة كل ست ساعات أو أقل إذا لم يكن فقدان يوم من الكتابات مقبولًا.
  • RPO: يساوي على الأكثر الفترة بين مجموعتي نسخ ناجحتين بالإضافة إلى مدة التشغيل المنقطع؛ النسخ الليلي يستهدف 24 ساعة فقط عند مراقبة نجاح كل تشغيل.
  • RTO: حدّده باختبار زمني على حجم بيانات مماثل للإنتاج. أربع ساعات هدف تشغيلي أولي، لكن القياس الفعلي هو المرجع.
  • الاحتفاظ: نقطة بداية مناسبة هي 7 نسخ يومية و4 أسبوعية و12 شهرية، مع نسخة واحدة على الأقل خارج مضيف التطبيق ومخزن الكائنات الأساسي.

نبّه عند تفويت الجدول أو الخروج برمز غير صفري أو غياب MANIFEST.txt، ولا تحذف آخر مجموعة سليمة قبل اكتمال المجموعة الجديدة وملفات التحقق منها.

إنشاء نسخة احتياطية

./scripts/backup/backup-all.sh

تقرأ السكربتات متغيرات النسخ المطلوبة فقط من ملف .env في جذر المستودع عندما تكون غائبة عن بيئة العملية. المتغيرات الصريحة، حتى الفارغة، لها الأولوية؛ لا يتم تنفيذ الملف عبر source أو eval ولا تُطبع الأسرار.

المتغيرات المطلوبة هي MONGODB_URI وDATABASE_URL وS3_ENDPOINT وS3_ACCESS_KEY وS3_SECRET_KEY وS3_BUCKET. يكتب BACKUP_TARGET=local المجموعة تحت BACKUP_DIR، بينما يرفع BACKUP_TARGET=s3 حزمة متحققًا منها تحت BACKUP_S3_PREFIX. تُلتقط Mongo وPostgres وتخزين الكائنات بالتتابع؛ أوقف الكتابات الواردة ومهام العامل مؤقتًا للحصول على نقطة تعافٍ هادئة ومتسقة.

جولة الاحتفاظ

تؤرشف مهمة BullMQ يومية باسم retention-sweep الرسائل وتعليقات المهام وأحداث مخطط العمل المؤهَّلة للتقليم دون فقدان إلى تخزين بارد تحت archive/{accountId}/{kind}/{sha256}.ndjson.gz قبل الحذف. أيام الاحتفاظ لكل فئة تتبع historyDays (30 / 90 / 365 / غير محدود). الفئات غير المحدودة لا تفعل شيئًا.

توقعات الاستعادة

الاستعادة مدمّرة: تستخدم Mongo الخيار --drop، ويستخدم Postgres الخيار --clean --if-exists، ويزيل انعكاس تخزين الكائنات العناصر الزائدة. حدّد نافذة صيانة وأوقف كتابات API والعامل وتحقق من الوجهة قبل المتابعة.

./scripts/backup/restore-all.sh <BACKUP_SET_DIR_OR_S3_URI>

يتحقق الأمر من البيان الكامل وكل تجزئات الأرشيف قبل تعديل أي مخزن، ثم يستعيد Mongo وPostgres وMinIO. قبل إعادة فتح الكتابات:

  1. شغّل API والعامل وانتظر نجاح فحوص الصحة.
  2. اختبر تسجيل الدخول وقراءة مساحة عمل ومشروع ومهمة ورسالة وتنزيل ملف معروف.
  3. تحقق من طوابير العمل وحالة الترحيلات وسجلات التدقيق الحديثة.
  4. سجّل زمن البداية والنهاية ومجموعة النسخ ونتيجة الاختبار لتحديث RTO المقاس.

الأسئلة الشائعة

  • الاستضافة المُدارة؟ النسخ الاحتياطي مسؤوليتنا في الباقة المُدارة.
  • هل يمكنني تجاوز نافذة الاحتفاظ؟ نعم — retention_policies لكل حساب تُقيّد نحو الأسفل فقط.
  • هل يغني احتفاظ التطبيق عن نسخ التعافي؟ لا، دورة حياة مجموعات النسخ الكاملة سياسة تشغيلية مستقلة.

انظر أيضًا: وثائق Skrum