نسخ احتياطي لـ Discourse في قطرة DO إلى جهاز NAS

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

أنا لست مبرمجاً ولا أعرف من أين أبدأ في محاولة إنشاء إضافة لهذا الغرض.

أسهل طريقة هي تشغيل مهمة آلية من نوع ما (مهمة جدولة cron)، اعتمادًا على جهاز NAS الذي تملكه، يمكنك تشغيل بعض أوامر Linux الأساسية، مثل rsync.

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

rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas

القدرة على تشغيل شيء مثل هذا تعتمد، كما ذكرت أعلاه، على نوع جهاز NAS الذي تملكه.

شكرًا لك يا ماريو. لدي جهاز Netgear ReadyNAS Ultra 6 قديم يعمل بنظام OS6، وأعتقد أنه قد يدعم هذا النهج (سأقوم بالتحقق من ذلك).

أظن أن جزءًا من مشكلتي يكمن في تحديد الملفات أو المجلدات التي يجب نسخها احتياطيًا — أفترض أن الأمر يقتصر على قاعدة البيانات فقط؟ (وأفترض أن جميع الصور والمرفقات المنشورة مدمجة داخلها؟)

ما هو المسار الذي يجب استخدامه للعثور على قاعدة البيانات؟ هل قاعدة البيانات مخزنة كملف داخل مجلد Discourse؟ لقد تجولت في /var/discourse ولم ألاحظ أي شيء يبدو وكأنه ملف قاعدة بيانات، بعيني غير المدربة.

تريد تفعيل النسخ الاحتياطي اليومي والحصول على

 /var/discourse/shared/standalone/backups/default

شكرًا لك يا جاي - يبدو أن هذا هو الحل!
هل من المنطقي افتراض أنه إذا قمت بتعيين “تضمين التحميلات مع النسخ الاحتياطية”، فلا يوجد شيء آخر أحتاج إلى الاحتفاظ بنسخ احتياطية منه، في حال احتجت إلى البدء من جديد على خادم آخر؟

(بافتراض أن الإضافات من جهات خارجية التي كنت أستخدمها لن تصبح غير متاحة للتحميل مرة أخرى فجأة)

أيضًا، هل توجد طريقة لتنظيف مجلد النسخ الاحتياطية اليومية تلقائيًا بحيث لا يُحتفظ بأكثر من آخر 7 أيام من النسخ الاحتياطية اليومية على الخادم؟

نعم، توجد إعدادات في لوحة تحكم الإدارة، لكنني لا أتذكر الأسماء الآن. السكربت الذي أرسلته لك مسبقًا يستخدم بالفعل المسار الافتراضي حيث تُخزَّن النسخ الاحتياطية.

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

شكرًا لك يا ماريانو
في منتدى ReadyNAS، كان هناك اقتراح بأن استخدام chron على ReadyNAS ممكن ولكنه ليس مثاليًا، وأن مؤقتات systemd المدمجة أفضل. غير متأكد مما إذا كان ذلك يسمح بأي شيء متقدم مثل تنظيف المجلدات عن بُعد.

أنا حاليًا أواجه أخطاء ‘Permission denied (publickey)’ كلما حاولت الاتصال من ReadyNAS إلى خادم Discourse الخاص بي - على الرغم من أنني أضفت مفتاح ReadyNAS العام إلى قائمة مستخدمين SSH على Digital Ocean.

سأعود بالإبلاغ هنا إذا حققت أي تقدم، لأي شخص آخر يحاول ذلك.

يتم التنظيف مباشرة بواسطة Discourse في الـ droplet، لكن rsync يحتوي على عدد هائل من الخيارات، لذا يمكنك تخصيص عملية نسخ النسخ الاحتياطية حسب رغبتك.

تأكد من إعادة تشغيل خادم SSH، فذلك قد يحل بعض مشكلات المفاتيح العامة أحيانًا.

شكرًا لك ماريانو
أعدت تشغيل الخادم، وما زلت أحصل على:

تم رفض الإذن (publickey).
rsync: تم إغلاق الاتصال بشكل غير متوقع (0 بايت تم استلامها حتى الآن) [المستلم]
rsync error: خطأ غير مفسر (الرمز 255) في io.c(235) [المستلم=3.1.3]

لا شك أن المشكلة من جهتي، ربما أحاول تسجيل الدخول باسم مستخدم خاطئ أو شيء مشابه - رغم أنني حاولت تسجيل الدخول من ReadyNAS باستخدام الاسم الذي أعطيتُه للمفتاح العام عند إضافته إلى Digital Ocean، وكذلك باستخدام ‘root’. ولا يبدو أن أيًا منهما يعمل.

هل قمت بالفعل بتسجيل الدخول إلى الخادم باستخدام مفتاح؟ مثلما حدث عند تثبيت Discourse أو إعادة بناء التطبيق؟

قد يكون (رغم أنه لا ينبغي) أن مصادقة SSH في الخادم معطلة، أو ربما يستخدم NAS المفتاح الخاطئ لتسجيل الدخول.

تذكر تغيير اسم المفتاح والمسار الصحيحين في هذا الجزء من الأمر "ssh -i ~/.ssh/id-rsa"

*** تعديل ***
شكرًا لك يا ماريانو. نجح الأمر في النهاية.

باختصار، ولأي شخص آخر يحاول ذلك:

  1. فعّل SSH على جهاز ReadyNAS: ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support

  2. استخدم PuTTY للوصول إلى خادم Digital Ocean واكتب:

nano /root/.ssh/authorized_keys

  1. في المحرر، انسخ والصق نص المفتاح العام المستخدم من قبل ReadyNAS، وأضفه في نهاية ملف /root/.ssh/authorized_keys (توخَّ الحذر من عدم الكتابة فوق المفاتيح الموجودة مسبقًا).

  2. في إعدادات مربع حوار النسخ الاحتياطي على ReadyNAS، استخدمت ما يلي:

الاسم: Backup via Rsync over remote SSH (اختيار من القائمة المنسدلة)
المضيف: mydomain.com (أو عنوان IP للخادم)
المنفذ: 22
المسار: /var/discourse/shared/standalone/backups/default
تسجيل الدخول: root

(ملاحظة: إذا اتبعت تعليمات إعداد ReadyNAS للوصول عبر SSH بشكل صحيح، فلن يكون هناك عبارة مرور (passphrase) مرتبطة بزوج المفاتيح العام/الخاص لـ SSH. وهذا أمر بالغ الأهمية، لأن مربع حوار النسخ الاحتياطي على ReadyNAS لا يوفر حقلًا لعبارة المرور).

في البداية، لم يعمل هذا الإجراء بشكل كامل بالنسبة لي - فاستخدام زر “اختبار” في مربع حوار النسخ الاحتياطي على ReadyNAS بهذه الإعدادات أدى إلى اتصال ناجح، لكن عند بدء عملية النسخ الاحتياطي ظهر خطأ “تم تجاوز حد القرص (122)”.
لكن بعد بضع ساعات، دون أي تدخل واضح إضافي مني، عندما بدأت عملية النسخ الاحتياطي تلقائيًا في الساعة المحددة مسبقًا،这一次 نجحت كما ينبغي.

ربما كان لجهودي السابقة في تحقيق اتصال واختبار باستخدام إعدادات مختلفة تأثير متبقي عرقل العملية، أو ربما كان تسجيل الدخول المتزامن إلى الخادم من جهاز الكمبيوتر الخاص بي كمستخدم root عبر PuTTY وفي الوقت نفسه كمستخدم root عبر FileZilla (كلاهما يستخدم المفتاح الافتراضي لـ root)، ثم محاولة تسجيل الدخول كمستخدم root عبر أداة النسخ الاحتياطي على جهاز ReadyNAS (باستخدام المفتاح العام لـ ReadyNAS الذي تم إضافته إلى root) كان سببًا في المشكلة.