Spatie laravel-backup - Dropbox disk installálás
2019 Oct.

A Spatie csapat laravel-backup csomagja kiváló mentési megoldás kisebb siteoknak, viszont alapból nem kínál megoldást külső tárhelyre történő mentére. Egyik lehetőségünk a Dropbox használata, viszont erről pontos, mindent magába foglaló leírást nem találni sehol. Igaz, Freek korábban készített egy blogcikket az új Dropbox v2-es használatáról, de számos apró részletet kihagyott, így nekünk kell összevadászni github issue-kból, stackoverflow-ról a részleteket. A cikk nem a backup csomag installálását mutatja be, az a dokumentációból könnyen kinézhető, csak a speciális lépéseket, hogy a Dropbox disket tudjuk tárolóként használni.

 

1. Először is installálnunk kell a Dropbox filesystem disk-et

composer require spatie/flysystem-dropbox


2. Majd létre kell hozni egy Service Provider-t, az alábbi tartalommal, ezt az App\Providers mappába tegyük

namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Illuminate\Support\ServiceProvider;
use Spatie\FlysystemDropbox\DropboxAdapter;

class DropboxServiceProvider extends ServiceProvider
{
    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        Storage::extend('dropbox', function ($app, $config) {
            $client = new DropboxClient(
                $config['authorizationToken']
            );

            return new Filesystem(new DropboxAdapter($client));
        });
    }

    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


3. Az config/app.php-ba adjunk hozzá a most létrehozott provider-t

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


4. A config/filesystems.php fájlban adjuk hozzá az új disket

'dropbox' => [
    'driver' => 'dropbox',
    'authorizationToken' => env('DROPBOX_AUTH_TOKEN')
],

Ezzel elérhetővé válik egy új system disk, amelyet Laravel szinten tudunk használni, de a backup csomag is erre fog menteni. Pl. fájl mentése az új diskre programunkból:

Storage::disk('dropbox')->put('file.txt', 'Ez a tartalom');


5. Dropbox-ban létre kell hozni egy új appot, és tokent generálni, amire szükségünk lesz. Ezt a developer konzolon tehetjük meg:

https://www.dropbox.com/developers/apps

- meg kell adjuk a mappa nevét, ahova a mentés kerül
- generálni kell egy Access Token-t (a Spatie authorization token-nek hívja..)
- ezt kimásolni és az .env fáljba beilleszteni 

DROPBOX_AUTH_TOKEN=dropboxtoken


6. Be kell állítanunk a config/backup.php -ben a dropbox disket. Akár több cél disket is megadhatunk, tömbben felsorolva

'destination' => [

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

    /*
     * The disk names on which the backups will be stored.
     */
    'disks' => [
        //'local',
        'dropbox'
    ],
],

Ha most lefuttatjuk akár lokálisan is a backup parancsot, fel fogja másolni a kimentett adatbázist/fájlokat a Dropbox mappába

php artisan backup:run --only-db
Starting backup...
Dumping database myproject...
Determining files to backup...
Zipping 1 files...
Created zip containing 1 files. Size is 582.73 KB
Copying zip to disk named dropbox...
Successfully copied zip to disk named dropbox.
Backup completed!