温馨提示×

debian下laravel怎样做定时备份

小樊
44
2026-10-16 22:27:00
栏目: 智能运维

在 Debian 下对 Laravel 项目做定时备份,常见、可靠的做法是:Laravel 任务调度(Task Scheduling)+ cron + 备份脚本/工具。下面给你一套实用方案,从简单到专业都有。


一、最推荐方案(Laravel 官方方式)

1️⃣ 配置 cron(只需一次)

sudo crontab -e

添加这一行(关键):

* * * * * cd /var/www/your-laravel && php artisan schedule:run >> /dev/null 2>&1

✅ 所有“定时任务”都在 Laravel 里管理


2️⃣ 在 Laravel 中定义备份任务

编辑:

app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('backup:run')
             ->dailyAt('03:00')
             ->appendOutputTo(storage_path('logs/backup.log'));
}

二、使用 spatie/laravel-backup(强烈推荐)

1️⃣ 安装

composer require spatie/laravel-backup
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

2️⃣ 备份内容

默认会备份:

  • ✅ 数据库
  • ✅ app/ 代码
  • ✅ storage/

配置文件:

config/backup.php

常见配置:

'backup' => [
    'destination' => [
        'disks' => ['local'],
    ],
    'source' => [
        'files' => [
            'include' => [
                base_path(),
            ],
        ],
    ],
],

3️⃣ 手动测试

php artisan backup:run

4️⃣ 定时执行(推荐)

$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 避免明文


四、备份到远程(更安全)

方式 1:云磁盘

config/backup.php

'disks' => ['s3'],

或:

'disks' => ['ftp', 'sftp'],

方式 2:rsync 到另一台服务器

$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,
],

六、权限注意事项(Debian 常见坑)

sudo chown -R www-data:www-data storage
sudo chmod -R 755 storage

cron 用户要有写权限


七、推荐组合(生产环境)

✅ Laravel + spatie/laravel-backup + cron + sftp/s3


如果你愿意,我可以:

  • 给你一份 完整 backup.php 配置
  • 或针对 MySQL / PostgreSQL
  • 或写 systemd timer 替代 cron

你现在是 开发环境还是生产服务器?

0 踩