一、目录规划

本文使用以下目录:

1
2
/opt/duplicati                         # Duplicati 自身配置以及 compose 文件
/opt/duplicati/backup-staging # 备份暂存目录

先创建目录:

1
2
mkdir -p /opt/duplicati
mkdir -p /opt/duplicati/backup-staging

如果服务器中有数据库服务,可以额外约定一个子目录用于保存数据库导出文件,例如:

1
/opt/duplicati/backup-staging/database

二、生成 Duplicati 密钥

Duplicati 支持通过环境变量提供 SETTINGS_ENCRYPTION_KEY 和管理端密码。SETTINGS_ENCRYPTION_KEY 用于保护服务器数据库中的敏感设置;如果后续配置中已经存在被加密字段,启动时缺少这个 key,Duplicati 会拒绝启动。(docs.duplicati.com)

生成随机字符串:

1
openssl rand -base64 48 | tr -d '\n'; echo

创建环境变量文件:

1
2
3
4
5
6
cat > /opt/docker/duplicati/.env <<'EOF'
SETTINGS_ENCRYPTION_KEY=替换成随机生成的长字符串
DUPLICATI__WEBSERVICE_PASSWORD=替换成管理后台密码
EOF

chmod 600 /opt/docker/duplicati/.env

已配置的密钥

1
X9ArFnYDQiPFRhOwjonxzd2wKv2wBG+8ZcyYgxZM0nHorkvw/g2gyh9rQH5MsEDs

已配置的密码

1
Zg123456

三、部署 Duplicati

LinuxServer 的 Duplicati 镜像常用挂载位如下:

  • /config:配置和状态数据
  • /backups:本地备份目录
  • /source:待备份源目录

创建 /opt/duplicati/docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: duplicati

services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
restart: unless-stopped
env_file:
- ./.env
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
ports:
- "8200:8200"
volumes:
- /opt/duplicati:/config
- /opt/duplicati/backup-staging:/backups
- /opt:/source/opt:ro
- /opt/duplicati/backup-staging:/source/backup-staging:ro

启动:

1
2
3
cd /opt/duplicati
docker compose up -d
docker logs --tail=100 duplicati

如果日志里看到类似 Server has started and is listening on *, port 8200,说明服务已正常启动。


四、打开 Duplicati 管理界面

如果本机可直接访问服务器:

1
http://服务器IP:8200

如果端口只绑定到 127.0.0.1,可以通过 SSH 转发访问:

1
ssh -L 8200:127.0.0.1:8200 root@服务器IP

浏览器打开:

1
http://127.0.0.1:8200

五、创建备份任务

1. 基本信息

新建一个备份任务,设置:

  • 名称:例如 server-backup
  • 加密:开启
  • 备份口令:单独设置一条强密码,如选择加密,密码一定记好,忘记则无法恢复数据。

2. 目标端选择 WebDAV

目标类型选择 WebDAV

示例:

  • Server:https://nas.example.com:5006
  • Path on server:/duplicati/server-backup
  • Username:你的 WebDAV 用户名
  • Password:你的 WebDAV 密码

如果 NAS 使用 Digest 认证,可在高级选项中添加:

1
--force-digest-authentication=true

同时也支持绝大多数的网盘等渠道备份。


3. 选择源目录

在 Docker 部署下,Duplicati 只能看到容器内路径,不能直接使用宿主机路径。

如果 compose 中挂载了:

1
2
- /opt:/source/opt:ro
- /opt/duplicati/backup-staging:/source/backup-staging:ro

那么在 Duplicati 里应选择:

1
2
/source/opt
/source/backup-staging

不要填写 /opt 这类宿主机路径。


4. 排除规则

建议至少排除以下路径:

1
2
/source/opt/duplicati/**
/source/opt/bark-server/data/**

说明:

  • duplicati:避免把 Duplicati 自己的运行状态再次打包进主备份
  • 数据库相关目录:不直接纳入 Duplicati 主任务

如果数据库需要备份,建议提前用脚本导出到 /opt/backup-staging/database 之类的目录,再让 Duplicati 备份导出的结果文件。


5. 定时计划

按自己的需求设置执行时间即可。
如果服务器里有数据库,通常可以让数据库导出脚本先运行,再由 Duplicati 执行正式备份任务。


6. 保留策略

常见做法:

  • 最近 7 天保留每天一份
  • 最近 4 周保留每周一份
  • 最近 12 个月保留每月一份

如果直接使用界面里的 Smart retention,这类规则可以在 UI 中完成。(docs.duplicati.com)


六、首次备份后的检查项

首次任务执行完成后,至少检查以下几项。

1. Duplicati 容器是否正常

1
2
docker ps | grep duplicati
docker logs --tail=200 duplicati

2. NAS 上是否出现备份数据

到 NAS 的 WebDAV 目录中检查是否已生成 Duplicati 的备份集文件。

3. Duplicati 界面里是否能看到备份版本

进入任务详情页,确认已有可恢复的备份版本。


七、恢复方法

1. 恢复普通文件

在 Duplicati 中进入对应任务,点击 Restore,按时间点选择文件恢复到原位置或临时目录。

2. 恢复数据库

数据库不建议直接从在线数据目录恢复。更稳妥的方式是提前保存数据库导出文件,恢复时再按对应数据库的导入方式恢复。