使用 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,并且设置 root
的 volumes
映射。
在 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
其他选项保持默认,点击测试,弹框提示调整 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。