背景

之前做备份时,主要是拿一台备份机对生产机做数据库做主备,用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个注意点:

  1. 需要特别注意,下图的Reachable一定要是绿色的打勾状态,
  2. 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的更多相关文章

  1. laravel下使用阿里云oss上传图片

    对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...

  2. 备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...

  3. laravel使用阿里云OSS上传图片

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...

  4. Laravel 使用阿里云 oss 存储对象

    一.下载安装 composer require jacobcyl/ali-oss-storage 二.注册服务提供者 在config/app.php的providers下添加: //阿里云OSS对象存 ...

  5. 阿里云oss挂载到linux本地文件系统

    对象存储 OSS 阿里云对象存储服务 (OSS) 是一种高度可伸缩且安全可靠的云对象存储服务,让您可以存储.备份和归档大量数据.阿里云 OSS 是一种简单易用的服务,让您每秒能处理数百万请求,它还支持 ...

  6. 如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)

    总有人说阿里云主机带宽小,那只是因为你还停留在单机架构上. 阿里的架构设计,云主机主要用来跑程序的,附件的存储和访问主要靠OSS. 有人又会说了,OSS按存储费+流量双重计费伤不起,只是你不知道OSS ...

  7. C# .net Ueditor实现图片上传到阿里云OSS 对象存储

    在学习的时候,项目中需要实现在Ueditor编辑器中将图片上传到云储存中,老师演示的是上传到又拍云存储,既然看了一遍,直接照搬不算本事,咱们可以依葫芦画瓢自己来动手玩玩其它的云存储服务. 现在云计算产 ...

  8. Hexo一键部署到阿里云OSS并设置浏览器缓存

    自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...

  9. phpcmsv9 阿里云OSS云存储整合教程

    该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...

随机推荐

  1. 【03】Python:分支和循环

    写在前面的话 在写代码的时候,我们的代码不可能总是一行一行语句的堆叠,有些时候我们需要对一个事物进行判断,或者很大一组数据需要循环挨个处理.这些不可能让我们一步一步的去写.所以有了接下来的分支结构和循 ...

  2. [原创]Spring-Security-Oauth2.0浏览器端的登录项目分享

    1.简介 ​ CitySecurity项目为正式上线项目做得一个Demo,这里主要介绍浏览器端的登录.本项目使用了SpringSecurity实现表单安全登录.图形验证的校验.记住我时长控制机制.第三 ...

  3. javascript 对象的方式解析url地址参数

    看到一个知识点,比如说给一个 url参数,让其解析里面的各个参数,以前我都是通过字符串分割来实现的.但是通过这样的方式比较麻烦,而且操作字符串容易出错.今天看到了一个更有效更快速的方式,就是通过对象来 ...

  4. 记录RFID操作错误

    如果代码操作不了RFID设备,查看下通信协议的设置

  5. springboot启动报错,Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

    报错: Error starting ApplicationContext. To display the conditions report re-run your application with ...

  6. FCC-学习笔记 DNA Pairing

    FCC-学习笔记  DNA Pairing 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.cn/;英 ...

  7. js 实现watch监听数据变化

    1.js /** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.c ...

  8. QGraphicsItem鼠标旋转控制研究

    在QT场景视图中2D图形项Item的基类为QGraphicsItem,如果我们需要自定义Item则可以从其派生,然后重写boundingRect以及paint虚函数实现图形项的外边界定义以及内容绘制工 ...

  9. 函数使用十一:BAPI_BANK_CREATE

    FI01创建银行主数据: BAPI:BAPI_BANK_CREATE *&----------------------------------------------------------- ...

  10. EtherNet/IP CIP协议

    EtherNet/IP CIP协议 1.EtherNet/IP简述 EtherNet/IP(Ethernet/Indstrial Protocol,以太网/工业协议)是一种基于以太网和TCP/IP技术 ...