在 Debian 下对 Laravel 项目做定时备份,常见、可靠的做法是:Laravel 任务调度(Task Scheduling)+ cron + 备份脚本/工具。下面给你一套实用方案,从简单到专业都有。
sudo crontab -e
添加这一行(关键):
* * * * * cd /var/www/your-laravel && php artisan schedule:run >> /dev/null 2>&1
✅ 所有“定时任务”都在 Laravel 里管理
编辑:
app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('backup:run')
->dailyAt('03:00')
->appendOutputTo(storage_path('logs/backup.log'));
}
composer require spatie/laravel-backup
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
默认会备份:
app/ 代码storage/配置文件:
config/backup.php
常见配置:
'backup' => [
'destination' => [
'disks' => ['local'],
],
'source' => [
'files' => [
'include' => [
base_path(),
],
],
],
],
php artisan backup:run
$schedule->command('backup:run')->dailyAt('03:00');
如果你只关心数据库:
$schedule->exec(
'mysqldump -u root -p密码 数据库名 > '.
storage_path('backups/db_'.date('Y-m-d').'.sql')
)->daily();
⚠️ 密码建议用 .my.cnf 避免明文
config/backup.php
'disks' => ['s3'],
或:
'disks' => ['ftp', 'sftp'],
$schedule->exec(
'rsync -az /var/www/your-laravel/storage/app/backup/ user@backup-server:/backups/'
)->daily();
$schedule->command('backup:clean')->daily();
或配置:
'cleanup' => [
'keep_all_backups_for_days' => 7,
'keep_daily_backups_for_days' => 16,
],
sudo chown -R www-data:www-data storage
sudo chmod -R 755 storage
cron 用户要有写权限
✅ Laravel + spatie/laravel-backup + cron + sftp/s3
如果你愿意,我可以:
你现在是 开发环境还是生产服务器?