كيف تنسخ حاوية Docker لـRabbitMQ احتياطيًا (2026)
نسخ RabbitMQ بأمان قاعدةٌ واحدة: فرّغ ولا تنسخ. ينتج `rabbitmqctl export_definitions /tmp/definitions.json` تفريغًا متسقًا قابلًا للاستعادة من الحاوية العاملة، يشفّره restic بعدها خارجيًا. يلتقط تصدير التعريفات طوبولوجيا الوسيط كاملة بصيغة JSON — الجزء الدائم من RabbitMQ — بينما مخزن رسائل Mnesia الحي غير متسق لحظيًا تحت الحمل. كل ما ينسخ /var/lib/rabbitmq/mnesia حيًا يخاطر بنسخة غير قابلة للاستعادة.
ما يكتشفه Dockstash
| متغيرات البيئة المكتشفة | RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_DEFAULT_VHOST |
|---|---|
| المنفذ الافتراضي | 5672 |
| مسارات البيانات الحية (لا تُنسخ حية أبدًا) | /var/lib/rabbitmq/mnesia |
| أمثلة الصور | rabbitmq:3.13-management, rabbitmq:3-management, rabbitmq |
انسخ RabbitMQ مع Dockstash خطوة بخطوة
أنشئ حساب Dockstash وافتح لوحة التحكم
سجّل مجانًا على app.dockstash.com/register. يسألك معالج الإعداد لمرة واحدة عن خادم التخزين VPS (الجهاز الذي سيحتفظ بالنسخ الاحتياطية المشفّرة) ويولّد كلمة مرور تشفير — احفظها فورًا في مدير كلمات مرور، فهي تُعرض مرة واحدة فقط.
أضف مشروع Docker الذي يشغّل RabbitMQ
في شاشة Projects يكتشف Dockstash تلقائيًا كل مجلد مشروع Compose على الخادم (افتراضيًا تحت /var/www). اختر المشروع الذي يحتوي خدمة RabbitMQ. لم يُنسخ شيء بعد — أنت فقط تخبر Dockstash أين يقيم المشروع.
تحقق من اكتشاف RabbitMQ
افتح المشروع وتبويب Plan. يقرأ Dockstash ملف docker-compose.yml ويتعرف على صورة rabbitmq ويضيف طبقة تُصدّر تعريفات الوسيط — مع اسم الحاوية والمتغيرات المكتشفة (RABBITMQ_DEFAULT_USER وRABBITMQ_DEFAULT_PASS وRABBITMQ_DEFAULT_VHOST). فعّل أو عطّل الملفات والقواعد وإعدادات الوكيل قبل الحفظ.
اختياري: تحقق من التصدير يدويًا
إن أردت دليلًا قبل الأتمتة، نفّذ rabbitmqctl export_definitions داخل الحاوية. يكتب ملف JSON يصف طوبولوجيا الوسيط كاملة — vhosts والتبادلات والطوابير والارتباطات والمستخدمين والسياسات. افتحه وستتعرف على كل طابور يعلنه تطبيقك؛ هذا JSON هو ما يُنسخ.
docker exec <rabbitmq-container> rabbitmqctl export_definitions /tmp/definitions.jsonأكّد وجهة التخزين
تُخزَّن النسخ كلقطات restic مشفّرة على خادم التخزين VPS الخاص بك عبر SSH. إن أكملت معالج الإعداد فهي مهيّأة بالفعل؛ ويمكنك تغيير المضيف والمستخدم والمنفذ ومفتاح SSH في أي وقت من Settings → Storage.
اضبط جدول النسخ الاحتياطي
في تبويب Schedule اختر يوميًا أو أسبوعيًا أو cron مخصصًا (يُتحقق أثناء الكتابة). اليومي يكفي معظم الوسطاء وزيادة — الطوبولوجيا تتغير عند النشر لا كل دقيقة. أضف prune أسبوعيًا مع سياسة الاحتفاظ.
شغّل أول نسخة احتياطية الآن
انقر Backup Now. ينفّذ Dockstash الأمر rabbitmqctl export_definitions في الحاوية العاملة ويسلّم JSON مع ملفات مشروعك إلى restic — تابع المخرجات في لوحة السجلات. تُصدَّر التعريفات نظيفة والوسيط يخدم الزيارات؛ لا إيقاف ولا قفل.
تأكد من وجود اللقطة
عند انتهاء التشغيل تعرض بطاقة المشروع وقت آخر نسخة وعدد اللقطات وحجم المستودع. افتح شاشة Snapshots وسترى نقطة الاستعادة في الخط الزمني — هذا دليلك على وصول النسخة إلى موقعها الخارجي.
أمر التفريغ
rabbitmqctl export_definitions /tmp/definitions.jsonأمر الاستعادة
rabbitmqctl import_definitions /tmp/definitions.jsonيلتقط تصدير التعريفات طوبولوجيا الوسيط كاملة بصيغة JSON — الجزء الدائم من RabbitMQ — بينما مخزن رسائل Mnesia الحي غير متسق لحظيًا تحت الحمل.
استعد نسخة RabbitMQ وأثبت أنها تعمل
نسخة RabbitMQ لا تصبح حقيقية إلا بعد استعادتها. استعادات Dockstash لا تكتب فوق الوسيط الحي افتراضيًا — إلى موقع جديد أولًا، تحقق من الطوبولوجيا، ثم ترقية واعية. تذكّر ما تستعيده: JSON التعريفات يعيد بناء الطوبولوجيا لا الرسائل التي كانت في الطوابير.
اختر نقطة استعادة
افتح Snapshots واختر المشروع وتصفح الخط الزمني. كل صف يحوي JSON التعريفات المُصدَّر — طوبولوجيا الوسيط الكاملة عند تلك اللحظة — مع ملفات المشروع من التشغيل نفسه.
استعد إلى موقع جديد
انقر Restore وأبقِ الوضع الافتراضي «Restore to new location». اكتب اسم المشروع للتأكيد — إجراء متعمّد بتأكيد مكتوب. يهبط التفريغ والملفات في المسار الهدف الذي تختاره دون المساس بالمشروع الحي.
تحقق من الطوبولوجيا المستعادة
نفّذ rabbitmqctl list_queues على الوسيط التجريبي: يطبع كل طابور بعدد رسائله. يجب أن يظهر كل طابور يعلنه تطبيقك (الأعداد صفر — الرسائل ليست جزءًا من النسخة). تحقق من التبادلات والارتباطات والمستخدمين والسياسات بالمثل أو من واجهة management.
docker exec <rabbitmq-container> rabbitmqctl list_queuesرقِّ النتيجة عند الاقتناع
بعد التحقق من البيانات المستعادة وجّه تطبيقك إليها (أو أعد الاستعادة بوضع «Overwrite existing» — موافقة صريحة). الأفضل: دع تدريب الاستعادة الأسبوعي ينتج هذا الدليل تلقائيًا كي لا تكون الاستعادة الحقيقية أول بروفة لك.
مطبات يجب تجنبها
- انسخ تعريفات الوسيط (الطوبولوجيا) عبر export_definitions — هذا الجزء الدائم القابل للاستعادة من RabbitMQ.
- يحمل مخزن رسائل Mnesia الرسائل العابرة ولا يؤمَن نسخه حيًا؛ عامل الرسائل المخزنة على أنها عابرة واعتمد على المنتجين/المستهلكين للتعافي.
- استعادة التعريفات تعيد الطوبولوجيا لا الرسائل التي كانت في الطوابير وقت النسخ.
مشكلات شائعة في نسخ RabbitMQ
- العرض
- «نجحت» الاستعادة لكن كل الطوابير فارغة.
- السبب
- التعريفات والرسائل شيئان مختلفان. يلتقط export_definitions الطوبولوجيا — vhosts والتبادلات والطوابير والارتباطات والمستخدمين والسياسات — ولا يلتقط أبدًا أجساد الرسائل المصفوفة وقت النسخ.
- العلاج
- هذا متوقع. عامل رسائل الطوابير على أنها عابرة: منتجون يعيدون النشر ومستهلكون يتحملون الإعادة. الرسالة التي يجب أن تنجو من فقدان الوسيط تُخزَّن في قاعدة بيانات لا في طابور.
- العرض
- وسيط أُقلع من نسخة لدليل /var/lib/rabbitmq/mnesia ينهار أو يرفض الإقلاع.
- السبب
- يُكتب Mnesia باستمرار والوسيط يعمل: النسخة الحية غير متسقة داخليًا — والمخزن مرتبط أيضًا باسم العقدة فينكسر على مضيف باسم مختلف.
- العلاج
- لا تنسخ Mnesia كنسخة احتياطية. صدّر التعريفات واستوردها في وسيط جديد؛ هذا هو المسار المدعوم القابل للاستعادة.
- العرض
- import_definitions في وسيط عامل يخطئ أو يترك خليطًا من طوبولوجيا قديمة وجديدة.
- السبب
- الاستيراد يندمج مع الموجود — معاملات طوابير متعارضة أو مستخدمون قائمون أو سياسات تتصادم مع مدخلات JSON بدل استبدالها.
- العلاج
- استورد في وسيط جديد كلما أمكن. إن اضطررت إلى وسيط عامل: توقّع دمجًا لا تصفيرًا — احذف الكيانات المتعارضة أولًا وتحقق من النتيجة بـrabbitmqctl list_queues وواجهة management.
أنجزه بنقرة واحدة مع Dockstash
ينفّذ Dockstash التفريغ أعلاه بالضبط ويسلّمه إلى restic خارجيًا ويختبر الاستعادة بتدريب تلقائيًا — بلا سكربت تصونه.
آخر تحديث: July 2026
الأسئلة الشائعة
أي جزء من RabbitMQ أنسخ؟
التعريفات: vhosts والتبادلات والطوابير والارتباطات والمستخدمون والسياسات. تصديرها JSON يلتقط طوبولوجيا الوسيط كاملة — ما تحتاجه فعلًا لإعادة البناء بعد الفقد.
هل يمكن نسخ الرسائل القابعة في الطوابير؟
ليس بموثوقية والوسيط يعمل. مخزن Mnesia غير متسق لحظيًا تحت الحمل والرسائل مصممة عابرة. صمّم مستهلكين يتحملون الإعادة بدل الاعتماد على نسخة رسائل.
كيف أستعيد وسيط RabbitMQ؟
أنشئ وسيطًا جديدًا ونفّذ rabbitmqctl import_definitions بJSON المُصدَّر. تُعاد الطوبولوجيا الكاملة — التبادلات والطوابير والارتباطات والمستخدمون والسياسات.
هل نسخ /var/lib/rabbitmq/mnesia نسخة احتياطية صالحة؟
لا. يُكتب Mnesia باستمرار والنسخة الحية غير متسقة. صدّر التعريفات بدلًا من ذلك؛ هذا المسار المدعوم.
كم مرة يجب نسخ RabbitMQ؟
اليومي يكفي وزيادة — التعريفات لا تتغير إلا عند نشر طوابير أو مستخدمين أو سياسات جديدة. في Free النسخ يدوي (Backup Now)؛ Pro حتى الساعي وBusiness أي cron.
أين تعيش النسخ الاحتياطية فعليًا؟
على خادم التخزين VPS الخاص بك، كلقطات restic مشفّرة تُدفع عبر SSH. لا يحتفظ Dockstash ببياناتك أبدًا على سحابة طرف ثالث — أنت توجّهه إلى جهاز تتحكم فيه، والمستودع مشفّر بكلمة مرور لا يملكها سواك.
كيف أعرف أن النسخة قابلة للاستعادة دون استعادة يدوية؟
جدوِل تدريب استعادة. يستعيد Dockstash أحدث لقطة إلى مساحة عمل معزولة، ويقارن كل ملف بايتًا ببايت مع المصدر، ويتحقق من التفريغ المستعاد — ثم يختم المشروع بشارة نجاح/فشل. تدريب أسبوعي يعني دليلًا طازجًا دائمًا.