Laravel ile Sistem Yedeği Alma İşlemi

Merhaba,
Bu yazıda Laravel ile yedek alma işleminden bahsedeceğiz.

Eğer bir yazılım yaptıysak bu yazılımın yedeklerini alabileceğimiz sistemi de kurgulamamız gerekiyor.

Bu yazıda  spatie/laravel-backup kütüphanesinden bahsedeceğim.

Bu kütüphaneyi kullanarak, hem database hem de kodlarınızın yedeğini alabilirsiniz.

Github sayfasına erişmek için https://github.com/spatie/laravel-backup buraya tıklayınız.

Dokümantasyon sayfasına erişmek için ise https://spatie.be/docs/laravel-backup/v6/installation-and-setup adresine tıklayınız.

Dokümantasyon sayfasını inceleyerek de bir şeyler yapabilirsiniz. Yok ben incelemeyeceğim diyorsanız okumaya devam edin.

Efenim öncelikle bu paketi kuruyoruz.

composer require spatie/laravel-backup

Kendi ayarlarımızı girmek için vendor dosyasını publish etmemiz gerekiyor.

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

Bu komut ile birlikte, projeniz altındaki config dizininin altına backup.php adında bir dosya gelecek.

'source' => [

        'files' => [

           /*
            * The list of directories and files that will be included in the backup.
            */
             'include' => [
                base_path(),
             ],

           /*
            * These directories and files will be excluded from the backup.
            *
            * Directories used by the backup process will automatically be excluded.
            */
             'exclude' => [
                 base_path('vendor'),
                 base_path('node_modules'),
              ],

             /*
              * Determines if symlinks should be followed.
              */
              
              'follow_links' => false,

                /*
                 * Determines if it should avoid unreadable folders.
                 */

                'ignore_unreadable_directories' => false,

            ],

Yukarıdaki kod bloğu, backup.php dosyasından alınmıştır.

'include' => [
   base_path(),
],

Bu komut ile app dizini altında bulunan tüm dosyaları alacağımızı belirtiyoruz.

Eğer kodların yedeğini almak istemiyorsak - sadece database yedeğini almak istiyorsak mesela, Yorum satırı yapabiliriz.

'include' => [
   // base_path(),
],

Aşağıdaki kod satırı ile de yedek alırken hariç tutacağımız klasörleri belirtiyoruz.

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

Anlaşılacağı üzere, vendor ve node_modules klasörünü hariç tutuyoruz.

Yedeği, nereye alacağımızı belirtmek için aşağıdaki kod parçası kullanılıyor.

/*
 * The filename prefix used for the backup zip file.
 */
  'filename_prefix' => '',

  /*
   * The disk names on which the backups will be stored.
   */

  'disks' => [
      'local',
    ],

],

Yorumlardan anlaşılıyor aslında. 

Burada local denilen kısmı biraz açalım. Bu değer, yine config klasörü altında bulunan filesystems.php dosyasından geliyor.

Bu dosya içinde bulunan disks dizisine bakarsanız, local olarak belirlenen yer sizin projeniz altında bulunan storage klasörünüzü temsil ediyor.

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
     ],

    'public' => [
         'driver' => 'local',
         'root' => storage_path('app/public'),
         'url' => env('APP_URL').'/storage',
         'visibility' => 'public',
    ],

    's3' => [
         'driver' => 's3',
         'key' => env('AWS_ACCESS_KEY_ID'),
         'secret' => env('AWS_SECRET_ACCESS_KEY'),
         'region' => env('AWS_DEFAULT_REGION'),
         'bucket' => env('AWS_BUCKET'),
         'url' => env('AWS_URL'),
         'endpoint' => env('AWS_ENDPOINT'),
    ],

],

Biz hiçbir şeye dokunmadan şu komutu çalıştıralım .

php artisan backup:run

Eğer bir hata yapmadıysanız, storage altına  app adında bir klasör açılacak.

Backup dosyalarınız, storage/app/public/proje_adiniz/xxxxxx.zip adında bulunacaktır.

İçini açıp bakın. Onları da anlatmayacağım.

 

Mail ile Bilgilendirme
 

Eğer .env dosyasında mail gönderme ile ilgili tanımlamalarınız yaptıysanız, backup.php dosyasının yavaş yavaş altına inelim.
 

'notifications' => [

     'notifications' => [
        \Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail'],
        \Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => ['mail'],
        \Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail'],
        \Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail'],
        \Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail'],
        \Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail'],
     ],

        /*
         * Here you can specify the notifiable to which the notifications should be sent. The default
         * notifiable will use the variables specified in this config file.
         */
        'notifiable' => \Spatie\Backup\Notifications\Notifiable::class,

        'mail' => [
            'to' => 'admin@admin.com',

            'from' => [
                'address' => env('MAIL_FROM_ADDRESS', 'adminDefault@admin.com'),
                'name' => env('MAIL_FROM_NAME', 'Yedek'),
            ],
        ],

Evet, yukarıda bulunan mail dizisi içindeki gerekli yerleri doldurarak ( ben örnek verdim. Zaten anlaşılıyor ) her yedek alımından sonra sistem adminine mail atılmasını sağlayabilirsiniz.

Tabi hata gibi şeyler olduğunda da email atacak. Orayı zaten tahmin ediyoruz.

 

Peki Ya Farklı Bir Yere Yedek Almak İstiyorsak ?

Dikkat ettiyseniz, yedekleriniz hep uygulamanızın bulunduğu dizinde alınır. Peki ya uygulamanızın çalıştığı dizinde bir problem olursa, tüm yedekleri kayıp mı edeceğiz? Ben böyle bir riski almazdım açıkcası.

Bunun önüne geçmek için, windows D altında yedeklerim adında bir klasör açtım.

Ardından, filesystems.php dosyasındakil disks dizisini şu hale getirdim.
 

'disks' => [

   'local' => [
      'driver' => 'local',
      'root' => storage_path('app'),
    ],

   'public' => [
       'driver' => 'local',
       'root' => 'D:/yedeklerim/laravel',
       'url' => 'D:/yedeklerim/laravel',
       'visibility' => 'public',
   ],

  ........

 

Ardından, backup.php dosyasında bulunan destination dizisi altıdna bulunan disks kısmını da şu şekilde değiştirdim.

'destination' => [
 
     /*
      * The filename prefix used for the backup zip file.
      */

     'filename_prefix' => '',

    /*
     * The disk names on which the backups will be stored.
     */

     'disks' => [
        'public',
      ],

],

 

Hatırlarsanız, burada 'local' yazıyordu.

Şimdi test zamanı.

php artisan backup:run

 

Eğer bir sorun olmadıysa, D:/yedeklerim/laravel/proje_adiniz/xxxxxxxx.zip yolunda bir zip dosyanız olacak.

 

Evet, hepsi bu kadar..

 

 

 

 

 

1159 Görüntülenme

Yorum Yap