النسخ الاحتياطية: الاستعادة باستخدام JetBackup على الاستضافة المشتركة والنسخ الاحتياطي اليدوي على VPS
على الاستضافة المشتركة من Cloudesta، يمكنك استعادة الملفات أو قواعد البيانات أو حسابات البريد الإلكتروني أو الحساب بالكامل من cPanel → JetBackup 5: اختر تاريخ النسخة الاحتياطية، ثم اضغط Restore أو Download. أما على VPS سحابي، فلا يُنسخ أي شيء احتياطيًا ما لم تُعِدّ ذلك بنفسك. صدِّر قواعد بياناتك باستخدام mysqldump أو pg_dump، واضغط ملفاتك في أرشيف باستخدام tar، وشغّل المهمة كل ليلة عبر cron، ثم انسخ الناتج إلى خارج السيرفر باستخدام rclone أو scp. يشرح هذا الدليل الإعدادين معًا، بالإضافة إلى طريقة اختبار الاستعادة قبل أن تحتاج إليها فعلًا.
المتطلبات
- الاستضافة المشتركة: بيانات الدخول إلى cPanel.
- VPS: وصول SSH بصلاحيات root أو sudo على Ubuntu 22.04 أو 24.04.
- VPS: مساحة خارج السيرفر، مثل bucket متوافق مع S3 أو سيرفر ثانٍ يمكن الوصول إليه عبر SSH.
1. كيف أستعيد حساب cPanel الخاص بي باستخدام JetBackup؟
سجّل الدخول إلى cPanel وافتح JetBackup 5. تجده عادةً في قسم Files أو في قسم مستقل باسم JetBackup. تعرض القائمة النسخ الاحتياطية حسب نوعها، وقد تختلف المسميات قليلًا بين إصدارات JetBackup. تُضاف عمليات الاستعادة إلى قائمة انتظار، ويمكنك متابعة تقدمها من صفحة Queue.
استعادة الحساب بالكامل
افتح Full Account Backups، واختر تاريخًا، ثم اضغط Restore. سيؤدي ذلك إلى استبدال ملفاتك وقواعد بياناتك وبريدك الإلكتروني الحالية بالنسخة الاحتياطية.
استعادة المجلد الرئيسي (home) أو ملف واحد
افتح File Backups واختر تاريخًا. لاستعادة كل شيء، اضغط Restore. ولاستعادة عناصر محددة، استخدم خيار تحديد الملفات (Change Files Selection)، ثم تصفّح وصولًا إلى الملف أو المجلد، وحدّده، ثم نفّذ الاستعادة. لن يُستبدل إلا المسارات المحددة فقط.
استعادة قاعدة بيانات
افتح Database Backups، وحدّد قاعدة البيانات (مثل user_wp)، واختر التاريخ، ثم اضغط Restore. سيُستبدل المحتوى الحالي لقاعدة البيانات هذه. وإذا كان مستخدم قاعدة البيانات مفقودًا أيضًا، فاستعده كذلك من نوع النسخ الاحتياطية الخاص بمستخدمي قواعد البيانات.
استعادة حساب بريد إلكتروني
افتح Email Backups، وحدّد صندوق البريد (مثل info@example.com)، واختر تاريخًا، ثم اضغط Restore. إذا كان صندوق البريد قد حُذف، فأعد إنشاءه أولًا من Email Accounts.
تنزيل نسخة احتياطية وفهم مدة الاحتفاظ
اختر أي نسخة احتياطية واضغط Download. سيُنشئ JetBackup أرشيفًا في الخلفية، ويظهر رابط التنزيل بمجرد أن يصبح جاهزًا.
التواريخ التي تراها هي كل نقاط الاستعادة المتاحة. يعتمد عددها على جدول النسخ الاحتياطي في باقتك، ولا يمكن إعادة إنشاء النسخ الأقدم. إذا كنت تحتاج إلى سجل أطول، فنزّل نسخًا بنفسك بانتظام. توضّح باقات الاستضافة المشتركة لدينا جدول النسخ الاحتياطي لكل فئة.
2. ما الذي يجب أن أنسخه احتياطيًا على VPS؟
- المجلد الجذري للموقع (Web root): عادةً
/var/www. - قواعد البيانات: دائمًا في صورة ملفات تصدير (dumps). نسخ
/var/lib/mysqlأثناء تشغيل MySQL ينتج نسخة غير متسقة. - /etc: إعدادات Nginx/Apache وPHP وSSL وcron.
- وحدات تخزين Docker (volumes) وملفات compose: مثل وحدة بيانات n8n على استضافة n8n.
3. كيف أجدول نسخًا احتياطية ليلية لـ VPS باستخدام cron؟
أنشئ السكربت في المسار /usr/local/sbin/site-backup.sh. يقوم السكربت بما يلي:
- يصدّر كل قاعدة بيانات MySQL/MariaDB على حدة، لتتمكن من استعادة قاعدة واحدة فقط.
- يصدّر PostgreSQL بالتنسيق المخصص (custom format).
- يضغط ملفاتك في أرشيف مع تجاهل ملفات الكاش.
- يحفظ وحدة تخزين Docker.
- يحذف النسخ المحلية الأقدم من 7 أيام.
احذف الأجزاء التي لا تستخدمها.
#!/usr/bin/env bash
set -euo pipefail
DEST=/var/backups/site/$(date +%F)
mkdir -p "$DEST"
# MySQL / MariaDB (root uses socket auth on Ubuntu)
for db in $(mysql -N -e "SHOW DATABASES" | grep -Ev '^(information_schema|performance_schema|sys)$'); do
mysqldump --single-transaction --quick --routines --triggers "$db" | gzip > "$DEST/mysql-$db.sql.gz"
done
# PostgreSQL (one database)
runuser -u postgres -- pg_dump -Fc mydb > "$DEST/pg-mydb.dump"
# Files, skipping caches and dependencies
tar --exclude='*/cache/*' --exclude='*/node_modules' --exclude='*.log' \
-czf "$DEST/files.tar.gz" /var/www /etc /opt/n8n
# Docker volume (check names with: docker volume ls)
docker run --rm -v n8n_data:/data:ro -v "$DEST":/backup alpine \
tar -czf /backup/n8n_data.tar.gz -C /data .
# Keep 7 days locally
find /var/backups/site -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
اجعل السكربت قابلًا للتنفيذ، ثم جدوله ليعمل في الساعة 02:30 كل ليلة:
sudo chmod 700 /usr/local/sbin/site-backup.sh
echo '30 2 * * * root /usr/local/sbin/site-backup.sh >> /var/log/site-backup.log 2>&1' | sudo tee /etc/cron.d/site-backup
4. كيف أنسخ النسخ الاحتياطية إلى خارج السيرفر؟
النسخة الاحتياطية المخزّنة على نفس الـ VPS الذي تحميه تضيع معه إذا فُقد. لاستخدام خدمة تخزين كائنات (Object Storage) متوافقة مع S3، ثبّت rclone وأنشئ وجهة بعيدة (remote) باسم offsite:
sudo apt update && sudo apt install -y rclone
sudo rclone config
ثم أضف أحد هذين السطرين إلى نهاية السكربت. السطر الأول ينسخ إلى خدمة تخزين الكائنات باستخدام rclone. والسطر الثاني ينسخ إلى سيرفر آخر باستخدام scp، ويتطلب إعداد تسجيل الدخول بمفتاح SSH للمستخدم root.
rclone copy /var/backups/site offsite:my-bucket/server1
scp -r "$DEST" backup@203.0.113.20:/srv/backups/server1/
إذا كان الـ bucket يدعم قواعد دورة الحياة (lifecycle) أو الاحتفاظ (retention)، ففعّلها. بهذه الطريقة تنتهي صلاحية النسخ القديمة تلقائيًا، ولا يستطيع سيرفر مُخترَق حذف سجل لا ينبغي له المساس به.
5. كيف أستعيد نسخة احتياطية لـ VPS خطوة بخطوة؟
الخطوة 1: اجلب النسخة الاحتياطية وفك ضغطها في مجلد مؤقت. لا تفك ضغطها مباشرةً فوق /.
rclone copy offsite:my-bucket/server1/2025-01-15 /root/restore
mkdir -p /root/restore/files
tar -xzf /root/restore/files.tar.gz -C /root/restore/files
الخطوة 2: انسخ الملفات إلى مكانها وأصلح الملكية.
sudo rsync -a /root/restore/files/var/www/example.com/ /var/www/example.com/
sudo chown -R www-data:www-data /var/www/example.com
الخطوة 3: استعد قواعد البيانات. السطر الأول يستعيد قاعدة بيانات MySQL/MariaDB، والسطر الثاني يستعيد قاعدة بيانات PostgreSQL.
gunzip < /root/restore/mysql-wordpress.sql.gz | sudo mysql wordpress
sudo -u postgres pg_restore --clean --if-exists -d mydb /root/restore/pg-mydb.dump
الخطوة 4: استعد وحدة تخزين Docker. أوقف الحاوية أولًا:
cd /opt/n8n && docker compose stop
docker run --rm -v n8n_data:/data -v /root/restore:/backup alpine \
sh -c "cd /data && tar -xzf /backup/n8n_data.tar.gz"
docker compose start
6. هل يمكن لـ Cloudesta أخذ لقطة (Snapshot) لسيرفري قبل التغييرات الخطرة؟
نعم. قبل ترقية نظام التشغيل أو إجراء نقل كبير أو تثبيت لوحة تحكم، افتح تذكرة دعم واطلب لقطة لـ VPS سحابي الخاص بك. اذكر الوقت المفضل لديك. تُطلب استعادة اللقطات أيضًا عبر تذكرة دعم.
اللقطة شبكة أمان قصيرة المدى، ولا تغني عن نسخك الاحتياطية الخاصة.
اتبع قاعدة 3-2-1:
- احتفظ بـ 3 نسخ من بياناتك.
- خزّنها على نوعين مختلفين من وسائط التخزين.
- احتفظ بنسخة واحدة خارج الموقع.
إذا كنت تفضّل عدم صيانة السكربتات بنفسك، فإن خدمة Full Backup المُدارة من Cloudesta تتولى الجدولة والتخزين خارج الموقع والاستعادة نيابةً عنك. اسأل عنها في تذكرة دعم.
تحقّق من أن كل شيء يعمل
شغّل السكربت مرة واحدة يدويًا وراجع السجل. ثم تأكد من أن الأرشيفات قابلة للقراءة، واستعد قاعدة بيانات واحدة إلى قاعدة بيانات تجريبية:
sudo /usr/local/sbin/site-backup.sh && tail /var/log/site-backup.log
ls -lh /var/backups/site/$(date +%F)
gzip -t /var/backups/site/$(date +%F)/*.gz && echo "archives OK"
tar -tzf /var/backups/site/$(date +%F)/files.tar.gz | head
sudo mysql -e "CREATE DATABASE restore_test"
gunzip < /var/backups/site/$(date +%F)/mysql-wordpress.sql.gz | sudo mysql restore_test
sudo mysql -e "SHOW TABLES FROM restore_test; DROP DATABASE restore_test"
أخيرًا، شغّل rclone ls offsite:my-bucket/server1 وتأكد من وجود مجلد اليوم. كرّر اختبار الاستعادة هذا مرة واحدة على الأقل كل شهر.
مشكلات شائعة
- النسخ الاحتياطية كبيرة جدًا أو تملأ المساحة. شغّل
sudo du -sh /var/www/* | sort -hلمعرفة ما يستهلك أكبر حجم. أضف قواعد--excludeلملفات الكاش والسجلات والملفات المرفوعة القديمة، وقلّل مدة الاحتفاظ المحلي في سطرfind. - يتجمّد الموقع أثناء تشغيل mysqldump. الخيار
--single-transactionيمنع القفل على جداول InnoDB فقط. حوّل جداول MyISAM إلى InnoDB، وجدول المهمة خارج أوقات الذروة. - يعرض الموقع أخطاء 403 أو لا يستطيع حفظ الملفات المرفوعة بعد الاستعادة. فُقدت الملكية. شغّل
sudo chown -R www-data:www-data /var/www/example.com، ثمfind /var/www/example.com -type d -exec chmod 755 {} +وfind /var/www/example.com -type f -exec chmod 644 {} +. - يعرض mysqldump الخطأ "Access denied" عند تشغيله عبر cron. يجب أن تعمل المهمة بصلاحيات root الذي يستخدم المصادقة عبر socket. أو بدلًا من ذلك، ضع بيانات الدخول في
/root/.my.cnfمعchmod 600. - تاريخ JetBackup الذي تحتاجه غير موجود. لقد تجاوز مدة الاحتفاظ ولا يمكن إعادة إنشائه. استعد أقرب تاريخ متاح، أو افتح تذكرة دعم للتحقق من وجود نسخ على مستوى السيرفر.
الأسئلة الشائعة
هل تحذف الاستعادة باستخدام JetBackup ملفاتي الأحدث؟
لا يُستبدل بنسخة النسخة الاحتياطية إلا العناصر التي تستعيدها. استعد ملفًا واحدًا أو قاعدة بيانات واحدة متى أمكنك ذلك، وتجنّب الاستعادة الكاملة للحساب إلا عند الحاجة إليها.
هل يُنسخ VPS سحابي الخاص بي احتياطيًا تلقائيًا؟
لا. على VPS، النسخ الاحتياطي مسؤوليتك ما لم تُعِدّ السكربتات الموضحة أعلاه أو تستخدم خدمة Full Backup المُدارة من Cloudesta.
هل تكفي اللقطة (Snapshot) كنسخة احتياطية؟
لا. اللقطة نقطة رجوع سريعة مخزّنة مع السيرفر. احتفظ أيضًا بنسخ احتياطية منتظمة خارج الموقع وفقًا لقاعدة 3-2-1.
تحتاج إلى مساعدة؟ إذا واجهت عملية استعادة لا تستطيع إكمالها، أو أردت طلب لقطة أو مساعدة في إعداد النسخ الاحتياطية، افتح تذكرة دعم من منطقة العملاء.