Installation
composer require xatta-trone/laravel-backup-ui
php artisan vendor:publish --provider="XattaTrone\BackupUI\BackupUIServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="XattaTrone\BackupUI\BackupUIServiceProvider" --tag="config") if customization is needed.Configuration
config/backup-ui.php to define backup sources (e.g., databases, files, directories).'sources' => [
'database' => [
'type' => 'database',
'name' => 'main_db',
'connection' => 'mysql',
],
'files' => [
'type' => 'files',
'path' => storage_path('app'),
],
],
First Use Case
php artisan backup:run
/backup-ui (default route) to view, download, or restore backups.Backup Scheduling
app/Console/Kernel.php) to automate backups:
$schedule->command('backup:run')->dailyAt('2:00');
config/backup-ui.php:
'schedule' => [
'frequency' => 'daily',
'retention_days' => 7,
],
Dynamic Backup Sources
namespace App\Backups;
use XattaTrone\BackupUI\Contracts\BackupSource;
class CustomSource implements BackupSource {
public function backup() { ... }
public function restore() { ... }
}
config/backup-ui.php:
'sources' => [
'custom' => [
'type' => 'custom',
'class' => \App\Backups\CustomSource::class,
],
],
UI Integration
php artisan vendor:publish --provider="XattaTrone\BackupUI\BackupUIServiceProvider" --tag="views"
resources/views/vendor/backup-ui/.Storage Backends
config/backup-ui.php:
'storage' => [
'driver' => 's3',
'config' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'bucket' => 'my-backups',
],
],
Permission Issues
storage/backups).Large File Handling
upload_max_filesize or post_max_size.'chunk_size' => 1024 * 1024 * 50, // 50MB chunks
Database-Specific Quirks
'database' => [
'lock_tables' => true,
],
pg_dump with --clean for schema-only backups.Retention Policy Gaps
'retention' => [
'keep' => 30, // Keep 30 backups
'strategy' => 'oldest-first', // or 'newest-first'
],
Log Backups: Enable logging in config/backup-ui.php:
'logging' => true,
Check logs at storage/logs/laravel.log.
Dry Runs: Test backups without saving:
php artisan backup:run --dry-run
Manual Triggers: Debug failed backups by running commands manually:
php artisan backup:run --source=database
Custom Notifications
BackupCompleted event to send alerts (e.g., Slack, Email):
use XattaTrone\BackupUI\Events\BackupCompleted;
BackupCompleted::dispatch($backup)->listen(function ($event) {
// Send notification logic
});
Pre/Post Backup Hooks
public function boot()
{
BackupUI::preBackup(function ($backup) {
// Pre-backup logic (e.g., flush caches)
});
BackupUI::postBackup(function ($backup) {
// Post-backup logic (e.g., cleanup)
});
}
API Access
Route::middleware('auth')->group(function () {
Route::get('/api/backups', [BackupController::class, 'index']);
});
How can I help you explore Laravel packages today?