转至我的个人博客:https://blognas.hwb0307.com。欢迎关注!

前言

在Docker系列 搭建密码管理应用bitwarden中,我们安装了一个实用的Docker应用bitwarden。用了一段时间,你会发现它是真的好用呀!但同时你也有一点担心:万一bitwarden的数据损坏或者丢失了怎么办?

随着你安装的Docker应用越来越多,这种担心会越来越明显。比如,我通过docker进行wordpress个人博客和chevereto图床的布署。wordpress个人博客不多说,就是你现在访问的网站。chevereto图床是我用typora写markdown时绑定的图床,天天在用,经常要Ctrl+v粘贴图片的嘛!本博客的图片也是托管于我个人的chevereto图床:https://chevereto.hwb0307.com/。万一数据丢失了怎么办?比如VPS机房着火了、不小rm了、不小心你重置自己的系统了,甚至是被黑客入侵搞破坏导致数据丢失了。怎么办呢?

当然,你可以写个shell脚本进行简单的备份。不过我认为,我今天要说的duplicati才是解决这个问题的终极方案。它的docker镜像是linuxserver/duplicati,由linuxserver团队进行维护。用的人还蛮多的,最近还有更新:

这是Github repo的地址,好像没什么人用过:https://github.com/linuxserver/docker-duplicati。是不是大家有更好的选择呀?求推荐一波!

就我个人来说,duplicati已经足够好用了。它可以在本地备份,也可以通过WebDAV协议备份至阿里云、坚果云、nextcloud等云盘中。由于个人的VPS容量是有限的,我就没有备份到本地,只备份到了阿里云盘。

此外,如果有人不知道WebDAV是什么的话,建议还是Google百度一下喔!这里我粘贴一段wiki的机翻:

WebDAV(Web 分布式创作和版本控制)是超文本传输协议(HTTP)的一组扩展,它允许用户代理通过提供并发控制和命名空间操作的设施,直接在HTTP Web 服务器中协作创作内容,从而允许Web被视为可写的、协作的媒体,而不仅仅是只读媒体。[1] WebDAV由Internet 工程任务组(IETF)的一个工作组在RFC 4918中定义。 [2]
WebDAV 协议为用户在服务器上创建、更改和移动文档提供了一个框架。最重要的功能包括维护有关作者或修改日期的属性、命名空间管理、集合和覆盖保护。属性维护包括文件信息的创建、删除和查询等。命名空间管理处理在服务器命名空间内复制和移动网页的能力。集合处理各种资源的创建、删除和列表。最后,覆盖保护处理与文件锁定相关的方面。它利用了现有技术,例如传输层安全、摘要访问身份验证或XML来满足这些要求。[3]
许多现代操作系统为 WebDAV提供内置客户端支持。

我个人理解,WebDAV就是一种被广泛使用的、基础的网络存储协议。在本文中,我们会展示在阿里云盘中展示WebDAV协议的使用方案。其它网盘应该也类似,我就没有试过了。

如果你没有注册过阿里云盘的话,可以手机或者电脑点我的邀请链接注册:https://pages.aliyundrive.com/mobile-page/web/beinvited.html?code=2061fe1。目前它还在公测阶段,我还是比较看好这个网盘的。这算是夹带私货。哈哈!

可能有小伙伴说:阿里云盘可能也不安全呀!不用担心,duplicati备份数据可以经过内置AES-256算法加密,只有知道密码的人才可以执行恢复数据的操作。这样一看,也没啥问题,对吧!

duplicati还有另外一个我觉得不错的特性,即增量备份。每一次只备份和上一次备份的差异量,这对于节省VPS流量十分有利呢!我和玩NAS的小伙伴们交流,他们说TrueNAS系统都会内置类似duplicati的应用。所以真的很帅呢!

duplicati支持很多云传输的标准协议或者专有服务。如果你想备份到nas或者其它vps,应该可以试试SFTP。当然也可以像本文的示范,用WebDAV协议。

我大概的思路是,先基于docker搭配一个阿里云的Webdav服务;然后再搭建Docker版duplicati

话不多说,下面我们来安装吧!

测试环境

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linuxdocker --version # Docker version 20.10.5, build 55c4c88docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

安装aliyundrive-webdav

有自己Webdav服务或其它专有云盘的可以不用安装这个。

准备工作

对于阿里云盘来说,你要先获取一个REFRESH_TOKEN。你可以参考官网提供的方法:

你要记得保管好REFRESH_TOKEN。因为有了它,就可以直接访问你的阿里云盘呢!

经典的目录管理:

# 工作目录请按需修改
work=~/docker/aliyun_webdav && mkdir -p $work && cd $work# 提前拉取镜像
docker pull messense/aliyundrive-webdav# 打开防火墙
sudo ufw allow 7569/tcp comment 'apliyun-webdav' && sudo ufw reload

配置yml文件

新建一个docker-compose.yml文件:

vim docker-compose.yml

添加以下内容。你可以用bitwarden的生成器来生成强密码喔:

version: "3.1"
services:app:image: messense/aliyundrive-webdavenvironment:- REFRESH_TOKEN=<你的阿里云的Fresh token>  # 按需修改- WEBDAV_AUTH_USER=test_user  # 按需修改- WEBDAV_AUTH_PASSWORD=test_user_password  # 按需修改volumes:- ./app:/etc/aliyundrive-webdavports:- 7569:8080  # 按需修改restart: unless-stoppednetworks:- default
networks:default:name: aliyun

上线服务:

docker-compose up -d

NPM设置https和反代

添加域名:example.com。类似于:

访问:https://example.com。会弹出一个登陆小窗口

输入刚刚的帐户和密码(这里当然是填你自己的帐户和密码了):

用户名:test_user
密码:test_user_password

就可以登陆进去了。界面类似于(我已经有一些文件在里面。你可以在阿里云自己创建新的目录):

如果你在安装docker镜像后才新建文件夹,记得重启aliyun-webdav的docker容器:

docker-compose restart

如果中途有换域名的操作,可以:

docker-compose down && docker-compose up -d

OK,到这里的话,阿里云Webdave就准备好了!

安装duplicati

准备工作

# 工具目录
work=~/docker/duplicati && mkdir -p $work && cd $work# 提前拉取镜像
docker pull lscr.io/linuxserver/duplicati:latest# 打开防火墙
sudo ufw allow 8200/tcp comment 'duplicati' && sudo ufw reload

配置yml文件

打开Vim编辑器:

vim $work/docker-compose.yml

将以下内容添加到docker-compose.yml文件中:

version: "2.1"
services:app:image: lscr.io/linuxserver/duplicati:latestrestart: unless-stoppedenvironment:- PUID=0- PGID=0- TZ=Asia/Shanghaivolumes:- ./config:/config- ./backups:/backups- /:/source # 这里你完全可以选一个高一点一目录。我这里选择的是根目录ports:- 8200:8200 # 这里可以替换自己喜欢的端口号。 一般不使用默认的。networks:- default
networks:default:name: duplicati

:wq保存并退出。

上线服务:

docker-compose up -d # 我在腾讯云上下载,非常慢,不知道为什么~换了镜像源也没用
# docker-compose pull # 更新服务

我们可以观察一下duplicati的工作日志:

docker logs -f duplicati_app_1

当看到这些字样:

[services.d] starting services
[services.d] done.

说明duplicati已经成功启动。

NPM设置https和反代

添加域名domain.com。NPM中添加反代。类似于:

第一次登陆duplicati的后台时,会有一个密码设置。我推荐按一下yes,然后用bitwarden设置一个强密码。

下次登陆就需要额外的密码了。

尝试使用duplicati

准备工作

我们不要马上使用duplicati。建议创建一些文件夹来练练手,等整个流程跑通了,再来备份正式的文件!

比如,我先在阿里云创建一个test_user_duplicati的文件夹专门保存duplicati的备份文件。

回到shell,我们创建一些测试目录和文件

# 回home目录
mkdir -p ~/test && cd ~/test# 创建一个文本
touch test.txt && echo '我爱你!'> test.txt

OK,搞定!

备份目录

添加新备份:

我们填入一个密码,比如用bitwarden生成一个强密码:QHdH#WZD^J$@QS8*v9S6bQgXF6。下一步。

可以按下面的填法。一般172.17.0.1docker0的局域网ip地址。由于duplicatialiyundrive-webdave装在同一个docker中,因此可以通过172.17.0.1:端口号来互相访问。NPM的地址设置172.17.0.1也是同样的道理。其它类型的ip设置我就不细说了,不懂的请评论留言。用户名和密码就是刚刚安装阿里云的密码。建议点一下测试连接,当提示连接正常时再进行下一步。

这里多说一句。如果你用SFPT(SSH)的方式来备份数据的话,通常还会有请添加 --ssh-fingerprint="ssh-ed25519 32 XXXX" 来信任此主机。视情况,你也可以使用 --ssh-accept-any-fingerprints (不安全) 进行测试!的报错。这个时候要在高级选项里添加--ssh-fingerprint="ssh-ed25519 32 XXXX值以信任对方的主机。当然,在这里的示范是不需要的。

添加源数据。在本次示范中,是这样的:

一般是在sourse里面找。我在docker-compose中,挂载了根目录/。下一步。

计划就随便你了,自己选吧。选完下一步。

最后是备份的其它设置。我觉得它的智能模式不错。你也可以选其它的。点击“保存”。

最后,首页会出现一个新的备份项目:

我们按下立即运行,试试看能不能成功。因为我们的文件很小,很快就成功了:

我们可以去阿里云看看它的备份文件:

看吧,并不是原来的样子啦!我们原来是test.txt。所以就算阿里云不安全,也没有太多关系!

备份增量

下面,我们对文件进行一些改动,然后创建一些新文件。

# 目录
cd ~/test# 改动文件
echo '你知道吗?' >> test.txt
touch test2.txt && echo '你好呀!!' > test2.txt# 观察文件
ls -hl

文件已经发生了较大的改动:

total 8.0K
-rw-r--r-- 1 test_user test 16 Apr 22 14:07 test2.txt
-rw-r--r-- 1 test_user test 29 Apr 22 14:07 test.txt

下面,我们再备份一下。很快就成功了:

这时,我们去阿里云康康:

已经发生了备份了!现在我们将本地的内容全部删除:

cd ~/test && rm -r *

然后尝试恢复文件。

恢复文件

尝试从项目中恢复。下一步。

看下面!它可以恢复你保留的任何版本。我们已经产生了2个版本:

我们选择其中那个最新的吧!选中文件夹,然后点继续

下面它会询问恢复的位置。你可以自己选一个位置。我们这里可以用原位置,恢复读写权限,并覆盖。这些用法都看实际情况了:

最后,按恢复文件。成功了!它还打了个小广告,不用理踩。

我们在shell里检查一下:

cd ~/test && ls -hl

看到文件已经回来了。

total 8.0K
-rw-r--r-- 1 test_user test 16 Apr 22 14:07 test2.txt
-rw-r--r-- 1 test_user test 29 Apr 22 14:07 test.txt

看看内容的改变情况:

cat test.txt && cat test2.txt

输出为:

我爱你!
你知道吗?
你好呀!!

内容也没有什么改变呀!当然,更严谨的做法应该是比较恢复前后文件的md5sum或者是sha-265之类的。不过我懒得搞了。

有没有一种自己的文件瞬间很安全的感觉?你可以试试备份自己的bitwarden文件夹、甚至是duplicati的文件夹喔!操作一下!

某些bug

我的VPS数据是备份至我自己的NAS里,通过SSL(SFTP)的方式,一直很正常。

不过,我的NAS的数据是备份至阿里云的,某些数据会出现The remote server returned an error: (500) Internal Server Error的数据:

System.Net.WebException: The remote server returned an error: (500) Internal Server Error.at System.Net.HttpWebRequest.GetResponseFromData (System.Net.WebResponseStream stream, System.Threading.CancellationToken cancellationToken) [0x00146] in <91935ad653254a93b9d73a9f8f2f7a2d>:0 at System.Net.HttpWebRequest.RunWithTimeoutWorker[T] (System.Threading.Tasks.Task`1[TResult] workerTask, System.Int32 timeout, System.Action abort, System.Func`1[TResult] aborted, System.Threading.CancellationTokenSource cts) [0x000f8] in <91935ad653254a93b9d73a9f8f2f7a2d>:0 at Duplicati.Library.Utility.AsyncHttpRequest+AsyncWrapper.GetResponseOrStream () [0x0004d] in <2a3ee711c7c04f6c957360f2cf183a7f>:0 at Duplicati.Library.Utility.AsyncHttpRequest.GetResponse () [0x00044] in <2a3ee711c7c04f6c957360f2cf183a7f>:0 at Duplicati.Library.Backend.WEBDAV.Delete (System.String remotename) [0x0008d] in <5df020eccaa84287a3c79d1a4bf95fc9>:0 at Duplicati.Library.Main.BackendManager.DoDelete (Duplicati.Library.Main.BackendManager+FileEntryItem item) [0x0001c] in <e60bc008dd1b454d861cfacbdd3760b9>:0

并且远程连接经测试都是正常的。

更奇怪的是,并不是所有的记录都会出错,有一些记录就是正常运作。而且这些记录并不是一开始就出错,而是运行了几次才忽然出错。我感觉可能是阿里云是否对这种传输进行了限制?

目前暂无头绪。持续观察中!

小结

有了duplicati,加上阿里云,基本上可以认为是安全无忧了。这里说一下,凡是有Webdav的云都支持喔,比如Nextcloud。它上面还支持好多种其它服务,看你自己选了。

其实呢,duplicati只是说多安一份心而已,一般情况是不会走到恢复数据这一步啦!如果你迁移docker,直接scp到新的VPS就行了,不用专门备份,然后在新的VPS中恢复。

另外,如果我挂载一个远程的aliyun-webdav(基于https),好像是不能成功的,暂时也不知道是什么原因。估计是哪里填写得不对。

基本上就是这样。有了bitwardenduplicati这两个基础的应用,妈妈再也不用担心我玩VPS的安全性不够了!

不过,我觉得如果duplicati可以有一个错误远程通知的功能就好了。在一段时间的使用里,我发现duplicati偶尔不能备份成功。如果日程备份失败有邮件或者短信通知的话,应该会更好!

最后,晒一下自己对duplicati的日常使用:

以后还会慢慢分享其它好用的Docker应用噢!敬请期待吧!

Docker系列 搭建自动备份服务duplicati相关推荐

  1. Docker系列 搭建个人图床chevereto

    转至我的个人博客:https://blognas.hwb0307.com.欢迎关注! 此教程经测试有些缺陷,改良版教程详见:https://blognas.hwb0307.com/linux/dock ...

  2. Docker系列 搭建密码管理应用bitwarden

    转至我的个人博客:https://blognas.hwb0307.com.欢迎关注! 前言 根据Docker系列 两大神器Nginx proxy manager (NPM)和ddns-go的安装的教程 ...

  3. python b站自动签到_搭建自动签到服务

    上上篇文章已经交代了怎么升级python的版本,难道你以为仅仅拿来B站挂机吗?是时候再做一点正事了!!!于是我们来搭建自动签到平台.框架是现成的,由 binux 创造,地址在这里. 作者已经搭建了一个 ...

  4. Docker系列 搭建个人云盘服务nextcloud

    转自我的个人博客https://blognas.hwb0307.com.欢迎关注! 前言 虽然我们前面介绍了图床之类的Docker应用,但其实云盘服务才是更加贴近大众生活的Docker应用. Next ...

  5. Docker系列 安装个人RSS服务TTRSS 手机完美适配

    转自我的个人博客https://blognas.hwb0307.com.欢迎关注! 前言 关于RSS的介绍这里不再多说,请看我的另一篇博文:解决信息爆炸困扰的完美方案--RSS. RSS订阅器平台有很 ...

  6. linux docker容器MySQL自动备份发送到邮箱

    首先配置mail $yum install mailx $vim /etc/mail.rc #以下内容添加至文件末尾 set ssl-verify=ignore set nss-config-dir= ...

  7. jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes

    使用 Jenkins 自动发布服务到 Kubernetes Jenkins 是什么 一个比较流行的开源 CI/CD 工具 CI/CD : 持续集成/持续部署 Kubernetes 是什么 容器化工具 ...

  8. 云服务器实现Ms Sqlserver数据库定时自动备份并存至指定存储空间

    适用于windows系统(本次测试环境为windows2012+sqlserver2012)可实现对mssql数据库定时自动备份,同进还可以自动发送备份至指定的FTP空间,Email,局域网空间等.点 ...

  9. 数据服务器数据自动备份工具,网站数据自动备份工具介绍

    12月的寒风吹过,站长无时无刻不在担心网站,会不会在下一分钟就被关闭.而此时,为了防止服务器机房断网,网站被迫关闭,网站的数据备份就显得格外重要,一旦网站出现问题,我们可以利用最新的数据上传到其他空间 ...

最新文章

  1. 厉害!苏炳添即将在暨南大学成立短跑实验室
  2. IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率
  3. spark面试总结1
  4. C++读取numpy数据二进制文件
  5. /dev/null 文件
  6. Android系统(134)--- Android关于OOM的解决方案 ##OOM
  7. 已知圆心及半径,通过MATLAB画圆
  8. 管道泄漏监测系统分布式光纤测温技术方案
  9. 当前默认服务器维护尚未完成,更新公告 | 7月11日早8点停服维护
  10. 植物研究最新进展(2021年11月)
  11. 创意、实现和合作:一次原创H5的尝试
  12. Matlab视频处理
  13. winrar压缩过滤文件及文件夹
  14. 论文阅读:《AliMe Assist: An Intelligent Assistant for Creating an Innovative E-commerce Experience》
  15. ecshop支持mysql_ecshop安装不支持MySQL
  16. python爬虫简易到进阶实战篇——(1)
  17. 学而时习之,不亦说乎
  18. 一个程序员眼中的北京和上海
  19. 一毕业就失业?应届生错过秋招有多难受
  20. 酒业迷茫期,江小白凭什么获十亿融资?

热门文章

  1. oledb excel java_EXCEL数据导入数据库
  2. Debug:Nifi Timer-Driven Process异常
  3. LeetCode部分题解
  4. 新作《.NET 4.0面向对象编程漫谈》之序“穿越梦想、起锚远航”
  5. 人工智能数据集:直升机(2)
  6. 乐山计算机学校电子科技大学,乐山市计算机学校喜获电子科技大学网教先进
  7. 大赛首单惊人:一天收益20%
  8. 代码随想录算法训练营第五十二天_第九章_动态规划 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
  9. 初窥门径——通过游戏人物建模来窥探python的对象模型
  10. windows 2003安全管理设置