الرئيسية
» كيف
»
أتمتة عمليات النسخ الاحتياطي المتسقة لـ Nextcloud باستخدام Restic و Cron
أتمتة عمليات النسخ الاحتياطي المتسقة لـ Nextcloud باستخدام Restic و Cron
لضمان موثوقية النسخ الاحتياطي لـ Nextcloud، أوقف نشاط المستخدم مؤقتًا، ثم صدّر قاعدة البيانات، واستخدم Restic لالتقاط هذا التصدير مع مجلدات التطبيق والبيانات. ضع المهمة في برنامج نصي مملوك للمستخدم الجذر وجدولها باستخدام cron؛ تحقق من اللقطات وقم بإجراء استعادة تجريبية قبل الاعتماد على الجدول الزمني.
يفترض هذا المثال وجود خادم Debian أو Ubuntu، وتثبيت مباشر لـ Nextcloud في المسار المحدد /var/www/nextcloud، ومجلد بيانات منفصل في المسار المحدد /srv/nextcloud-data، وقاعدة بيانات MariaDB. استبدل هذه القيم بمساراتك الفعلية واسم قاعدة البيانات. تمت مراجعة هذه الخطوات بالرجوع إلى دليل إدارة Nextcloud 35 ووثائق Restic 0.19.1 في أكتوبر 2026.
رسم توضيحي على غرار الطرفية للإجراءين اللذين يبدآن عملية النسخ الاحتياطي المتسقة: تمكين وضع الصيانة وتصدير قاعدة البيانات.
ما الذي يجب أن يحتويه ملف النسخ الاحتياطي في Nextcloud؟
تُشير إرشادات النسخ الاحتياطي لـ Nextcloud إلى أن الإعدادات والبيانات وقاعدة البيانات والسمات وأي تطبيقات مُخصصة هي الأجزاء المهمة التي يجب الاحتفاظ بها. عادةً ما يشمل النسخ الاحتياطي لمجلد التطبيق بالكامل إعداداته وتطبيقاته المُدمجة، ولكن تحقق مما إذا كانت التطبيقات المُخصصة أو السمات أو مجلد البيانات موجودة في مكان آخر على خادمك. أضف كل مسار على حدة في أمر Restic.
يُقفل وضع الصيانة الجلسات الحالية ويمنع تسجيل الدخول الجديد أثناء تشغيل النسخ الاحتياطي. هذا يقلل من احتمالية تغيير قاعدة البيانات والملفات في أوقات مختلفة، ولكنه يجعل Nextcloud غير متاح طوال مدة العملية. بالنسبة لمخزن بيانات كبير، يُنصح بجدولة المهمة في فترة زمنية هادئة. إذا كان خادمك يحتوي على برامج خارجية أو نصوص برمجية تكتب مباشرةً إلى دليل البيانات، فقم بإيقافها مؤقتًا أيضًا.
ثبّت Restic وعميل MariaDB باستخدام مصدر الحزم الموثوق به في توزيعتك. اختر مستودعًا على قرص مختلف أو وجهة نسخ احتياطي بعيدة. لا يوفر المستودع المخزن على خادم Nextcloud فقط حماية ضد فقدان هذا الخادم أو مساحة التخزين الخاصة به. لا تضع المستودع داخل أي من المجلدات المراد نسخها احتياطيًا.
يقوم Restic بتشفير بيانات المستودع، ولكنك تحتاج إلى كلمة مرور المستودع لاستعادتها. أنشئ ملف كلمة مرور واحتفظ بنسخة محمية منه خارج الخادم، مثلاً في مدير كلمات مرور معتمد. في حال فقدان كلمة المرور، لن يكون بالإمكان قراءة المستودع المشفر. تجنب وضع كلمة المرور مباشرةً في سطر الأوامر أو في جدول المهام (crontab) أو في أي برنامج نصي.
بالنسبة للخوادم الخلفية البعيدة، استخدم عنوان URL الخاص بمستودعها وبيانات الاعتماد الموثقة، والمخزنة بصلاحيات محدودة. يوفر Restic دليلًا لإعداد المستودع، يتضمن شرحًا لإعداد المستودع ومتغير بيئة ملف كلمة المرور المدعوم . قم بتهيئة مستودع جديد مرة واحدة فقط، وليس في كل تشغيل.
set -a
. /root/.config/restic/nextcloud.env
set +a
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 الاحتياطية التطبيق وملفات المستخدم ونسخة قاعدة البيانات التي تم إنشاؤها لهذه العملية.
قم بجدولة المهمة باستخدام cron وتحقق من النتيجة
بعد تشغيل المهمة يدويًا بنجاح، أضف إدخالًا رئيسيًا في جدول المهام (crontab) باستخدام الأمر التالي sudo crontab -e. يبدأ هذا المثال المهمة يوميًا في الساعة 2:30 صباحًا باستخدام المسار الكامل للبرنامج النصي، ويسجل المخرجات لتسهيل عملية استكشاف الأخطاء وإصلاحها.
يوفر Cron بيئة محدودة، لذا يقوم البرنامج النصي بتعيين وقت تشغيل صريح PATHوتحميل إعدادات Restic بنفسه. تأكد من تفعيل Cron على توزيعتك وأن هذا الوقت لا يتداخل مع وقت تشغيل مهمة Nextcloud الخلفية أو أي مهمة صيانة أخرى. يشرح دليل crontab الخاص بنظام Linux تنسيق الجدول الزمني والبيئة التي يوفرها Cron.
تأكد من إتمام المهمة بنجاح من خلال التحقق /var/log/nextcloud-restic.logمن الخروج الناجح وعرض اللقطات الحديثة:
يتحقق Restic بشكل طبيعي checkمن بنية المستودع. تستغرق قراءة البيانات الكاملة وقتًا أطول وقد تستهلك نطاقًا تردديًا كبيرًا للمستودع البعيد؛ لذا يُنصح بجدولة هذه العملية restic check --read-dataدوريًا، أو استخدامها --read-data-subsetللتحقق من أجزاء من البيانات على مدار فترة زمنية. راجع وثائق سلامة المستودع في Restic .
لا يُعدّ عرض اللقطات اختبارًا للاستعادة. استعد لقطة حديثة إلى مجلد مؤقت منفصل باستخدام الأمر المناسب ، ثم تأكد من وجود ملفات التطبيق ومجلد البيانات ونسخة SQL الاحتياطية. لا تقم بالاستعادة فوق تثبيت مباشر كاختبار. للاستعادة الفعلية، استعد الملفات وقاعدة البيانات كمجموعة واحدة متطابقة؛ تغطي تعليمات الاستعادةrestic restore latest --target /tmp/nextcloud-restore-test في Nextcloud إعادة إنشاء قاعدة البيانات واعتبارات مزامنة العميل.
يُوفر هذا الإعداد لقطات مُشفّرة قابلة للتكرار، لكن برنامج cron لا يُراقب حالات فشله، ولا يُحدد Restic سياسة الاحتفاظ بالبيانات. راجع السجل أو اضبط التنبيهات لحالات الفشل، واحتفظ بنسخة منفصلة من بيانات اعتماد المستودع، واختبر الاستعادة بانتظام. إذا كانت فترة الصيانة طويلة جدًا، فاستخدم لقطات مُنسقة لنظام الملفات وتصديرًا مُتوافقًا مع قاعدة البيانات مُصممًا لمنصة التخزين الخاصة بك، بدلًا من نسخ الملفات المُتغيرة احتياطيًا أثناء التشغيل.
يقوم الجدول الزمني بتشغيل البرنامج النصي المملوك للمستخدم الجذر يوميًا؛ وتُعد قائمة اللقطات بمثابة فحص سريع للتأكد من تسجيل عمليات التشغيل.