أتمتة عمليات النسخ الاحتياطي المتسقة لـ Nextcloud باستخدام Restic و Cron

لضمان موثوقية النسخ الاحتياطي لـ Nextcloud، أوقف نشاط المستخدم مؤقتًا، ثم صدّر قاعدة البيانات، واستخدم Restic لالتقاط هذا التصدير مع مجلدات التطبيق والبيانات. ضع المهمة في برنامج نصي مملوك للمستخدم الجذر وجدولها باستخدام cron؛ تحقق من اللقطات وقم بإجراء استعادة تجريبية قبل الاعتماد على الجدول الزمني.

يفترض هذا المثال وجود خادم Debian أو Ubuntu، وتثبيت مباشر لـ Nextcloud في المسار المحدد /var/www/nextcloud، ومجلد بيانات منفصل في المسار المحدد /srv/nextcloud-data، وقاعدة بيانات MariaDB. استبدل هذه القيم بمساراتك الفعلية واسم قاعدة البيانات. تمت مراجعة هذه الخطوات بالرجوع إلى دليل إدارة Nextcloud 35 ووثائق Restic 0.19.1 في أكتوبر 2026.

يوضح رسم توضيحي لطرفية مظلمة تفعيل وضع الصيانة في Nextcloud قبل تصدير قاعدة بيانات MariaDB.
رسم توضيحي على غرار الطرفية للإجراءين اللذين يبدآن عملية النسخ الاحتياطي المتسقة: تمكين وضع الصيانة وتصدير قاعدة البيانات.

ما الذي يجب أن يحتويه ملف النسخ الاحتياطي في Nextcloud؟

تُشير إرشادات النسخ الاحتياطي لـ Nextcloud إلى أن الإعدادات والبيانات وقاعدة البيانات والسمات وأي تطبيقات مُخصصة هي الأجزاء المهمة التي يجب الاحتفاظ بها. عادةً ما يشمل النسخ الاحتياطي لمجلد التطبيق بالكامل إعداداته وتطبيقاته المُدمجة، ولكن تحقق مما إذا كانت التطبيقات المُخصصة أو السمات أو مجلد البيانات موجودة في مكان آخر على خادمك. أضف كل مسار على حدة في أمر Restic.

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

تشرح تعليمات النسخ الاحتياطي الرسمية لـ Nextcloud مكونات قاعدة البيانات وخيارات تصديرها. يستخدم هذا الإجراء MariaDB؛ أما بالنسبة لـ PostgreSQL أو MySQL أو SQLite، فاستخدم أوامر النسخ الاحتياطي والاستعادة المطابقة في قسم قواعد البيانات من ذلك الدليل .

قم بإعداد شركة Restic وحماية بيانات اعتمادها

ثبّت Restic وعميل MariaDB باستخدام مصدر الحزم الموثوق به في توزيعتك. اختر مستودعًا على قرص مختلف أو وجهة نسخ احتياطي بعيدة. لا يوفر المستودع المخزن على خادم Nextcloud فقط حماية ضد فقدان هذا الخادم أو مساحة التخزين الخاصة به. لا تضع المستودع داخل أي من المجلدات المراد نسخها احتياطيًا.

يقوم Restic بتشفير بيانات المستودع، ولكنك تحتاج إلى كلمة مرور المستودع لاستعادتها. أنشئ ملف كلمة مرور واحتفظ بنسخة محمية منه خارج الخادم، مثلاً في مدير كلمات مرور معتمد. في حال فقدان كلمة المرور، لن يكون بالإمكان قراءة المستودع المشفر. تجنب وضع كلمة المرور مباشرةً في سطر الأوامر أو في جدول المهام (crontab) أو في أي برنامج نصي.

sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env

ضع كلمة مرور Restic المختارة في ملف كلمات المرور بشكل آمن. ضع موقع المستودع ومسار ملف كلمات المرور في ملف البيئة.

RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password

بالنسبة للخوادم الخلفية البعيدة، استخدم عنوان URL الخاص بمستودعها وبيانات الاعتماد الموثقة، والمخزنة بصلاحيات محدودة. يوفر Restic دليلًا لإعداد المستودع، يتضمن شرحًا لإعداد المستودع ومتغير بيئة ملف كلمة المرور المدعوم . قم بتهيئة مستودع جديد مرة واحدة فقط، وليس في كل تشغيل.

set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
يوضح الرسم التوضيحي الطرفي مسار مستودع Restic، ومسار ملف كلمة المرور، وأمر restic init.
مثال على إعدادات مستودع Restic مشفر؛ كلمة المرور نفسها تبقى في ملف محمي منفصل.

تحتاج بيانات اعتماد MariaDB أيضًا إلى الحماية. قم بتهيئة ملف خيارات العميل الذي يمكن قراءته بواسطة المستخدم الجذر، مثل /root/.my.cnfملف يحتوي على اسم مستخدم قاعدة البيانات وكلمة المرور والمضيف، ثم اضبط أذوناته 600. يقوم البرنامج النصي أدناه بتمرير هذا الملف إلى mariadb-dump، بحيث لا تظهر كلمة مرور قاعدة البيانات في وسائط العملية.

أنشئ برنامج نصي للنسخ الاحتياطي يعيد Nextcloud إلى الخدمة

احفظ ما يلي باسم /usr/local/sbin/nextcloud-restic-backup. اضبط NC_DATA_DIRو DB_NAMEليتوافق مع config/config.php. يقوم البرنامج النصي بتمكين وضع الصيانة، وتصدير MariaDB، ونسخ التطبيق والبيانات ونسخة SQL المؤقتة احتياطيًا، ثم يعطل وضع الصيانة حتى في حالة فشل أمر لاحق.

#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf

set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0

mountpoint -q /mnt/backup || {
  echo "Backup target is not mounted" >&2
  exit 1
}

install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0

cleanup() {
  if [[ "$maintenance_on" -eq 1 ]]; then
    sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
      logger -t nextcloud-restic "Could not disable maintenance mode"
  fi
  rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM

sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1

mariadb-dump --defaults-extra-file="$DB_CNF"   --single-transaction --default-character-set=utf8mb4 "$DB_NAME"   > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"

restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud

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

راجع مسارات الملفات قبل التشغيل الأول. إذا كان مجلد البيانات موجودًا بالفعل داخل مجلد التطبيق /var/www/nextcloud، فلا تفترض صحة المسار المذكور في المثال؛ استخدم مجلد البيانات الفعلي من إعدادات Nextcloud. تأكد أيضًا من تضمين التطبيقات أو السمات المخصصة المخزنة خارج مجلد التطبيق بشكل صريح.

يوضح رسم توضيحي في الطرفية قيام Restic بعمل نسخة احتياطية من دليل تطبيق Nextcloud، ودليل بيانات منفصل، ودليل مرحلي لتفريغ SQL.
تتضمن نسخة Restic الاحتياطية التطبيق وملفات المستخدم ونسخة قاعدة البيانات التي تم إنشاؤها لهذه العملية.

قم بجدولة المهمة باستخدام cron وتحقق من النتيجة

بعد تشغيل المهمة يدويًا بنجاح، أضف إدخالًا رئيسيًا في جدول المهام (crontab) باستخدام الأمر التالي sudo crontab -e. يبدأ هذا المثال المهمة يوميًا في الساعة 2:30 صباحًا باستخدام المسار الكامل للبرنامج النصي، ويسجل المخرجات لتسهيل عملية استكشاف الأخطاء وإصلاحها.

30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1

يوفر Cron بيئة محدودة، لذا يقوم البرنامج النصي بتعيين وقت تشغيل صريح PATHوتحميل إعدادات Restic بنفسه. تأكد من تفعيل Cron على توزيعتك وأن هذا الوقت لا يتداخل مع وقت تشغيل مهمة Nextcloud الخلفية أو أي مهمة صيانة أخرى. يشرح دليل crontab الخاص بنظام Linux تنسيق الجدول الزمني والبيئة التي يوفرها Cron.

تأكد من إتمام المهمة بنجاح من خلال التحقق /var/log/nextcloud-restic.logمن الخروج الناجح وعرض اللقطات الحديثة:

sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'

يتحقق Restic بشكل طبيعي checkمن بنية المستودع. تستغرق قراءة البيانات الكاملة وقتًا أطول وقد تستهلك نطاقًا تردديًا كبيرًا للمستودع البعيد؛ لذا يُنصح بجدولة هذه العملية restic check --read-dataدوريًا، أو استخدامها --read-data-subsetللتحقق من أجزاء من البيانات على مدار فترة زمنية. راجع وثائق سلامة المستودع في Restic .

لا يُعدّ عرض اللقطات اختبارًا للاستعادة. استعد لقطة حديثة إلى مجلد مؤقت منفصل باستخدام الأمر المناسب ، ثم تأكد من وجود ملفات التطبيق ومجلد البيانات ونسخة SQL الاحتياطية. لا تقم بالاستعادة فوق تثبيت مباشر كاختبار. للاستعادة الفعلية، استعد الملفات وقاعدة البيانات كمجموعة واحدة متطابقة؛ تغطي تعليمات الاستعادةrestic restore latest --target /tmp/nextcloud-restore-test في Nextcloud إعادة إنشاء قاعدة البيانات واعتبارات مزامنة العميل.

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

يوضح رسم توضيحي في الطرفية إدخال cron يومي لبرنامج Nextcloud Restic النصي إلى جانب أمر restic snapshots.
يقوم الجدول الزمني بتشغيل البرنامج النصي المملوك للمستخدم الجذر يوميًا؛ وتُعد قائمة اللقطات بمثابة فحص سريع للتأكد من تسجيل عمليات التشغيل.

اترك تعليقاً

أتمتة عمليات النسخ الاحتياطي المتسقة لـ Nextcloud باستخدام Restic و Cron

أتمتة عمليات النسخ الاحتياطي المتسقة لـ Nextcloud باستخدام Restic و Cron

قم بعمل نسخ احتياطية لملفات Nextcloud و MariaDB معًا، وجدول لقطات Restic المشفرة باستخدام cron، وتحقق من الاستعادة دون المخاطرة بالخادم المباشر.

تشغيل خادم أوبونتو في وضع الطوارئ: دليل إنقاذ خطوة بخطوة

تشغيل خادم أوبونتو في وضع الطوارئ: دليل إنقاذ خطوة بخطوة

قم بتشخيص وضع الطوارئ في خادم أوبونتو بأمان. اقرأ سجلات بدء التشغيل، وتحقق من مجلدات الجذر و fstab، وأصلح الوحدة المعطلة، وتعامل مع أخطاء نظام الملفات، وتحقق من إعادة التشغيل النظيفة.

نسخ احتياطي واستعادة صندوق بريد Zimbra CE باستخدام ملفات TGZ

نسخ احتياطي واستعادة صندوق بريد Zimbra CE باستخدام ملفات TGZ

قم بتصدير صندوق بريد فردي من إصدار Zimbra Community Edition، وتحقق من صحة نسخة TGZ الاحتياطية الخاصة به، واستعد العناصر المفقودة دون الكتابة فوق البريد الموجود.

السماح للمستخدمين المعتمدين بإنشاء غرف Jitsi باستخدام تسجيل الدخول عبر Keycloak

السماح للمستخدمين المعتمدين بإنشاء غرف Jitsi باستخدام تسجيل الدخول عبر Keycloak

السماح فقط للحسابات المعتمدة ببدء غرف Jitsi Meet باستخدام Keycloak ومصادقة الرمز المميز، مع إبقاء إمكانية انضمام الضيوف متاحة عند الحاجة.

مزامنة مستخدمي Active Directory مع ONLYOFFICE DocSpace عبر LDAP

مزامنة مستخدمي Active Directory مع ONLYOFFICE DocSpace عبر LDAP

قم بتوصيل ONLYOFFICE DocSpace بـ Active Directory أو OpenLDAP، واستورد المستخدمين والمجموعات بأمان، وقم بتعيين حقول الحساب، وجدول مزامنة موثوقة.

إضافة الخطوط إلى خادم مستندات ONLYOFFICE: دوكر مقابل لينكس

إضافة الخطوط إلى خادم مستندات ONLYOFFICE: دوكر مقابل لينكس

قم بتثبيت الخطوط المخصصة في خادم مستندات ONLYOFFICE، وقارن عمليات تحميل Docker الدائمة مع النسخ المباشرة، وأعد بناء قائمة الخطوط، وتحقق من النتيجة.

دبيان 12 على خادم افتراضي خاص ذي ذاكرة وصول عشوائي منخفضة: كيفية تقليل أعطال نفاد الذاكرة في MySQL

دبيان 12 على خادم افتراضي خاص ذي ذاكرة وصول عشوائي منخفضة: كيفية تقليل أعطال نفاد الذاكرة في MySQL

تشخيص عمليات إيقاف MySQL بسبب نفاد الذاكرة على Debian 12، والتحقق من حدود ذاكرة VPS، وتكوين التبديل، وضبط ذاكرة قاعدة البيانات والتزامن دون تقديم حل شامل.

تثبيت وتوقيع وحدات نواة مخصصة على نظام التشغيل SLES 15 Secure Boot

تثبيت وتوقيع وحدات نواة مخصصة على نظام التشغيل SLES 15 Secure Boot

قم بتحميل وحدة نواة SLES 15 مخصصة دون تعطيل خاصية التمهيد الآمن. طابق النواة قيد التشغيل، ووقّع ملف .ko، وسجّل مفتاح MOK، وتحقق من التحميل.

ضع مستندات ONLYOFFICE خلف HAProxy دون تعطيل التحرير

ضع مستندات ONLYOFFICE خلف HAProxy دون تعطيل التحرير

قم بتكوين HAProxy HTTPS، وإعادة توجيه الرؤوس، ومهلات WebSocket، وفحوصات السلامة لـ ONLYOFFICE Docs، ثم تحقق من التحرير والحفظ.

إعادة توجيه سجلات النظام الآمنة في SLES باستخدام rsyslog وبروتوكول TLS المتبادل

إعادة توجيه سجلات النظام الآمنة في SLES باستخدام rsyslog وبروتوكول TLS المتبادل

إرسال سجلات نظام SLES إلى جامع rsyslog عن بعد عبر TLS مصادق عليه، مع عمليات التحقق من الشهادات، وتخزين الانقطاعات مؤقتًا، واختبارات التسليم.