دليل النشر

استضافة Backrest على VPS: نسخ احتياطي مشفّر بلا سطر أوامر

انشر على VPS Cloud ←

دليل عملي

الأمان والمراقبة

استضافة Backrest على VPS: نسخ احتياطي مشفّر بلا سطر أوامر

الجميع يعلم أنه ينبغي أخذ نسخة احتياطية من الخادم. وقليلون من يفعلون فعلًا — لأن restic، أفضل أداة مفتوحة المصدر في هذا المجال، أداة سطر أوامر عليك أن تغلّفها بنفسك في سكريبتات ومهام cron. يزيل Backrest هذا الاحتكاك: المحرك نفسه والأمان نفسه، لكن من المتصفح. والأهم: نسخة احتياطية تخبرك حين تفشل.

7 دقائق للقراءة
المحتويات· المشكلة: النسخة الاحتياطية التي يؤجّلها الجميع1/9
  1. 01المشكلة: النسخة الاحتياطية التي يؤجّلها الجميع
  2. 02ما يضيفه Backrest فوق restic
  3. 03المتطلبات قبل التثبيت
  4. 04البنية: حاوية واحدة، وبياناتك تبقى لك
  5. 05اختيار مستودع التخزين
  6. 06انشر Backrest واحمِ خادم VPS في 6 خطوات
  7. 07استعادة ملف أو مجلد
  8. 08استكشاف المشكلات الشائعة وحلّها
  9. 09نصيحة: قاعدة 3-2-1 تبدأ بالخروج من الخادم

المشكلة: النسخة الاحتياطية التي يؤجّلها الجميع

أخذ نسخة احتياطية من خادم VPS هو العمل الذي يؤجّله الجميع، لأنه لا يعطي شيئًا إلى أن يعطي كل شيء. لقطات المزوّد عملية، لكنها تنسخ الجهاز كاملًا لدى المزوّد نفسه وفي المكان نفسه: فهي تحميك من أخطائك، لا من فقدان الحساب ولا من عطل في البنية التحتية. كما أن اللقطة لا تعيد إليك ملفًا واحدًا دُهس هذا الصباح.

الجواب المرجعي مفتوح المصدر هو ‎restic‎: تشفير من طرف إلى طرف، وإزالة تكرار، ولقطات تزايدية، ودعم لكل وسائط التخزين الكائني تقريبًا. عيبه الوحيد يتعلق بسهولة الاستخدام — فهو أداة سطر أوامر. وتبنّيه عمليًا يعني كتابة سكريبتاتك ومهام cron وسياسة الاحتفاظ والتقليم الدوري والمراقبة. كثيرون يتوقفون عند السكريبت الأول، ولا ينتبه أحد حين يكفّ عن العمل بصمت.

ما يضيفه Backrest فوق restic

  • واجهة ويب لإنشاء المستودعات وتشغيل النسخ وتصفّح اللقطات كشجرة ملفات.
  • جدولة بنمط ‎cron‎ لكل خطة، مع سياسات احتفاظ (احتفظ بـ N يوميًا وأسبوعيًا وشهريًا) تُعرَّف في المتصفح.
  • صيانة تلقائية للمستودع: ‎prune‎ مجدول لاستعادة المساحة و‎check‎ لاكتشاف التلف قبل أن تحتاج إلى النسخة.
  • استعادة دقيقة — ملف واحد أو مجلد — دون استعادة كاملة ودون توقف للخدمة.
  • خطافات عند البدء والنجاح والفشل: إشعار إلى ntfy أو Discord أو Slack أو أي webhook، أو تنفيذ أمر.
  • مستودعات وخطط متعددة جنبًا إلى جنب من نسخة واحدة.
  • ملف تنفيذي واحد بلغة Go، أقل من 100 ميغابايت من الذاكرة، بلا قاعدة بيانات — و‎restic‎ مضمّن في الصورة.

المتطلبات قبل التثبيت

‎Backrest‎ خفيف، لكن ثمة شروطًا مادية وبرمجية ينبغي التحقق منها قبل النشر. على صعيد الخادم، 512 ميغابايت من الذاكرة العشوائية هو الحد الأدنى الوظيفي — يكفي لجهاز مخصص للنسخ الاحتياطي؛ وإن كان الـ VPS يُشغّل خدمات أخرى، فـ 1 غيغابايت أكثر راحة. نسخة ‎restic‎ المضمّنة في صورة ‎Backrest‎ الدوكر محدَّثة دائمًا، لكن إن كنت تدير ‎restic‎ بشكل مستقل، تأكد من استخدام ‎restic ≥ 0.16.0‎: الإصدارات الأقدم لا تتعامل مع بعض سياسات الاحتفاظ ‎JSON‎ وقد تتجاهل قواعد ‎--keep-*‎ بصمت.

‎Backrest‎ يعرض واجهته على المنفذ ‎9898‎ (TCP). يجب أن يكون هذا المنفذ مفتوحًا في جدار الحماية (ufw allow 9898/tcp أو ما يعادله)، لكن لا ينبغي أن يكون متاحًا للعامة دون مصادقة. أخيرًا، مجلد بيانات ‎Backrest‎ — ‎/var/lib/backrest‎ في وصفة ServOrbit — يحتاج إلى صلاحية الكتابة للعملية داخل الحاوية: حجم Docker مُركَّب للقراءة فقط عن طريق الخطأ سيفشل في حفظ التغييرات بصمت.

البنية: حاوية واحدة، وبياناتك تبقى لك

‎Backrest‎ ملف تنفيذي واحد بلغة Go يضمّ ‎restic‎. يعمل في حاوية واحدة بلا قاعدة بيانات وبلا ذاكرة مؤقتة خارجية: إعداداته في ملف JSON وحالته في مجلد بيانات. هذا نقيض حزم النسخ الاحتياطي المؤسسية، وهو ما يجعله مناسبًا لخادم VPS متواضع.

المهم هو اتجاه التشفير. يشفّر ‎restic‎ كل لقطة محليًا على خادمك قبل أن يغادره أي بايت: لا تستقبل الوجهة سوى كتل مبهمة. وكلمة مرور المستودع هي المفتاح، وأنت وحدك تملكها — ما يعني أن التخزين يمكن أن يكون مزوّدًا رخيصًا وغير موثوق دون أي مشكلة سرّية، لكنه يعني أيضًا أن فقدان تلك الكلمة يجعل النسخ غير قابلة للقراءة نهائيًا.

في وصفة ServOrbit، تُركَّب مجلدات المضيف ‎/home‎ و‎/root‎ و‎/etc‎ للقراءة فقط تحت ‎/host‎ داخل الحاوية. وبذلك يستطيع ‎Backrest‎ نسخ بيانات الخادم وإعداداته دون أن يكون قادرًا بنيويًا على تعديلها.

اختيار مستودع التخزين

مرّر الجدول أفقيًا

Backendvalue
Backblaze B2موصى به للبداية. ~0.006 دولار/غيغابايت/شهر، بلا رسوم استيعاب، وخروج مجاني إلى شبكات Cloudflare. أنشئ حاوية خاصة، واصنع مفتاح تطبيق بصلاحيات مقيّدة بتلك الحاوية، والصق كليهما في ‎Backrest‎. يجعل إزالة التكرار في ‎restic‎ التكلفة الفعلية أقل بكثير من الحجم الخام.
S3 AWS أو MinIOمناسب للبنية التحتية الموجودة مسبقًا في منظومة AWS، أو لاستضافة تخزين كائني ذاتي على VPS ثانٍ (MinIO). نفس واجهة S3 — معاملات ‎Backrest‎ متطابقة، يتغير فقط عنوان الـ endpoint. AWS Glacier Instant Retrieval أرخص تكلفةً لكنه يُطيل وقت الاستعادة.
SFTP إلى VPS ثانٍلا حاجة لاشتراك خارجي إن كان لديك خادم ثانٍ. اضبط وصول SSH بمفتاح مخصص (بلا كلمة مرور، بصلاحيات مقيّدة بمجلد الوجهة)، ثم استخدم ‎`sftp:user@host:/path`‎ في ‎Backrest‎. مثالي للنسخ المتقاطع بين خادمَي ServOrbit في مراكز بيانات مختلفة.

انشر Backrest واحمِ خادم VPS في 6 خطوات

  1. أول تسجيل دخول

    عند فتح الرابط لأول مرة، يعرض ‎Backrest‎ شاشة الإعداد الأولي: تختارون معرّف النسخة (وهو نهائي)، ثم تنشئون بأنفسكم اسم المستخدم وكلمة المرور. افتحوا هذا العنوان فوراً.

استعادة ملف أو مجلد

تعمل الاستعادة في ‎Backrest‎ على مستويين بحسب الدقة المطلوبة.

من واجهة الويب: افتح تبويب ‎Snapshots‎ في خطتك، اختر لقطة بالتاريخ، تنقّل في شجرة الملفات وانقر ‎Restore‎ لأي ملف أو مجلد. يُطلق ‎Backrest‎ استعادة إلى مسار الوجهة الذي تحدده — مثلًا ‎/tmp/restore-test/‎ لتجنب الكتابة فوق الملف الحي.

من سطر أوامر ‎restic‎ (مفيد للاستعادات الكبيرة أو المبرمجة): ادخل إلى الحاوية بـ ‎docker exec -it backrest sh‎، ثم نفّذ ‎restic -r <your-repo-url> restore latest --target /tmp/restore/‎. لاستعادة مسار محدد أضف ‎--include /host/home/user/project‎. بعد الاستعادة، تحقق من سلامة اللقطة المصدر بـ ‎restic check --read-data-subset=5%‎.

استكشاف المشكلات الشائعة وحلّها

فشل صامت للـ cron. إن لم تُشغَّل الخطة رغم جدولة صحيحة، تحقق من أن الحاوية تعمل (‎docker ps‎) وأن ساعتها الداخلية متزامنة مع المضيف (مرّر ‎--env TZ=Europe/Paris‎ أو منطقتك الزمنية عند إنشاء الحاوية).

خطأ ‎wrong password or no key found‎. يظهر هذا الخطأ حين لا تتطابق الكلمة المدخلة مع المفتاح المخزون في المستودع. تحقق من عدم وجود مسافة أو محرف غير مرئي في الكلمة المنسوخة. إن فُقدت كلمة المرور، فالمستودع غير قابل للقراءة نهائيًا.

مساحة تخزين غير كافية على المستودع. فعّل ‎prune‎ التلقائي في خطتك لمنع تراكم اللقطات القديمة. على ‎Backblaze B2‎، يمكنك إضافة قاعدة دورة حياة على الحاوية لحذف الكائنات التي وضع عليها ‎restic‎ علامة الحذف تلقائيًا.

Backrest لا يستجيب على المنفذ 9898. تحقق أولًا من تشغيل الحاوية (‎docker ps‎)، ثم من ارتباط المنفذ (‎ss -tlnp | grep 9898‎). إن كانت الحاوية في حالة ‎restarting‎، راجع السجلات بـ ‎docker logs backrest --tail 50‎.

نصيحة: قاعدة 3-2-1 تبدأ بالخروج من الخادم

الخطأ الأكثر شيوعًا هو إرسال النسخ إلى قرص على الخادم نفسه، أو إلى وحدة تخزين لدى المزوّد نفسه. هذا يحميك من الحذف العرضي، لا من فقدان الجهاز أو الحساب. استهدف وجهة واحدة على الأقل خارج مستضيف الـ VPS: يكلّف ‎Backblaze B2‎ أو Wasabi بضعة يوروهات شهريًا مقابل عشرات الغيغابايتات، وبفضل إزالة التكرار في ‎restic‎ تبقى أشهر من الاحتفاظ اليومي أصغر بكثير مما تتوقع.

خادم يمكنك أن تتحمّل فقدانه

انشر Backrest على خادم ServOrbit وجدوِل نسخًا مشفّرة من طرف إلى طرف نحو التخزين الكائني الذي تختاره — مع استعادة على مستوى الملف مباشرة من المتصفح.