devuni / notifier-package
Laravel package for automated backups and notifications.
Requires
- php: ^8.4
- guzzlehttp/guzzle: ^7.10.0
- illuminate/console: ^12.55.0 || ^13.0
- illuminate/contracts: ^12.55.0 || ^13.0
- illuminate/http: ^12.55.0 || ^13.0
- illuminate/queue: ^12.55.0 || ^13.0
- illuminate/routing: ^12.55.0 || ^13.0
- illuminate/support: ^12.55.0 || ^13.0
- laravel/prompts: ^0.3.16
Requires (Dev)
- larastan/larastan: ^3.9.3
- laravel/pint: ^1.29.0
- mockery/mockery: ^1.6.12
- nunomaduro/collision: ^8.9.2
- orchestra/testbench: ^11.0.0 || ^12.0
- pestphp/pest: ^4.4.5
- pestphp/pest-plugin-laravel: ^4.1.0
- rector/rector: ^2.4.0
- dev-main
- v2.6.3
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.3
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.27
- v1.0.26
- v1.0.25
- v1.0.24
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-beta.2
- v1.0.0-beta.1
- v1.0.0-alpha.3
- v1.0.0-alpha.2
- v1.0.0-alpha.1
- dev-dependabot/github_actions/release-e24c266ee1
- dev-dependabot/github_actions/codecov-7980569b8c
This package is auto-updated.
Last update: 2026-04-22 15:52:53 UTC
README
Encrypted database & storage backups for Laravel apps, shipped to the Devuni Notifier central server. AES-256 ZIPs, chunked HTTPS upload, token auth, queue support.
How it works
┌─────────────────────┐ encrypted ZIP ┌─────────────────────┐
│ Your Laravel app │ ───── chunked upload ─────▶ │ notifier.devuni.cz │
│ (this package) │ (X-Notifier-Token) │ (central server) │
└─────────────────────┘ └─────────────────────┘
│ │
│ mysqldump + storage/app/public │ stores + monitors
│ → AES-256 ZIP │ → sends alerts
▼ ▼
local temp file long-term backup archive
(cleaned up after upload)
Heads up: This is the client side of the Devuni Notifier platform. Without a central server configured via
NOTIFIER_URL, there's nowhere to send backups. If you don't have it, try spatie/laravel-backup instead.
Install
composer require devuni/notifier-package php artisan vendor:publish --tag="notifier-config" php artisan notifier:install # interactive .env wizard php artisan notifier:check # verify setup (env, DB, 7z, mysqldump, URL)
Requirements: PHP 8.4+, Laravel 12+, mysqldump, and p7zip-full (recommended) or PHP zip extension.
Usage
Scheduled backups (recommended)
Add to routes/console.php:
use Illuminate\Support\Facades\Schedule; Schedule::command('notifier:database-backup')->dailyAt('02:00')->onOneServer(); Schedule::command('notifier:storage-backup')->weeklyOn(0, '03:00')->onOneServer();
On demand
php artisan notifier:database-backup php artisan notifier:storage-backup
HTTP API
Trigger backups from an external scheduler. Rate-limited to 10 req/min.
curl -X POST https://your-app.com/api/notifier/backup \ -H "X-Notifier-Token: your-token" \ -d "type=backup_database" # or backup_storage
On failure the response returns an opaque error_id (UUID) — the full detail (stack trace, mysqldump/7z stderr) stays in your backup log channel. Grep logs for the UUID to correlate.
Configure
Minimum .env:
NOTIFIER_BACKUP_CODE=... # auth token NOTIFIER_URL=https://notifier.devuni.cz/api/v1/repositories/123 # your endpoint NOTIFIER_BACKUP_PASSWORD=... # ZIP password
Optional: NOTIFIER_LOGGING_CHANNEL, NOTIFIER_ROUTES_ENABLED, NOTIFIER_ROUTE_PREFIX, NOTIFIER_ZIP_STRATEGY (auto/cli/php), NOTIFIER_CHUNK_SIZE, NOTIFIER_QUEUE_CONNECTION. See config/notifier.php for defaults and descriptions.
Exclusions
Arrays — edit config/notifier.php:
'excluded_tables' => ['telescope_entries', 'sessions', 'cache', 'jobs', 'failed_jobs'], 'excluded_files' => ['.gitignore', 'temp', 'logs/debug.log'],
Queue offloading
API-triggered backups can be offloaded to avoid PHP timeouts:
NOTIFIER_QUEUE_CONNECTION=redis # or database, sqs, beanstalkd
Artisan commands always run synchronously regardless of this setting.
Security
- At rest: AES-256 encrypted archives with
0600permissions, cleaned up after upload - In transit: HTTPS-only,
hash_equalstoken comparison, per-chunk + full-file SHA-256 verification - No leaks: ZIP password passed via stdin (not argv — invisible to
ps//proc/*/cmdline); API errors return opaque UUIDs, not raw exception messages - Report vulnerabilities: see security policy — don't open public issues
Links
- Changelog — see what's new in each release
- Contributing
- Full config reference
Credits
License
MIT — see LICENSE.md.