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 还是不行 TODO: 邮件发送失败, 但阿里云邮箱已收到异地登录提醒

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;
}
}
参考 感谢帮助! linuxserver/docker-duplicati Docker系列 搭建自动备份服务duplicati - Bensz