跳到主要内容

部署教程

Duplicati 部署教程:加密备份、远端存储与文件恢复

发布于

使用 Docker 部署 Duplicati,设置备份范围、加密口令和远端目标,恢复旧版本文件。

Duplicati 适合备份什么

网站附件、配置和数据库导出文件,可以交给 Duplicati 定时备份到 SFTP 或对象存储,并保留多个时间点。正在写入的数据库先用数据库工具导出,再备份导出文件。

前往雨云选购 ↗

注册推荐码:KuZhuJi

准备目录和登录密码

本篇使用 LinuxServer 镜像。先用 id 查看宿主用户的 UID、GID,下面 Compose 的 PUID、PGID 示例为 1000,需要按实际用户修改。

sh;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
mkdir -p ~/services/duplicati
cd ~/services/duplicati
mkdir -p config restore-test
chmod 700 config restore-test
id
umask 077
printf 'SETTINGS_ENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" > .env
printf 'DUPLICATI__WEBSERVICE_PASSWORD=%s\n' "$(openssl rand -hex 24)" >> .env
chmod 600 .env

后台密码用于登录管理界面;SETTINGS_ENCRYPTION_KEY 用于加密本地敏感设置;备份任务的加密口令用于解密远端备份。三者分别保存,备份口令与存储凭据另外留在服务器之外。

启动容器并访问后台

先建立 /srv/backup-source,并让指定 UID 能读取;把需要备份的附件与数据库导出放到这个目录。保存 compose.yaml:

yaml;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
services:
  duplicati:
    image: lscr.io/linuxserver/duplicati:latest
    env_file:
      - .env
    environment:
      PUID: "1000"
      PGID: "1000"
      TZ: Asia/Shanghai
    ports:
      - "127.0.0.1:8200:8200"
    volumes:
      - ./config:/config
      - /srv/backup-source:/source:ro
      - ./restore-test:/restore-test
    restart: unless-stopped

后台看到的来源路径是 /source,恢复目录是 /restore-test。来源只读挂载,恢复文件写入独立目录。

sh;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
docker compose config --quiet
docker compose up -d
docker compose logs --tail=80 duplicati
sh;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
ssh -L 18200:127.0.0.1:8200 user@your-server

在本机打开 http://127.0.0.1:18200,使用 .env 中的后台密码登录。8200 只绑定服务器回环地址,不需要开放公网端口。

添加远端备份任务

新建备份任务,填写名称、独立加密口令和远端存储。SFTP、S3 兼容存储分别按表单设置地址与访问凭据,点击连接测试后选择 /source 中的目录。

先运行一份小范围备份,查看结果中的未读文件、权限错误和上传失败。数据库导出先写临时文件,成功后再改成正式文件;备份计划安排在导出完成之后。

同一个远端目录由一套 Duplicati 任务维护。迁移时先停掉旧实例的计划任务,再由新实例接管。保留每日、每周和每月历史时,按文件变化量与目标容量调整。

恢复一个旧版本文件

备份一个内容明确的文本文件,修改后再次备份。进入恢复页面,选第一个时间点,将文件恢复到 /restore-test,再检查内容。

sh;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
find restore-test -maxdepth 3 -type f
sha256sum restore-test/example.txt

example.txt 换成实际文件名;先用 find 找到恢复后的层级。再恢复图片和数据库导出,数据库导入到独立实例检查。原实例丢失时,可以凭远端目标、凭据和加密口令,从远端重建恢复信息。

保存配置与迁移任务

本地 config 保存任务设置与数据库。停止容器后归档 config、.env 与 Compose 文件:

sh;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
docker compose stop duplicati
mkdir -p local-config-backups
tar -czf "local-config-backups/duplicati-config-$(date +%F-%H%M%S).tar.gz" config .env compose.yaml
docker compose start duplicati

将归档转移到服务器之外并限制访问。重建时沿用原 config 和设置加密密钥;升级前保存镜像版本及配置,更新后检查下一次计划任务的运行结果。