Sao lưu database với Google driver Laravel

Ở bài viết này chúng ta sẽ cùng tìm hiểu sao lưu database lên goole dirver với project laravel

Requirements

Cài đặt project laravel

Google Drive lưu trữ

Mysql

Kiến thức cơ bản về PHP thiết lập package trong laravel.

Installation

Chúng ta sẽ bắt đầu với việc cài đặt package spatie/laravel-backup vào project laravel.

$ composer require spatie/laravel-backup

Đăng ký service provider trong file config/app.php.

'providers' => [
     ...
     Spatie\Backup\BackupServiceProvider::class
]

Xuất bản file config.

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

Lên lịch trình chạy backupdate database custome mà sẽ ko send mail thông báo.

// Backups (to Google Drive)
$schedule->command('backup:clean --disable-notifications')->dailyAt('01:30');
$schedule->command('backup:run --only-db --disable-notifications')->dailyAt('01:35');

Thay đổi cấu hình file app/backup.php để sử dụng google diriver.

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

Cài đặt Flysystem để sử dụng Google Drive:

$ php artisan make:provider GoogleDriveServiceProvider.php

Sau đó trong file GoogleDriveServiceProvider.php vừa được tạo trong phương thức boot() chúng ta sẽ sửa lại như sau để thêm google driver cho filesystem.

\Storage::extend('google', function ($app, $config) {
    $client = new \Google_Client();
    $client->setClientId($config['clientId']);
    $client->setClientSecret($config['clientSecret']);
    $client->refreshToken($config['refreshToken']);
    $service = new \Google_Service_Drive($client);
    $adapter = new \Hypweb\Flysystem\GoogleDrive\GoogleDriveAdapter($service, $config['folderId']);
    return new \League\Flysystem\Filesystem($adapter);
});

Đăng ký GoogleDriveServiceProvider provider trong config/app.php

'providers' => [
     ...
    App\Providers\GoogleDriveServiceProvider::class,
]

Thêm lưu trữ về goole driver vào config/filesystems.php của chúng ta:

return [
  
    // ...
    
    'disks' => [
        
        // ...
        
        'google' => [
            'driver' => 'google',
            'clientId' => env('GOOGLE_DRIVE_CLIENT_ID'),
            'clientSecret' => env('GOOGLE_DRIVE_CLIENT_SECRET'),
            'refreshToken' => env('GOOGLE_DRIVE_REFRESH_TOKEN'),
            'folderId' => env('GOOGLE_DRIVE_FOLDER_ID'),
        ],
        
        // ...
        
    ],
    
    // ...
];

Cập nhật file .env của bạn:

GOOGLE_DRIVE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_DRIVE_CLIENT_SECRET=xxx
GOOGLE_DRIVE_REFRESH_TOKEN=xxx
GOOGLE_DRIVE_FOLDER_ID=null

Get Google credentials

Đi đến trang https://console.developers.google.com/ và tạo mới project của chúng ta. Tiếp theo chúng ta Library và tìm kiếm google driver và enable google driver api. Tiếp theo chúng ta sẽ tạo OAuth client ID

Tiếp theo chũng ta sẽ chọn Web Application và đặt tên cho nó. và cầ phải thêm Authorized redirect URIs tạo một khóa sản xuất riêng sau này và sau đó create.

Thêm https://developers.google.com/oauthplayground tạm thời, bởi vì bạn sẽ cần sử dụng nó trong bước tiếp theo.

Lúc này cửa sổ popup show lên sẽ có Your Client IDYour Client Secret. Tiếp theo chúng ta hãy đến trang: https://developers.google.com/oauthplayground. Hãy chắc chắn rằng URL to your Authorized redirect URIs ở bước trước là đúng đến trang web của bạn. Ở bên góc phải của màn hình click icon setting và check, Use your own OAuth credentials và bạn háy dán Client IDClient Secret vừa lấy được ở bước trước vào. Và thêm các ứng dụng được phép trùy cập vào google driver của bạn.

Sau đó nhấn button Authorize APIs và chấp nhận quyền truy cập. Tiếp theo chúng ta sẽ đến bước 2. và check vào Auto-refresh the token before it expires” và click “Exchange authorization code for tokens”.

Lúc này chúng ta đã lấy được Refresh token. Tiếp theo dựa vào các thông tin mới lấy được lúc trên chúng ta cập nhât .env

Update .env config

GOOGLE_DRIVE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_DRIVE_CLIENT_SECRET=xxx
GOOGLE_DRIVE_REFRESH_TOKEN=xxx
GOOGLE_DRIVE_FOLDER_ID=null

Để lấy id thư mục sao lưu chúng ta truy cập vào thư mục sau đó lấy ID sau đó cập nhật vào .env

Bây giờ chúng ta sẽ thực hiện công việc backup database .

Run bacth backup

backup:run --only-db

Nếu có lỗi bạn sẽ sửa lại config trong config/backup.php như sau rồi chạy lại.

'name' => env('GOOGLE_DRIVE_FOLDER_ID', ''),

Tiếp theo chúng ta sẽ kiểm tra kết quả trên thư mục mà chúng ta sao lưu kết quả. Bài viết của mình đến đây là hết hẹn gặp lại các bạn ở các bài viết tiếp theo: 😃

Tài liệu tham khảo:

https://console.developers.google.com/

https://developers.google.com/oauthplayground/

https://laravel.com/docs/7.x

https://medium.com/@dennissmink/laravel-backup-database-to-your-google-drive-f4728a2b74bd