← رجوع

إدارة النسخ الاحتياطي في Laravel باستخدام laravel-backup

R

UNIXMAN

Feb 20, 2026

Article Image

Laravel Backup: كيف تدير النسخ الاحتياطية بدون ما تعتمد على الحظ

في أي مشروع حقيقي، النسخ الاحتياطي مو خيار إضافي… هو جزء من النظام نفسه. المشكلة مو في “هل عندك Backup؟”، المشكلة في: هل تقدر تعتمد عليه وقت الحاجة؟

واجهت أكثر من حالة كان فيها Backup موجود… لكن غير قابل للاسترجاع، أو ناقص، أو قديم. ومن هنا بدأت أتعامل مع موضوع النسخ الاحتياطي كـ System Design، مو مجرد أمر cron.


ليش laravel-backup؟

مكتبة spatie/laravel-backup تعطيك طريقة منظمة لبناء Backup فعلي:

  • نسخ قاعدة البيانات
  • نسخ الملفات (storage, uploads)
  • ضغطها في Archive واحد
  • رفعها لأي Storage (local أو S3 أو غيره)

بدل ما تكتب سكربتات متفرقة، كل شيء يكون تحت نظام واحد واضح.


التثبيت

composer require spatie/laravel-backup

بعدها:

php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

هذا ينشئ لك ملف config:

config/backup.php

كيف يشتغل فعليًا

المكتبة تعتمد على فكرة:

  • تحدد وش تبغى تنسخه
  • وين تبغى تخزنه
  • متى يتم التنفيذ

ثم تشغل:

php artisan backup:run

وينتج ملف zip يحتوي:

  • database dump
  • ملفات المشروع المحددة

تخصيص النسخ الاحتياطي

داخل config/backup.php تقدر تتحكم بكل شيء:

'source' => [
    'files' => [
        'include' => [
            base_path(),
        ],
        'exclude' => [
            base_path('vendor'),
            base_path('node_modules'),
        ],
    ],
],

الفكرة هنا:

  • لا تنسخ كل شيء بشكل أعمى
  • استبعد الأشياء اللي تقدر تعيد بناءها (vendor, cache)

ربط التخزين (S3 / MinIO)

تقدر تربطه بأي disk معرف في Laravel:

'destination' => [
    'disks' => [
        's3',
    ],
],

وهنا يجي الاستخدام الحقيقي:

  • S3 (AWS أو MinIO)
  • سيرفر خارجي منفصل

القاعدة المهمة: Backup ما ينحفظ في نفس السيرفر فقط.


تشغيل تلقائي (Scheduler)

بدل ما تشغله يدويًا:

// app/Console/Kernel.php

$schedule->command('backup:run')->daily();

وهذا يعتمد على cron:

* * * * * php /path-to-project/artisan schedule:run >> /dev/null 2>&1

هنا يصير عندك Backup يومي بدون تدخل.


تنظيف النسخ القديمة

واحدة من المشاكل اللي شفتها:

Backup يتراكم… لين يمتلئ السيرفر.

المكتبة تحل هذا:

$schedule->command('backup:clean')->daily();

وتقدر تحدد:

  • كم نسخة تحتفظ فيها
  • مدة الاحتفاظ

اختبار النسخ (أهم جزء)

أكبر خطأ: إنك تفترض إن Backup شغال.

المكتبة توفر:

php artisan backup:run --only-db

لكن الأهم:

  • جرب استرجاع فعلي
  • تأكد إن الملفات سليمة
  • تأكد إن قاعدة البيانات تفتح بدون مشاكل

Backup بدون Restore = وهم.


ملاحظات عملية من التجربة

  • لا تخزن Backup في نفس السيرفر فقط
  • لا تنسخ ملفات مؤقتة أو cache
  • راقب حجم النسخ بشكل دوري
  • اختبر الاسترجاع كل فترة

السؤال الحقيقي: هل تقدر ترجع النظام خلال دقائق لو صار شيء؟

رابط المكتبة : https://spatie.be/docs/laravel-backup/v10/introduction