Laravel自动备份到阿里云OSS
背景
之前做备份时,主要是拿一台备份机对生产机做数据库做主备,用rsync同步上传的图片,文件。随着项目的增多,许多小项目都这样做感觉太过繁琐,每次都要在2台机器之间配置,同时单独拿一台机器做备份成本也挺高。后来发现阿里云OSS的冷冻OSS一年100G也不过几十块,用它备份更便宜也更便捷,于是对于小项目便改用更简单的方法:Laravel定期将数据库和文件打包备份到阿里云OSS(其他的云存储比如亚马逊家的也可以)。
刚好Laravel都有直接支持的包,于是接下来的工作就是安装好包,做下配置即可。
配置过程
配置阿里云OSS驱动
先安装jacobcyl/ali-oss-storage,确保文件系统可以直接访问阿里云OSS
composer require jacobcyl/ali-oss-storage
修改config/filesystems.php,在disks下面增加oss的配置
// config/filesystems.php
'oss' => [
'driver' => 'oss',
'access_id' => env('OSS_ACCESS_ID'),
'access_key' => env('OSS_ACCESS_KEY'),
'bucket' => env('OSS_BUCKET'),
'endpoint' => env('OSS_ENDPOINT'),
'ssl' => true,
'isCName' => false,
'debug' => false
],
然后在.env中配置好实际的OSS参数
OSS_ACCESS_ID=LTAIgon****** # 测试参数,请替换成自己的实际参数
OSS_ACCESS_KEY=k6JDKL6vmz*************** # 浿参数,请替换成自己的实际参数
OSS_BUCKET=my-backup
OSS_ENDPOINT="oss-us-west-1.aliyuncs.com"
在命令行下,测试下OSS是否正常工作
$php artisan tinker # 进入tinker,将出现如下命令行
>>> Storage::disk('oss')->put('temp.txt', 'ok');
=> true # 表示成功
>>>
如果测试成功,在阿里云的控制面板下也应该能找到该文件。如果测试不成功,请调整下自己的参数,重新php artisan tinker测试下。
备份配置
安装spatie/laravel-backup(官方出到6.x版本,但实测只能列出本地备份,无法列出oss备份,原因不明,故仍然使用5.x版本)
composer require "spatie/laravel-backup:^5.0.0"
生成配置文件config/backup.php
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
修改config/backup.php,为避免冗长,只列出建议修改的地方,重点关注注释说明
<?php
return [
'backup' => [
'name' => config('app.name') . '-' . config('app.url'), // 名称建议按这样改,免得布署多个同样项目时相互覆盖
// 省略其他配置...
'destination' => [
'filename_prefix' => '',
'disks' => [
'local', // local可以删除不要
'oss', // 重点:在此处添加oss
],
],
],
'monitorBackups' => [
[
'name' => config('app.name') . '-' . config('app.url'), // 名字与backup一致
'disks' => ['local', 'oss'], // 配置与backup的disks一致
// ...
],
],
// 下面配置直接照抄即可,执行backup:cleanup时清空旧备份的配置
'cleanup' => [
'defaultStrategy' => [
'keepAllBackupsForDays' => 3,
'keepDailyBackupsForDays' => 5,
'keepWeeklyBackupsForWeeks' => 2,
'keepMonthlyBackupsForMonths' => 1,
'keepYearlyBackupsForYears' => 1,
],
]
];
然后执行php artisan backup:run备份,看到对应的输出就知道备份成功了.
$php artisan backup:run
php artisan backup:run
Starting backup...
Dumping database paygw...
Determining files to backup...
Zipping 316 files...
Created zip containing 316 files. Size is 15.72 MB
Copying zip to disk named local...
Successfully copied zip to disk named local.
Copying zip to disk named oss...
Successfully copied zip to disk named oss.
同时在storage/app/可以找到对应的备份文件。平时想自己备份,执行下该命令就行了。
不过,我们的目标是自动备份,还需要修改app/Console/Kernel.php,修改schedule函数,配置为每天自动备份一次,并删除旧的备份.
class Kernel extends ConsoleKernel
{
// ...
protected function schedule(Schedule $schedule)
{
// ...
$schedule->command('backup:run')->daily()->at('02:00');
$schedule->command('backup:clean')->daily()->at('03:00');
}
}
请确保
php artisan schedule:run有在crontab中定期执行。
这样子就配置完了。
在备份过程中,总是想了解下备份情况,除了直接登陆OSS去看文件在不在以外,还可以直接通过php artisan backup:list了解备份情况,它会列出不同磁盘的备份情况,由下图所示。
关于下图有2个注意点:
- 需要特别注意,下图的
Reachable一定要是绿色的打勾状态, - Disk那一列,要能看到oss。其他的字段有兴趣的自行了解。

扩展配置:通过Nova在WEB管理备份
通过命令行已经可以很好地了解备份状态,不过对于非开发者,有时需要提供他们WEB界面管理这些备份。这时spatie/nova-backup-tool就派上用场了。
不过这个包对依赖要求很高,必须是php 7.2以上,以及spatie/laravel-backup的版本在v6以上,前面已经提到v6版本测试有些问题,所以目前在生产环境中我也没用上这个管理后台。有兴趣的可以自己试下能否正常工作。

参考资料
nova backup tool
spatie/laravel-backup
Laravel自动备份到阿里云OSS的更多相关文章
- laravel下使用阿里云oss上传图片
对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...
- 备份MySQL数据库并上传到阿里云OSS存储
1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...
- laravel使用阿里云OSS上传图片
需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...
- Laravel 使用阿里云 oss 存储对象
一.下载安装 composer require jacobcyl/ali-oss-storage 二.注册服务提供者 在config/app.php的providers下添加: //阿里云OSS对象存 ...
- 阿里云oss挂载到linux本地文件系统
对象存储 OSS 阿里云对象存储服务 (OSS) 是一种高度可伸缩且安全可靠的云对象存储服务,让您可以存储.备份和归档大量数据.阿里云 OSS 是一种简单易用的服务,让您每秒能处理数百万请求,它还支持 ...
- 如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)
总有人说阿里云主机带宽小,那只是因为你还停留在单机架构上. 阿里的架构设计,云主机主要用来跑程序的,附件的存储和访问主要靠OSS. 有人又会说了,OSS按存储费+流量双重计费伤不起,只是你不知道OSS ...
- C# .net Ueditor实现图片上传到阿里云OSS 对象存储
在学习的时候,项目中需要实现在Ueditor编辑器中将图片上传到云储存中,老师演示的是上传到又拍云存储,既然看了一遍,直接照搬不算本事,咱们可以依葫芦画瓢自己来动手玩玩其它的云存储服务. 现在云计算产 ...
- Hexo一键部署到阿里云OSS并设置浏览器缓存
自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...
- phpcmsv9 阿里云OSS云存储整合教程
该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...
随机推荐
- C++初探
//string1.cpp #include <iostream> int main() { using namespace std; ]={'d','o','g'}//这是char数组, ...
- C#利用newtonsoft.json读取.so配置文件内容
今天花 了点时间来使用 C#读取json文件 ,文件后缀为 .so文件 ,也是基于文件流的形式 获取 对象 ,然后解析; 之所以尝试 使用 json读取 ,是因为其配置文件的格式 更为友好 和方便,直 ...
- AEC_js的加解密
后台传出来,前端就需要转出,前台传入,后台也需要转出 这是前端加解密 /* CryptoJS v3.1.2 */ var CryptoJS = CryptoJS || function(u, p) { ...
- Python 基础总结篇
变量及数据类型 Numbers数字分为:int整型,long长整型,float浮点型,complex复数 String字符串由数字.字母.下划线组成的一串字符,用于表示文本的数据类型 bool布尔型: ...
- ASP.NET----内置对象----Resuest
Request对象可以获取包含用户的计算机.页面及浏览器的请求等相关信息. Request对象的属性: ①Form----------返回有关表单变量的集合 ②QueryString--------- ...
- 使用conda安装tensorflow-gpu
1.之前已经安装了anaconda,之前疏忽使用的pip安装的tensorflow,但pycharm还是使用的anaconda环境. 现在把pip的tensorflow删除了 pip uninstal ...
- 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.
前言: 借鉴网址:https://blog.csdn.net/fansili/article/details/78664267 原因: MySQL 5.7.5和up实现了对功能依赖的检测.如果启用了 ...
- Java使用枚举来消除if else(转载)
Java代码里经常出现多个if else会大大降低效率,我们可以使用枚举的方式来代替if else,示例代码如下: public enum Grade { A_10_90(90, 100, " ...
- HDU6706 huntian oy(2019年CCPC网络赛+杜教筛)
目录 题目链接 思路 代码 题目链接 传送门 思路 看到这题还比较懵逼,然后机房大佬板子里面刚好有这个公式\(gcd(a^n-b^n,a^m-b^m)=a^{gcd(n,m)}-b^{gcd(n,m) ...
- Consul 知识点
平时开发时,一般使用consul dev模式,开发模式下kv存储不会持久化存储,全在内存中(重启consul就丢了!),所以一般建议yml配置文件内容,在项目中单独存一个文件,启动调试时,直接把配置文 ...