Laravel 5.5共享主机应用自动备份至云端方案咨询
完全可以用Laravel内置的任务调度来实现你的需求,不用折腾复杂的Unix脚本——我之前在共享主机上部署的Laravel项目就是这么弄的,给你一套成熟的方案:
核心方案:Laravel任务调度+第三方扩展包
Laravel本身的任务调度能轻松实现每日自动执行,再搭配成熟的备份扩展包,就能一站式搞定文件压缩、数据库备份、云端同步所有环节,不用自己从头写功能。
一、先搞定Laravel任务调度的触发
共享主机一般都有Cron管理面板,你只需要添加一条Cron命令,让Laravel的调度器每分钟运行一次(Laravel会自己处理「每日执行」的逻辑):
* * * * * php /path-to-your-laravel-project/artisan schedule:run >> /dev/null 2>&1
注意:如果共享主机的
php命令路径不对,你可以通过which php查看完整路径,替换掉上面的php。
二、用扩展包实现备份核心功能
推荐用spatie/laravel-backup这个包,它完美适配Laravel5.5,能一键处理文件打包、数据库导出,还自带多种云端存储的同步支持。
安装步骤:
- 用Composer安装适配Laravel5.5的版本:
composer require spatie/laravel-backup:6.19.0
- 发布配置文件:
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
- 配置备份范围(修改
config/backup.php):
在source/files节点里指定要备份的目录,同时排除没必要的文件节省空间:
数据库部分默认会读取'files' => [ 'include' => [ base_path(), // 整个Laravel项目文件 storage_path('app'), // 你的上传文件目录 ], 'exclude' => [ base_path('vendor'), // 排除vendor,可通过composer重新安装 base_path('node_modules'), storage_path('framework'), storage_path('logs'), ], ],.env里的配置,不用额外修改source/databases节点。
三、配置云端同步(Dropbox/Google Drive)
这个扩展包原生支持多种云端存储,下面是两个主流平台的配置方法:
1. Dropbox同步
- 安装Dropbox适配包:
composer require spatie/flysystem-dropbox:1.2.3
- 在
config/backup.php的destination/disks里添加dropbox:
'disks' => [ 'dropbox', // 其他你需要的存储磁盘... ],
- 在
config/filesystems.php里配置Dropbox磁盘:
'disks' => [ // ...其他磁盘配置 'dropbox' => [ 'driver' => 'dropbox', 'token' => env('DROPBOX_ACCESS_TOKEN'), ], ],
- 去Dropbox开发者平台创建应用,生成访问令牌,放到
.env里:DROPBOX_ACCESS_TOKEN=你的令牌
2. Google Drive同步
- 安装Google Drive适配包:
composer require nao-pon/flysystem-google-drive:~1.1
- 在
config/backup.php的destination/disks里添加google-drive - 在
config/filesystems.php里配置:
'google-drive' => [ 'driver' => 'google-drive', 'clientId' => env('GOOGLE_DRIVE_CLIENT_ID'), 'clientSecret' => env('GOOGLE_DRIVE_CLIENT_SECRET'), 'refreshToken' => env('GOOGLE_DRIVE_REFRESH_TOKEN'), 'folderId' => env('GOOGLE_DRIVE_FOLDER_ID'), // 指定备份文件存放的文件夹ID ],
- 去Google Cloud平台创建OAuth客户端,获取对应的ID、密钥和刷新令牌,填入
.env即可。
四、创建每日备份任务
打开app/Console/Kernel.php,在schedule方法里添加任务:
protected function schedule(Schedule $schedule) { $schedule->command('backup:run') ->daily() // 默认每日凌晨0点执行 ->timezone('Asia/Shanghai') // 可以指定你需要的时区 ->sendOutputTo(storage_path('logs/backup.log')); // 记录备份日志,方便排查问题 }
五、额外优化建议
- 配置备份清理规则:在
config/backup.php的cleanup节点设置保留备份的时长,避免云端空间被占满:'cleanup' => [ 'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class, 'default_strategy' => [ 'keep_all_backups_for_days' => 7, 'keep_daily_backups_for_days' => 30, 'keep_weekly_backups_for_weeks' => 8, 'delete_oldest_backups_when_using_more_megabytes_than' => 5000, ], ], - 测试任务:手动执行
php artisan backup:run,检查是否能生成备份并同步到云端,同时查看storage/logs/backup.log有没有错误。
内容的提问来源于stack exchange,提问作者jpussacq
相关产品推荐
相关产品推荐

