Docker 搭建 duplicati 自动备份文件

引言 docker-compose.yml
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "2.1"

services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./duplicati/config:/config
- ./duplicati/backups:/backups
- /:/source # 注意: 这里为了方便直接将 宿主机根目录 映射出来, 这样选择备份来源时, 就可以选择到所有文件
ports:
- 8200:8200
restart: unless-stopped
privileged: true
user: root
1
docker-compose up -d
1
docker logs -f duplicati
第一次访问 duplicati 后台会提醒设置密码, 部署在外网一定要设置 按 Yes 后自动跳转到这里设置密码 发现 这个 docker 镜像 默认是 允许远程访问, 而 Windows 下客户端默认未勾选 最后, 一定要滑动到最下方确定保存, 然后重新使用密码登录即可使用 添加 全局 设置 邮件通知 选项 我这里使用 阿里云企业邮箱(自定义域名邮箱)
smtp://smtp.qiye.aliyun.com:465
1
2
3
4
5
6
7
8
9
10
--send-mail-any-operation=true
--send-mail-body=%RESULT%
--send-mail-level=all
--send-mail-subject=Duplicati %OPERATIONNAME% report for %backup-name%
--send-mail-from=noreply@moeci.com
--send-mail-to=i@moeci.com
--send-http-result-output-format=Duplicati
--send-mail-url=smtp://smtp.qiye.aliyun.com:465/?starttls=when-available
--send-mail-username=noreply@moeci.com
--send-mail-password=替换为你的邮箱密码
添加一个测试备份任务 宿主机

保存位置

注意: 经过测试, 一定先在 OneDrive 上创建相应文件夹,否则 测试连接 会失败

源数据

注意: 这里要选在 /source 下,因为宿主机根目录 映射到了容器内 /source 下 补充:
注意: 发现 无法访问 /source/root/

测试备份

删除源文件, 利用备份文件恢复 补充:
注意: 发现恢复文件时, 会因为目标恢复位置没有写入权限, 导致恢复失败
> 无权限, 恢复失败

> 给与权限


> 虽然还有警告, 但恢复已经成功
补充: 可以同时恢复文件的读写权限, 未测试
Q&A

MailKit.Net.Smtp.SmtpProtocolException: The SMTP server has unexpectedly disconnected.

改为 587, 465 还是不行 阿里云企业邮箱 邮件发送失败:
解决:
1
smtp://smtp.qiye.aliyun.com:25

Error reported while accessing file:

1
2022-07-02 15:10:07 +08 - [Warning-Duplicati.Library.Main.Operation.Backup.FileEnumerationProcess-FileAccessError]: Error reported while accessing file: /source/www/wwwroot/nextcloud.moeci.com/nextcloud/nextcloud/
尝试给与权限
1
chmod -R 777 nextcloud
看来应该是解决了 TODO: 注意: 目测还是漏了些文件, 还是暂时没扫描到?
补充

Nginx 配置

nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server
{
listen 80;
listen 443 ssl http2;
server_name duplicati.moeci.com;

# proxy to 8200
location ~ / {
proxy_pass http://localhost:8200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
# cache
add_header Cache-Control no-cache;
expires 12h;
# websocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
add_header Front-End-Https on;
}
}
注意:经过测试,以上配置会导致 400, 改为下方即可,
TODO: 不知道是具体哪条影响到了
nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server
{
listen 80;
listen 443 ssl http2;
server_name duplicati.moeci.com;

# proxy to 8200
location ~ / {
proxy_pass http://localhost:8200;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header REMOTE-HOST $remote_addr;
# add_header X-Cache $upstream_cache_status;
# # cache
# add_header Cache-Control no-cache;
# expires 12h;
# # websocket support
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# add_header Front-End-Https on;
}
}

duplicati 备份 Nextcloud

缺少权限,赋予权限即可,注意 发现 755 都不行,即 公共读 都不行,不知道原因,为什么还需要写

data 数据目录 访问错误

1
2022-08-20 21:10:10 +08 - [Warning-Duplicati.Library.Main.Operation.Backup.FileEnumerationProcess-FileAccessError]: Error reported while accessing file: /source/www/wwwroot/nextcloud.moeci.com/nextcloud/nextcloud/data/
参考: https://blog.csdn.net/weixin_29104059/article/details/113534947
https://blog.csdn.net/WindNolose/article/details/122992454 nextcloud 数据目录 data 默认是不允许其它用户读写的,需手动允许,再取消检查数据目录权限,这样 duplicati 才能正常备份到 nextcloud 数据目录,否则 duplicati 源数据 文件目录树 会显示 data 文件夹加锁,备份日志会有访问 data 目录错误的警告 config.php 添加
config.php
1
'check_data_directory_permissions' => false
不添加此句,每次赋予权限完后,又会被 nextcloud 取消掉
1
chmod -R 777 data
也可以 直接赋权给 root 目测 docker 镜像 lastest 是 beta 版本,建议手动指定 docker 版本为最新的 canary 版本,最新开发版解决了很多问题,但目前发现备份很多文件时,高cpu占用问题依旧存在
Dockerfile
1
image: lscr.io/linuxserver/duplicati:development-version-v2.0.6.104-2.0.6.104_canary_2022-06-15
参考 感谢帮助! linuxserver/docker-duplicati Docker系列 搭建自动备份服务duplicati - Bensz