Skip to content

🚀 使用 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 管理界面,方便从浏览器或移动设备进行操作。 * 🕐 备份保留策略:支持设置备份保留策略,自动清理旧备份。

⚙️ 部署前准备

  1. 环境要求

    • 已安装 DockerDocker Compose
    • 系统内存:建议 1GB 以上。
    • 磁盘空间:确保有足够空间存放备份数据。
  2. 环境检查 在终端中执行以下命令,确认 Docker 环境正常: bash docker --version docker-compose --version

  3. 创建项目目录 建议创建一个独立的目录来管理 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_KEYDUPLICATI__WEBSERVICE_PASSWORDyour_encryption_key_hereyour_web_password_here 替换为你自己的强密码,并妥善保管。

🚀 启动与验证

  1. 启动服务docker-compose.yml 文件所在目录执行: bash docker-compose up -d 此命令会拉取镜像并在后台启动容器。

  2. 检查服务状态 bash docker-compose ps 如果看到 duplicati 容器的状态为 Up,说明服务已成功启动。

  3. 查看实时日志(可选) 如果遇到问题,可以通过以下命令查看容器日志来排查: bash docker-compose logs -f duplicati

  4. 访问 Web 界面 打开浏览器,访问 http://你的服务器IP:8200

    • 如果一切正常,你将看到 Duplicati 的登录界面。
    • 使用环境变量 DUPLICATI__WEBSERVICE_PASSWORD 中设置的密码登录。

⚙️ 基础配置与使用

成功登录后,你就可以开始创建你的第一个备份任务了。

  1. 创建备份任务

    • 点击 "新增备份" -> "配置新文件"
    • 为你的备份任务起一个易于识别的名称,并(可选)设置一个用于加密备份数据的密码(此密码与 Web 登录密码不同,且至关重要,一旦丢失将无法恢复备份)。
    • 点击 "下一步"
  2. 配置备份存储(目的地)

    • "存储类型" 下拉菜单中,选择你想要使用的云存储或协议,例如 "Amazon S3""Google Drive""OneDrive",或者 "S3 兼容"(适用于许多国内云厂商的对象存储)。
    • 根据你选择的存储类型,填写所需的连接信息,如服务器地址、存储桶名称、访问密钥 (Access Key) 和秘密密钥 (Secret Key) 等。
    • 填写完毕后,可以点击 "测试连接" 按钮验证配置是否正确。
  3. 选择源数据

    • 点击 "添加文件夹""添加文件",选择容器内映射的路径(例如 /mnt/10t)中你需要备份的文件或目录。
    • 你可以根据需要添加多个目录,或使用过滤器排除特定文件类型。
  4. 设置备份计划

    • "计划" 部分,配置自动备份的频率,例如每天凌晨 2:00 执行。
    • 你也可以选择手动运行备份。
  5. 配置备份选项(高级设置)

    • 卷大小:设置每个备份分卷文件的最大大小,例如 50mb。这有助于上传大备份集。
    • 保留策略:设置保留的备份版本数量,例如只保留最近的 3 个版本,以自动清理旧备份节省空间。
    • 压缩级别:可根据需要在高级选项中选择,平衡压缩率与CPU占用。
  6. 立即运行测试

    • 配置完成后,点击 "立即运行" 执行首次备份。
    • "正在运行的作业" 中查看备份进度和日志,确保一切正常。

🔒 维护与管理

  • 服务管理

    • 停止服务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 的部署,为你的数据建立起一道可靠的安全防线!