🚀 使用 Docker Compose 部署 Duplicati
🚀 使用 Docker Compose 部署 Duplicati
Duplicati 是一款开源的跨平台备份工具,支持在云存储服务和远程文件服务器上安全存储经过加密、增量、压缩的备份。它采用 GNU 宽通用公共许可证 (LGPL),完全免费使用。
📦 项目简介
Duplicati 的核心优势在于其安全性和灵活性。它使用 AES-256 加密保护备份数据,确保隐私安全,并支持增量备份,每次只备份发生变化的数据块,有效节省存储空间和网络带宽。
主要特性: * 🔐 强加密:使用 AES-256 加密算法保护你的备份数据。 * 📈 增量备份:只备份变化的部分,提升备份效率。 * 🗜️ 数据压缩:备份时对数据进行压缩,节省存储空间。 * ☁️ 广泛的存储支持:支持超过 27 种云存储和协议,包括本地磁盘、FTP、SFTP、WebDAV,以及 Amazon S3、Backblaze B2、Google Drive、OneDrive、腾讯云 COS 等主流云服务。 * 🌐 跨平台与Web管理:基于 C# 和 .NET,支持 Windows、macOS 和 Linux,并提供响应式的 Web 管理界面,方便从浏览器或移动设备进行操作。 * 🕐 备份保留策略:支持设置备份保留策略,自动清理旧备份。
⚙️ 部署前准备
-
环境要求
- 已安装 Docker 和 Docker Compose。
- 系统内存:建议 1GB 以上。
- 磁盘空间:确保有足够空间存放备份数据。
-
环境检查 在终端中执行以下命令,确认 Docker 环境正常:
bash docker --version docker-compose --version -
创建项目目录 建议创建一个独立的目录来管理 Duplicati 的所有文件。
bash mkdir -p /opt/docker/duplicati cd /opt/docker/duplicati
🛠️ 配置 Docker Compose
基于你提供的配置并参考最佳实践,创建 docker-compose.yml 文件:
#version: "2.1"
services:
duplicati:
image: lscr.io/linuxserver/duplicati # LinuxServer 维护版镜像(稳定、适配性好)
container_name: duplicati # 容器名称,便于管理
environment:
- PUID=1000 # 运行用户 ID(默认 1000,对应服务器普通用户;若权限报错,可改为 0(root))
- PGID=1000 # 运行用户组 ID(与 PUID 一致)
#原先用权限0,这里假设1000用户会出错。
#- PUID=0
#- PGID=0
- TZ=Asia/Shanghai # 时区(确保备份时间与本地一致)
- SETTINGS_ENCRYPTION_KEY=aAaaaaaa1 # 全局配置加密密钥(需修改为自定义强密码,备份恢复需用到)
- DUPLICATI__WEBSERVICE_PASSWORD=aAaaaaaa1 # WebUI 登录密码(需与加密密钥一致,便于记忆)
volumes:
- ./config:/config # 配置目录:主机 ./config → 容器 /config(核心,保存备份任务)
- ./backups:/backups # 本地备份目录:主机 ./backups → 容器 /backups
- ./source:/source # 源数据目录:主机 ./source → 容器 /source(待备份数据)
#- ./temp:/run/duplicati-temp #修补远程文件的路径弄到机械盘大空间去。还原时需要用到!
#修补远程文件:设备上没有剩余空间:“/run/duplicati-temp/dup-b0b79d20-959f-477e-a81d-04a533e5103b”
#恢复文件会成功,但是可能是空文件,请必须核查体积!>报错:已超出后端配额,依然存在。
- /mnt/10t/cache/duplicati-temp:/run/duplicati-temp # 临时目录:挂载到大容量磁盘,避免空间不足
- /mnt/10t:/mnt/10t # 挂载大容量磁盘1(需备份的目录)
- /mnt/10t-2:/mnt/10t-2 # 挂载大容量磁盘2(需备份的目录)
ports:
- 8200:8200 # 端口映射:主机 8200 → 容器 8200(WebUI 访问端口,左边可修改)
restart: unless-stopped # 容器退出后自动重启(除非手动停止,确保备份任务不中断)
#数据库重装和修复&删除后,请重启容器,再更换新的备份名称>以免继续报错。
#默认50M上传吧,用默认的,分拆需要cpu传输大体积也考验IO网络。不管数量多,9T=9216G*0.93=8570G体积=8776581.12M/50M=175531.6224个文件,最大体积也就175531=17w万5k千多。
#network_mode: "host" #主机模式.无需预先映射端口
#restart: always
#restart: unless-stopped
#privileged: true
#特权:真
关键配置说明:
| 配置项 | 说明与建议 |
|---|---|
PUID/PGID |
设置为运行 Duplicati 的用户和组 ID,影响容器内创建文件的属主。可通过在宿主机执行 id $USER 命令查看当前用户的 UID 和 GID。设置为 1000 通常对应第一个创建的普通用户,有助于避免权限问题。 |
SETTINGS_ENCRYPTION_KEY |
强烈建议设置。此密钥用于加密 Duplicati 服务器的配置数据库,增强安全性。 |
DUPLICATI__WEBSERVICE_PASSWORD |
从 2.1.0.2 Beta 版本开始,必须设置此密码,用于访问 Web 界面。变量名需注意是双下划线。 |
/run/duplicati-temp 映射 |
非常重要。Duplicati 进行备份、恢复和验证操作时需要大量临时空间。将其映射到一个有充足空间(如 /mnt/10t/cache/duplicati-temp)的目录,可以避免因临时空间不足导致的操作失败。 |
| 数据目录映射 | 将你需要备份的宿主目录(如 /mnt/10t, /mnt/10t-2)映射到容器内,Duplicati 的 Web 界面才能看到并选择这些目录进行备份。 |
注意:请务必将
SETTINGS_ENCRYPTION_KEY和DUPLICATI__WEBSERVICE_PASSWORD的your_encryption_key_here和your_web_password_here替换为你自己的强密码,并妥善保管。
🚀 启动与验证
-
启动服务 在
docker-compose.yml文件所在目录执行:bash docker-compose up -d此命令会拉取镜像并在后台启动容器。 -
检查服务状态
bash docker-compose ps如果看到duplicati容器的状态为Up,说明服务已成功启动。 -
查看实时日志(可选) 如果遇到问题,可以通过以下命令查看容器日志来排查:
bash docker-compose logs -f duplicati -
访问 Web 界面 打开浏览器,访问
http://你的服务器IP:8200。- 如果一切正常,你将看到 Duplicati 的登录界面。
- 使用环境变量
DUPLICATI__WEBSERVICE_PASSWORD中设置的密码登录。
⚙️ 基础配置与使用
成功登录后,你就可以开始创建你的第一个备份任务了。
-
创建备份任务
- 点击 "新增备份" -> "配置新文件"。
- 为你的备份任务起一个易于识别的名称,并(可选)设置一个用于加密备份数据的密码(此密码与 Web 登录密码不同,且至关重要,一旦丢失将无法恢复备份)。
- 点击 "下一步"。
-
配置备份存储(目的地)
- 在 "存储类型" 下拉菜单中,选择你想要使用的云存储或协议,例如 "Amazon S3"、"Google Drive"、"OneDrive",或者 "S3 兼容"(适用于许多国内云厂商的对象存储)。
- 根据你选择的存储类型,填写所需的连接信息,如服务器地址、存储桶名称、访问密钥 (Access Key) 和秘密密钥 (Secret Key) 等。
- 填写完毕后,可以点击 "测试连接" 按钮验证配置是否正确。
-
选择源数据
- 点击 "添加文件夹" 或 "添加文件",选择容器内映射的路径(例如
/mnt/10t)中你需要备份的文件或目录。 - 你可以根据需要添加多个目录,或使用过滤器排除特定文件类型。
- 点击 "添加文件夹" 或 "添加文件",选择容器内映射的路径(例如
-
设置备份计划
- 在 "计划" 部分,配置自动备份的频率,例如每天凌晨 2:00 执行。
- 你也可以选择手动运行备份。
-
配置备份选项(高级设置)
- 卷大小:设置每个备份分卷文件的最大大小,例如
50mb。这有助于上传大备份集。 - 保留策略:设置保留的备份版本数量,例如只保留最近的
3个版本,以自动清理旧备份节省空间。 - 压缩级别:可根据需要在高级选项中选择,平衡压缩率与CPU占用。
- 卷大小:设置每个备份分卷文件的最大大小,例如
-
立即运行测试
- 配置完成后,点击 "立即运行" 执行首次备份。
- 在 "正在运行的作业" 中查看备份进度和日志,确保一切正常。
🔒 维护与管理
-
服务管理:
- 停止服务:
docker-compose down - 重启服务:
docker-compose restart - 查看服务状态:
docker-compose ps
- 停止服务:
-
数据备份:
- 定期备份你的
docker-compose.yml文件以及./config目录。./config目录包含了 Duplicati 的所有任务配置和本地数据库。
- 定期备份你的
-
版本更新: Duplicati 活跃更新,建议留意版本更新。
bash # 进入 docker-compose.yml 所在目录 docker-compose down docker-compose pull # 拉取最新镜像 docker-compose up -d # 可选:清理无用镜像 docker image prune注意:更新前,建议备份./config目录。新版本可能会引入配置变更,例如最近的强制密码验证。
🐛 常见问题排查 (FAQ)
| 问题现象 | 可能原因与解决方法 |
|---|---|
无法访问 Web 界面 (http://IP:8200) |
1. 检查防火墙/安全组是否放行了 8200 端口。 2. 确认容器是否正常运行: docker-compose ps。3. 确认密码设置:从 2.1.0.2 版本开始,必须通过环境变量 DUPLICATI__WEBSERVICE_PASSWORD 设置密码才能访问。 |
| 备份/恢复失败,提示 "设备上没有剩余空间" | 1. 检查临时目录空间:这是最常见的原因。确保 volumes 中映射的 /run/duplicati-temp 目录(例如 /mnt/10t/cache/duplicati-temp)有充足的磁盘空间。2. 检查备份目的地存储空间是否已满。 |
| 在 Web 界面中看不到要备份的文件夹 | 1. 检查卷映射:确保要备份的宿主机目录(如 /mnt/10t)已正确映射到容器内(volumes 配置项)。2. 容器内的 Duplicati 只能访问已通过 volumes 映射给它的目录。 |
| 内存占用过高或服务崩溃 | 1. 部分用户反馈在使用特定存储类型(如 "Tencent COS")时遇到内存问题。尝试将存储类型切换为 "S3 兼容" 并填写相应的 S3 端点地址,可能有助于解决问题。 |
| 恢复文件为空或失败 | 1. 务必核查恢复文件的体积,确认恢复操作是否完全成功。 2. 检查恢复过程中临时目录空间是否充足。 3. 确认加密密码是否正确。 |
💡 提示:定期使用 "从备份中恢复文件" 功能,测试一小部分数据的恢复流程,这是验证备份有效性的最重要环节!
希望这份教程能帮助你顺利完成 Duplicati 的部署,为你的数据建立起一道可靠的安全防线!