This package provides a Filament page that you can create backup of your application. You'll find installation instructions and full documentation on spatie/laravel-backup.
You can install the package via composer:
composer require shuvroroy/filament-spatie-laravel-backupPublish the package's assets:
php artisan filament:assetsYou can publish the lang file with:
php artisan vendor:publish --tag="filament-spatie-backup-translations"You first need to register the plugin with Filament. This can be done inside of your PanelProvider, e.g. AdminPanelProvider.
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(FilamentSpatieLaravelBackupPlugin::make());
}
}If you want to override the default Backups page icon, heading then you can extend the page class and override the navigationIcon property and getHeading method and so on.
<?php
namespace App\Filament\Pages;
use ShuvroRoy\FilamentSpatieLaravelBackup\Pages\Backups as BaseBackups;
class Backups extends BaseBackups
{
protected static ?string $navigationIcon = 'heroicon-o-cpu-chip';
public function getHeading(): string | Htmlable
{
return 'Application Backups';
}
public static function getNavigationGroup(): ?string
{
return 'Core';
}
}Then register the extended page class on AdminPanelProvider class.
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use App\Filament\Pages\Backups;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->usingPage(Backups::class)
);
}
}If you're using Spatie Laravel Permission or Filament Shield, you need to manually define the permissions used by this backup panel.
download-backup– Allows downloading existing backups.delete-backup– Allows deleting backups from the panel.
You can create a seeder to register these permissions and assign them to a role:
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class BackupPermissionSeeder extends Seeder
{
public function run(): void
{
// Create permissions
$permissions = [
'download-backup',
'delete-backup',
];
foreach ($permissions as $permission) {
Permission::firstOrCreate(['name' => $permission]);
}
// Assign to a role (optional)
$role = Role::firstOrCreate(['name' => 'backup']);
$role->givePermissionTo($permissions);
// Assign role to a user (optional)
$user = \App\Models\User::find(1); // Change ID as needed
if ($user && !$user->hasRole('backup')) {
$user->assignRole('backup');
}
}
}Run the seeder using:
php artisan db:seed --class=BackupPermissionSeederAfter this, users with the backup role will have full access to the backup panel.
You can customise the polling interval for the Backups by following the steps below:
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->usingPolingInterval('10s') // default value is 4s
);
}
}You can customise the queue name for the Backups by following the steps below:
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->usingQueue('my-queue') // default value is null
);
}
}You can customise the timeout for the backup job by following the steps below:
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->timeout(120) // default value is max_execution_time from php.ini, or 30s if it wasn't defined
);
}
}For more details refer to the set_time_limit function.
You can also disable the timeout altogether to let the job run as long as needed:
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->noTimeout()
);
}
}You can customise who can access the Backups page by adding an authorize method to the plugin.
The method should return a boolean indicating whether the user is authorised to access the page.
<?php
namespace App\Providers\Filament;
use Filament\Panel;
use Filament\PanelProvider;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(
FilamentSpatieLaravelBackupPlugin::make()
->authorize(fn (): bool => auth()->user()->email === 'admin@example.com'),
);
}
}Please see UPGRADE for details on how to upgrade 1.X to 2.0.
composer testPlease see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.