docker 搭建 duplicati 备份数据

绕海飞行的鱼🐟 发布于 2023-09-23 91 次阅读


前言

先前由于数据比较少,并且也不怎么在乎,所以 VPS 上一直放任自流,倒也没出现丢数据的情况。不过自从有了这个小博客后,想着可能会遇到要迁移数据、VPS 挂掉、VPS 商跑路。。。刚好在找其他东西的时候发现了这么一款好用的备份工具,就有了今天这篇文章~

部署

Duplicati 目前仍然处于 beta 版本,它可以用多种协议传输备份数据,也可以直接备份到网盘,对我来说功能足够,而且配置好后几乎不用管它~

首先创建一个 Duplicati 文件夹,里面创建 duplicati.yaml 后,编辑如下配置写入保存:

version: '3'
services:
  duplicati:
    image: linuxserver/duplicati
    container_name: duplicati
    restart: unless-stopped
#    ports:
#      - 8200:8200
    environment:
# 由于某些需要备份的文件夹涉及到了 root 权限,所以这里直接以 root 运行
      - PUID=0
      - PGID=0
      - TZ=Asia/Shanghai
#      - CLI_ARGS= #optional # 命令行参数可以参考 https://duplicati.readthedocs.io/en/latest/07-other-command-line-utilities/
    networks:
      - mynet
    volumes:
      - ./config:/config # 配置文件路径
      - ./backups:/backups # 本地备份时的文件路径
      - /root:/source:ro
 # 这个是要被备份的文件路径,如果要备份整个 VPS 的话,可以直接输 /,保险起见,我加了个 ro 只读

networks:
  mynet:
    external: true

接着配置 docker 中 nginx 进行反代(以下配置根据自身环境修改):

# duplicati
server {
  listen 80;
  listen [::]:80;
  server_name yourdomain;


  location / {
    set $targethost http://duplicati:8200;
    proxy_pass $targethost;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 100m;
  }
}

最后启动容器和重载 nginx 即可:

docker compose -f duplicati/duplicati.yaml up -d
docker compose restart nginx

使用

首先进入页面后,会提示你是否设置个密码,建议点 yes 设置一个,或者稍后也可以在设置中进行设置:

然后点新增备份 -> 配置新备份,备份文件的 AES 密码如果有的话,需要记得,否则就还原不了啦~

下一步的存储类型可以选择很多,选择网盘的话,可以点击 授权ID 获取网盘授权:

测试连接正常后,下一步,这里 计算机 -> source 文件夹,就是刚刚 docker compose 里面指定的需要备份的文件夹,勾选相关的配置就行了:

接下来是指定备份时间,没什么好说的,最后一步是设定备份卷大小和备份策略;卷大小为确保传输稳定性,可以根据实际情况调整:

全部完成后,点击保存即可!主界面中可以看到建好的配置文件,点击立即运行即可看到效果了~

高级应用

duplicati 可以配置一些高级选项以支持一些高级操作。

消息通知

在编辑配置文件第五步,选项 中,打开底下的高级配置,添加相关项!

高级选项中可以 以文本形式编辑,这里给出一个配置示例,大家可以根据实际情况进行修改:

--send-http-level=All
--send-http-message=Duplicati %OPERATIONNAME% report for %backup-name% %RESULT%
--send-http-message-parameter-name=message
--send-http-url=<你的消息服务器地址>
--send-http-verb=POST
--send-http-result-output-format=Json
--send-http-log-level=Warning

当输入后,切换成以列表形式显示时,对应的每个项都有详细的说明,这里就不作过多解释了!

--send-http-result-output-format 值为 json 时,--send-http-message 会失效,即只会以 json 格式直接传递,由于我使用 Duplicati 值时收到的消息都被 URLEncode 编码过了,根本不是人看的,所以这边选了 json!
由于我是每天备份,只希望在除成功之外的结果时才给我发消息,--send-http-level 中,介绍好像可以支持多个参数,但是我填了之后,备份时就会给警告不支持。。。无奈只能选 All。。。

经过上述设置后,在备份完成时,你应该能收到 Duplicati 给你发来的消息了!