Duplicati使用阿里云对象存储OSS
前言
目前duplicati已经合并了@Jojo-1000的代码,但项目的release还没有更新.
所以使用docker镜像的用户还不能自动更新,因为docker镜像由linuxserver自动获取项目的release来构建的
原因
Duplicati是一款免费的开源备份客户端,它提供了安全的备份解决方案,可以加密、增量备份和压缩数据,并存储在云存储服务和远程文件服务器中。
我一直使用Duplicati来加密备份我的Unraid系统数据、Docker数据和虚拟机数据到本地磁盘。然而,为了进一步提升数据的安全性,我希望能够将备份文件存储到对象存储中。不过,Duplicati对阿里云对象存储(OSS)的S3兼容性并不理想,存在一些限制和问题。
为了解决问题,我在社区发帖并得到了问题原因的指引。我纠正了该问题,并提供了以下具体操作步骤:
1. 修改出问题的代码
如社区用户@Jojo-1000所说Maybe just setting UseChunkEncoding to false will work.根据他的提示,在https://github.com/duplicati/duplicati/blob/master/Duplicati/Library/Backend/S3/S3AwsClient.cs#L137添加一行代码
2. 生成新的文件
两种方式,1.自己更改代码构建2.用我的
2.1 自己fork后更改代码
安装visual studio时需要勾选.net Framework4.7的SDK
点击视图->解决方案资源管理器切换到文件夹视图
定位到文件:Duplicati/Library/Backend/S3/S3AwsClient.cs的136行,添加一行代码:
public virtual async Task AddFileStreamAsync(string bucketName, string keyName, System.IO.Stream source,
CancellationToken cancelToken)
{
var objectAddRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
InputStream = source,
// Add this:
UseChunkEncoding = false
// ------------
};
if (!string.IsNullOrWhiteSpace(m_storageClass))
更改代码后双击Duplicati.sln文件,选择生成->生成解决方案
然后在你的仓库路径\Duplicati\Server\bin\Debug中找到Duplicati.Library.Backend.S3.dll这个文件,复制出来备用
2.2 用我提供的文件
从这里下载文件
3. 替换旧文件
数据有风险,操作需谨慎,建议新建一个容器测试
我使用的是unraid中的docker,使用安装包安装的方式应该能直接替换,下面是替换docker中的方法:
3.1 上传文件到服务器
自己用ftp/WindTerm/MobaXterm上传,这里假定上传的路径是 /tmp/duplicati/file/
3.2 新建一个duplicati的容器!
用自己的方式新建一个备用的容器,并确保能启动,注意端口号不要和已有的duplicati冲突
使用unraid的注意/source/appdata的文件夹映射,默认情况会和你的主duplicati一致
使用命令进入容器,查看没有替换前的文件信息
root@Tower:/# docker exec -it 9d0 /bin/bash
root@9d0ebc79cf44:/# cd app/duplicati/
root@9d0ebc79cf44:/app/duplicati# ls -l | grep Duplicati.Library.Backend.S3
-rw-r--r-- 1 root root 69272 May 26 01:59 Duplicati.Library.Backend.S3.dll
-rw-r--r-- 1 root root 177 May 26 01:59 Duplicati.Library.Backend.S3.dll.config
注意下这两个文件的创建时间May 26 01:59是5月26
使用docker cp替换文件到容器内:
docker cp ./Duplicati.Library.Backend.S3.dll 9d0:/app/duplicati
重新进入容器,查看文件的时间
root@9d0ebc79cf44:/app/duplicati# ls -l | grep Duplicati.Library.Backend.S3
-rw-r--r-- 1 root root 54784 Jul 22 21:53 Duplicati.Library.Backend.S3.dll
-rw-r--r-- 1 root root 177 May 26 01:59 Duplicati.Library.Backend.S3.dll.config
时间变了说明成功替换,执行命令 docker restart 9d0 重启容器
4. 添加阿里云OSS
其他设置自行处理,重要的设置如图所示
文件夹路径(Folder path)不要输入斜杠/
登录阿里云,能看到备份的文件就是正常的了