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!