非常好 👍 现在你整个 Vaultwarden 自动备份体系(脚本 + systemd 定时器 + 异地同步)已经完全正常运行。以下是完整的文档化总结,便于你归档到知识库中。
🧩 Vaultwarden 自动备份方案(本地 + 异地)
一、备份目标
实现 Vaultwarden 数据的自动化定时备份,具备以下特性:
-
每天两次(02:00 与 12:00)自动执行
-
本地保留 7 份 历史备份
-
异地保留 60 份 历史备份(NAS 挂载目录)
-
支持手动运行、自动检测挂载状态
-
所有操作均记录日志
/var/log/vaultwarden-backup.log
二、目录结构
/opt/docker/
├── vaultwarden/ # 运行目录
├── backup-vaultwarden.sh # 备份脚本
└── backup/
└── vaultwarden/ # 本地备份存放目录
/opt/mnt/synowebdav/nfs/backup/vaultwarden/ # 群晖 NAS 挂载目录(异地备份)
三、备份脚本
文件路径:
/opt/docker/backup-vaultwarden.sh
#!/bin/bash
# vaultwarden 自动备份脚本
# 每天执行两次,保留本地7份、异地60份
# ==== 配置部分 ====
DATE=$(date +%F-%H%M)
SRC_DIR="/opt/docker/vaultwarden"
LOCAL_DIR="/opt/docker/backup/vaultwarden"
REMOTE_DIR="/opt/mnt/synowebdav/nfs/backup/vaultwarden"
BACKUP_NAME="vaultwarden-${DATE}.tar.gz"
LOG_FILE="/var/log/vaultwarden-backup.log"
# ==== 准备目录 ====
mkdir -p "$LOCAL_DIR"
echo "[$(date '+%F %T')] 开始 Vaultwarden 备份..." | tee -a "$LOG_FILE"
# ==== 创建本地压缩包 ====
tar -zcvf "${LOCAL_DIR}/${BACKUP_NAME}" -C "/opt/docker" vaultwarden >>"$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
echo "[$(date '+%F %T')] ❌ 打包失败,终止。" | tee -a "$LOG_FILE"
exit 1
fi
# ==== 本地保留策略(仅保留最近7份)====
find "$LOCAL_DIR" -maxdepth 1 -type f -name "vaultwarden-*.tar.gz" -printf "%T@ %p\n" \
| sort -n | head -n -7 | cut -d' ' -f2- | xargs -r rm -f
# ==== 复制到异地备份目录 ====
if [ -d "$REMOTE_DIR" ]; then
cp -a "${LOCAL_DIR}/${BACKUP_NAME}" "$REMOTE_DIR"/
if [ $? -eq 0 ]; then
echo "[$(date '+%F %T')] ✅ 已复制到异地备份目录。" | tee -a "$LOG_FILE"
else
echo "[$(date '+%F %T')] ⚠ 异地复制失败!" | tee -a "$LOG_FILE"
fi
else
echo "[$(date '+%F %T')] ⚠ 异地目录未挂载或不存在:$REMOTE_DIR" | tee -a "$LOG_FILE"
fi
# ==== 异地保留策略(仅保留最近60份)====
find "$REMOTE_DIR" -maxdepth 1 -type f -name "vaultwarden-*.tar.gz" -printf "%T@ %p\n" \
| sort -n | head -n -60 | cut -d' ' -f2- | xargs -r rm -f
echo "[$(date '+%F %T')] 🎯 备份完成:$BACKUP_NAME" | tee -a "$LOG_FILE"
echo "------------------------------------------------------" >>"$LOG_FILE"
赋权:
chmod +x /opt/docker/backup-vaultwarden.sh
四、systemd 定时执行配置
服务单元
/etc/systemd/system/vaultwarden-backup.service
[Unit]
Description=Vaultwarden 自动备份
After=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/docker/backup-vaultwarden.sh
定时器单元
/etc/systemd/system/vaultwarden-backup.timer
[Unit]
Description=Vaultwarden 备份定时器
[Timer]
OnCalendar=*-*-* 02:00:00
OnCalendar=*-*-* 12:00:00
Persistent=true
[Install]
WantedBy=timers.target
启用与检查:
systemctl daemon-reload
systemctl enable --now vaultwarden-backup.timer
systemctl list-timers | grep vaultwarden
五、验证结果
手动测试:
/opt/docker/backup-vaultwarden.sh
示例输出:
[2025-11-06 12:14:05] 开始 Vaultwarden 备份...
[2025-11-06 12:14:07] ✅ 已复制到异地备份目录。
[2025-11-06 12:14:07] 🎯 备份完成:vaultwarden-2025-11-06-1214.tar.gz
备份文件验证:
ls -lh /opt/docker/backup/vaultwarden/
ls -lh /opt/mnt/synowebdav/nfs/backup/vaultwarden/
六、日志与监控
日志路径:
/var/log/vaultwarden-backup.log
查看最近 20 行:
tail -n 20 /var/log/vaultwarden-backup.log
七、恢复步骤(简要)
-
解压备份包:
tar -zxvf vaultwarden-2025-11-06-1214.tar.gz -C /opt/docker/ -
恢复完成后:
systemctl restart vaultwarden
是否希望我帮你再补充一个“备份完整性验证”段(自动检测 tar.gz 是否损坏并记录结果),以便让这份文档更完善?
评论区