背景

之前做备份时,主要是拿一台备份机对生产机做数据库做主备,用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. select2插件placeholder不显示的问题

    如果设置了select2的templateSelection,没做特殊处理的话placeholder会不显示,需要做特殊处理 templateSelection: function(repo){ if ...

  2. Dictionary<string, Dictionary<string, Person>> dic = new Dictionary<string, Dictionary<string, Person>>();

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  3. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

  4. 关于CSS特性和选择器

    1层叠  样式冲突的遵循就近原则, 2继承  子代会继承父代的某些属性,例如字体大小,字体颜色 3优先级 !important 权重最高 通配符 * 和 继承的属性 权重为 0 0 0 0 行内样式权 ...

  5. redis的主从复制,哨兵值守

    环境: 主服务器:192.168.10.10    Centos 7  redis-5.0.4 从服务器:192.168.10.129  Centos 7  redis-5.0.4 从服务器:192. ...

  6. 纯C语言实现线性表

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef ...

  7. 如何设计提高服务API的安全性(二)API密钥方式详解

    在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式. 利用何种加密方式呢? 经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小.适合我们这种调 ...

  8. 不要在 MySQL 中使用“utf8”,请使用“utf8mb4”

    不要在 MySQL 中使用“utf8”,请使用“utf8mb4” 最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误: ...

  9. youtube-dll工具使用,很好用!!

    最近喜欢上youtube-dll这个插件,下载东西真的很好用,墙裂推荐,github地址如下 https://github.com/ytdl-org/youtube-dl 安装 1.Linux 1.1 ...

  10. 06. redis cluster

    目录 Redis Cluster redis cluster 特点 搭建redis cluster 访问redis cluster redis-cli 访问redis cluster 重新分片数据 新 ...