开源数据备份工具 Duplicati

news2024/9/29 15:28:50

使用 Duplicati + 腾讯云 COS,完美备份我的服务器数据。

文件备份需求

我有两台腾讯云的服务器,一台部署了博客,一台部署了一些个人项目,虽说云服务器很稳定,基本不会发生丢失数据的问题,但我个人之前经历过数据丢失,俗话说一朝被蛇咬十年怕井绳,所以一直在尝试把博客和项目的数据备份到其他地方。

我自己写过一个备份文件的 Java 程序,通过 crontab 定时任务和 shell 脚本可以把文件定期备份到七牛云。但由于没有可视化界面,配置起来比较麻烦,再加上程序本身也不支持恢复数据,需要去七牛云自行下载数据,所以还是想找一个比较完善的备份工具。

备份工具的选择肯定是开源优先,除了要支持图形化界面配置,还要支持国内的对象存储,并且支持周期性备份和数据恢复。

找了一圈,最终选择了「Duplicati」这款工具,完全符合上述需求。关于存储类型这里多说一句,虽然 Duplicati 支持的国内对象存储只有「Tencent COS」也就是腾讯云的 COS,但是通过使用「S3 兼容」协议,可以支持国内大多数云厂商的对象存储。

Duplicati 使用

Duplicati 开源地址:https://github.com/duplicati/duplicati

部署

首先部署 Duplicati,我选择了 Docker Compose 方式进行部署,使用的镜像是 linuxserver/duplicati。

关于 docker 和 docker compose 的安装可以参考「Docker环境搭建(CentOS篇)」。

docker-compose.yml 文件内容如下:

version: "2.1"
services:
  duplicati:
    image: lscr.io/linuxserver/duplicati:latest
    container_name: duplicati
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - CLI_ARGS= #optional
    volumes:
      - ./appdata/config:/config
      - ./backups:/backups
      - ./source:/source
      - /opt:/opt
    ports:
      - 8200:8200
    restart: unless-stopped

配置文件这里要额外说明一下,docker 方式部署可能会导致某些文件目录读取不到,所以需要在 volumes 节点下增加映射,例如 opt 映射,如果你也遇到文件目录读取不到的问题,参考上述配置增加 volumes 映射即可。如果需要读取 root 目录,需要把 PUID 和 PGID 改为 0,并且设置 rootvolumes 映射。

在 docker-compose.yml 文件同目录下执行 docker compose up -d 启动项目,浏览器访问 http://{ip}:8200 或自行配置域名访问。首次进入会提示设置密码,也可以稍后在设置中进行设置。

首次访问

备份文件

Duplicati 部署好之后,我们来看下如何备份文件。

点击「新增备份」菜单,默认选择的是「配置新文件」,如果需要导入其他地方导出的任务可以选择「从文件导入」。

添加新备份

点击下一步,设置备份的名称、描述和加密方式,我这里选择了不加密。

常规备份设置

点击下一步,配置备份的保存位置,默认是备份到本地磁盘,可以点击下拉菜单选择其他选项。

备份保存位置

这里我选择「S3 兼容」,然后填写如下配置:

  • 服务器:选择自定义服务器地址,我的存储桶所属地域是北京,所以地址为 cos.ap-beijing.myqcloud.com,其他地区替换链接中的 ap-beijing 即可
  • Bucket 名称:访问「腾讯云存储桶列表」 可查看存储桶的名称
  • 文件夹路径:duplicati/photo-stream,根据个人需求填写
  • AWS 访问 ID:访问「API 密钥管理」查看 SecretId
  • AWS 访问密钥:访问「API 密钥管理」查看 SecretKey

S3 兼容

其他选项保持默认,点击测试,弹框提示调整 bucket 名称选择「否」,再次弹框显示测试成功说明配置正确。

点击下一步配置源数据,即要备份的文件或目录,这里我选择备份我的相册目录。

源数据

点击下一步,设置备份计划,我这里修改时间为晚上 23:00。

计划

点击下一步,配置远程卷大小和备份保留策略。远程卷大小可以保持默认,我这里设置了远大于需要备份的文件大小,备份保留策略选择永久保留,你也可以根据自己的需要选择合适的备份保留策略。

常规选项

点击保存,会弹框提示是否继续不启用加密,由于我最开始选择了不加密,所以这里选择继续不启用加密。

不启用加密

保存成功会后跳转到首页,会展示备份任务列表,在这里可以立即执行某个任务,或者点击下拉菜单进行更多选择和设置,例如编辑、导出、删除、查看日志等。

首页

这里我运行了一下备份任务,通过下图的日志可以看到,500M 的文件,40 秒就完成了备份,这速度相当快了。

日志

恢复文件

讲完备份再来说下如何恢复文件,一般有两种场景,一种是已备份的文件不小心删除了,需要恢复到原位置;另外一种是需要把已备份的文件下载到其他设备,Duplicati 都可以满足。

点击「恢复文件」菜单,有三种恢复方式:

  • 直接从备份文件中恢复:以我为例,就是直接通过 S3 兼容协议连接腾讯云 COS 进行文件恢复
  • 从配置中恢复:从其他设备导出的备份任务文件进行恢复
  • 已存在的备份:从本机已有的备份任务进行恢复

恢复文件

具体操作和配置选择可自行查看,这里略过。

使用感受

存储类型选择

我一开始使用的存储类型是七牛云,但是我发现每次备份 Duplicati 都会把已备份的文件下载到服务器,而七牛云的 S3 兼容方式又是付费的,也就是说频繁的周期性备份会导致较高的费用。

经过搜索,我发现腾讯云会给 COS 老用户永久的免费额度,于是就改为使用腾讯云 COS。如果你也是腾讯云客户,可以访问「免费额度资源包」查看是否有免费额度。

免费额度资源包

起初我是选择了「Tencent COS」进行配置,但是发现 Duplicati 的内存占用居高不下,甚至会导致服务崩溃,由于之前使用七牛云的 S3 兼容协议时并未发现此问题,所以我尝试使用 S3 兼容协议配置腾讯云 COS,果然内存占用过高的问题不存在了。

由于我的服务器也是腾讯云,而且跟 COS 是同一地区,这就使得备份走的是内网,也就是说除非我把文件恢复到我的电脑或其他地方,否则是不消耗外网下行流量额度。唯一的限制是存储容量,但是 50G 的免费额度也足够了。

可以按照你自己的服务器厂商选择对应的对象存储,理论上同一家服务器和对象存储之间应该都是支持内网传输的,而且大部分的国内云服务器厂商的对象存储也支持 S3 兼容协议,这样就可以省下不少外网下行流量额度或费用。

备份流程

Duplicati 备份会把文件打包压缩上传,并且在同目录生成对应的配置文件。

文件结构

后面的每次备份都会把文件下载到本地,然后再进行比对,前面也说到了,这部分是可能产生费用的,需要考虑对象存储和备份的频率的选择。

优点

  • 项目开源免费
  • 可以自己部署
  • 占用资源少
  • 界面简洁
  • 操作简单

注意事项

  • docker 方式部署可能看不到部分文件夹,给对应目录配置 volumes 映射即可
  • 存储类型选择 Tencent COS 会导致内存占用过高,建议修改为 S3 兼容协议
  • 备份会导致对象存储产生外网下行流量或费用,需要考虑选择合适的对象存储和备份频率

客户端

Duplicati 除了可以在服务器上使用,也可以在电脑端使用,访问「Duplicati Download」查看更多系统的客户端下载。

Duplicati 配合腾讯云 COS 完美解决了我的服务器文件备份需求,如果你也有文件备份的需求,可以尝试一下 Duplicati。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThreeJs学习

1 基本使用 //1、创建场景 const scene new THREE.Scene() //2、创建网格模型 const geometry new THREE.BoxGeometry(100,100,100) const matrial new THREE.MeshLambertMaterial({color: #0000ff }) const mesh new THREE.Mesh(geometry,matrial) scene.add(mesh) //3、…

Redis之String类型和Hash类型的介绍和案例应用

一. String类型基础 1.类型介绍 典型的Key-Value集合,如果要存实体,需要序列化成字符串,获取的时候需要反序列化一下。 2. 指令Api说明 ​ 编辑3.常用Api说明 (1).StringSet:写入数据,如果数据已经存在,则覆盖;可以一次性存入1…

B2B电子商务策略[在2022年发展您的业务]

常规的电子商务商店向消费者(B2C 或企业对消费者)销售产品。B2B(企业对企业)电子商务不同于常规电子商务,因为 B2B电子商务的商业模式是让一家企业在线向另一家公司销售产品。 您可能会想:如何向企业销售比…

Windows OpenGL 图像色调

目录 一.OpenGL 图像色调调节 1.原始图片2.效果演示 二.OpenGL 图像色调调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL…

Ubuntu 20.04 server永久关闭swap

方法一 编辑/etc/fstab ,sudo vim /etc/fstab,找到如下行 找到/dev/disk/by-uuid/28b306c5-92e4-4180-966d-cdedfbce3a4d /boot ext4 defaults 0 1 修改为如下图,并(/swap.img none swap sw 0 0) 将如下行注释&#…

Yolo算法检测之Anchor Boxes原理详解

刚开始yolo系列的目标检测算法,在一个网格中只能检测一个对象,但是我们在实验中发现,一个网格中很多时候存在不仅一个目标,可能存在多个目标,类似如下图所示,下面中间的网格中就存在人和车辆两个目标的中心…

嵌入式开发学习之--Git管理代码

本章主要介绍一下代码管理,在最后有常用的git指令,可以档资料收藏一下。 文章目录前言一、Github是什么二、Github的简单应用1.新建库 git init2. 添加文件 git add .2. 提交到本地仓库 git commit -m "注释"3. 创建分支 Git checkout -b [分支…

IPython工作原理

IPython工作原理 文章目录IPython是什么?IPython工作原理IPython控制台IPython内核实现一个简单的包装内核代码在IPython内核中的执行流程IPython是什么? Python最有用的功能之一就是它的交互式解释器。交互式编程允许我们非常快速地执行代码片段、测试…

[附源码]计算机毕业设计在线教育系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

详解 Intersection Observer API ( 交叉观察器 )

文章目录一、介绍二、兼容性三、内置方法/属性四、使用五、相关链接一、介绍 Intersection Observer API 提供了一种方法可以监听目标元素是否展示到视口(viewport),常见的需求场景: 图片懒加载滚动动画… 上述的需求&#xff…

基于PHP+MySQL医院门诊缴费系统的设计与实现

本医院门诊缴费系统可以说是一个综合性的医院门诊缴费系统,这它包含了挂号管理,医生信息管理,药品信息管理,患者信息管理,住院信息挂了,收费信息管理等多种功能,因而具有一定的实用性。本站是一个B/S模式系统,开发采用了目前流行的PHP技术。系统界面友好,操作简单,比较实用。 本…

浅谈小程序开源业务架构建设之路

一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态,我们的愿景是:定义移动时代最佳体验,建设智能小程序行业标准,打破孤岛,共建开源、开放、繁荣的小程序行业生态。百度…

element-ui实现一个动态布局的对话框

前言:在工作中有各种各样的对话框,最多就是填写信息这些的,一般这样的内容都是el-input输入框,el-select选择框等等之内的,这时我们就可以封装成一个组件,想要什么内容就传一个json配置,像其他组…

适合Python初学者阅读的Github开源代码

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 你想要的,这里都有! Python作为一门热门的编程语言,在Github上想要找Python项目可以说是「多如牛毛」。 无论是Star数量还是项目数量,都稳居前3名。 项…

5分钟搭建一个粗粒度「视频去重」系统

Jupyter Notebook 教程: How to Build a Video Deduplication System 「视频去重」可以在海量的视频数据中实现侵权片段或者删除掉重复冗余的内容 。随着抖音、快手、Bilibili 等视频平台的兴起和火爆,类似视频这样的非结构化数据在数量上有了极大的增长。 视频平台…

【数据可视化】第四章—— 基于pandas的数据可视化(pandas基本操作)

图形绘制的代码:链接:https://pan.baidu.com/s/1pgS60sry6XDILIhth8bAvA?pwdabcd 提取码:abcd 文章目录1. Pandas库的数据运算1.1 方法形式的运算1.2 比较运算法则1.3 排序2. 基本统计分析函数2.1 基本统计分析函数2.2 累计统计分析函数2.3 …

[附源码]计算机毕业设计JAVA学生量化考核管理系统

[附源码]计算机毕业设计JAVA学生量化考核管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

基于PHP+MySQL高校毕业设计管理系统的设计与实现

直以来我国领导人提倡以人为本的治国方案,而大学是未来人才的培养基地,如何能够更好的对高校毕业设计信息进行管理,是很多高校一直在研究的一个问题,只有更加科学的对高校毕业设计信息进行管理,才能够更加积极的培养国家的栋梁之才。 管理员部分功能 1:教师新管理…

第二十二章《记事本》第1节:记事本项目简介

记事本软件能够打开、编辑、保存各种类型的文本文档,也能在文本文档中查找特定的关键字,此外在还能设定文本文档的字体、字号以及风格等。 22.1.1记事本功能简介 记事本软件的运行结果如图22-1所示。 图22-1记事本软件界面 从图21-1可以看到:记事本程序运行开始后,在没有…

OpenFeign动态代理、源码分析

1、OpenFeign概述 OpenFeign 组件的前身是 Netflix Feign 项目,由 Netflix 公司开发。后来 Feign 项目被贡献给了开源组织,随后Feign退出历史舞台。 OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如RequestMapping等等。O…