• 开源数据备份工具 Duplicati


    使用 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    配置文件这里要额外说明一下,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。

  • 相关阅读:
    车内信息安全技术-安全技术栈-软件安全
    【异常错误】descriptors 的问题:module ‘scipy.stats‘ has no attribute ‘gibrat‘
    [iOS开发]NSOperation & NSOperationQueue
    Mybatis的动态SQL和分页
    华为云云耀云服务器L实例评测|Huawei Cloud EulerOS 自动化环境部署
    【沐风老师】推荐2023年3DMAX的10个最佳插件!
    Decord库快速抽帧
    预训练模型之ELMO -《Deep contextualized word representations》论文笔记 + 高频面试题
    [ZJOI2013]K大数查询 (权值线段树套权值线段树+标记永久化)
    React
  • 原文地址:https://blog.csdn.net/juemuren444/article/details/128151301