背景

之前做备份时,主要是拿一台备份机对生产机做数据库做主备,用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. 【07】Jenkins:流水线(Pipeline)

    写在前面的话 个人认为 Pipeline 在 Jenkins 中算是一个优化性功能,它能够将我们的构建服务的整个过程流程化,这意味着当我们在执行到某一步的时候,可以添加询问,提示我们是否继续运行下一步 ...

  2. ASP.NET MVC EF 连接数据库(二)-----Model First

    Model first (VS2015 ,Sql Server2014) 新建MVC项目     右键product ,新增标量属性(数据库表中的字段)   Ctrl + S 保存页面,右键“根据模型 ...

  3. Java程序员需要掌握的技能

    转自:https://www.cnblogs.com/harry335/p/5924505.html

  4. 操作系统与进程.md

    目录 1. 操作系统 1.1 作用 1.2 操作系统的发展 2. 进程的理论 2.1 相关名词 2.2 进程的创建 2.3 进程的状态: 1. 操作系统 ​ 管理.控制.协调计算机硬件与软件资源的计算 ...

  5. js对象常用属性和方法:复制一个对象,获取一个对象的所有key和所有value的方法

    记录对象的一些实用使用方法及属性 // Object.assign() 多个对象合并 key相同则后面的覆盖前面的 const target = { a: 1, b: 2 }; const sourc ...

  6. 周黑鸭借力MES,推进智能生产

    1.项目背景介绍 中国食品企业在经过了一些年的行业整体快速增长后,国家对食品行业的管理提出了更加严格的要求,控制更严,准入门槛提高,企业数量成下降趋势. 大中型食品企业已经需要走出国门,走向国际市场, ...

  7. pyTorch 基于以resnet50为backbone的PSPNet 训练VOC2012数据集

    代码链接:https://github.com/ggyyzm/pytorch_segmentation 使用PSPNet作为主干分类网络 1.将VOC2012数据集下载并解压到data/VOCtrai ...

  8. Python:日常应用汇总

    判断路径中是否包含中文 import re def IsContainChinese(path:str) -> bool : cnPatter=re.compile(u'[\u4e00-\u9f ...

  9. php静态化介绍

    1.动态URL地址设置成静态形式http://state.com/index.php?c=play&a=index&id=16267 ------>http://state.co ...

  10. wordpress迁移后登陆时出现Forbidden You don’t have permission to access /wp-login.php on this server

    之前在vps上,最近迁移到了php虚拟主机上,迁移后发现无法登陆后台出现403:Forbidden You don’t have permission to access /wp-login.php ...