如何使用 RcloneNg 备份 vaultwarden 数据目录到其他网盘

ety001

发布于246天前
远程工作,Steem开发者,Steem见证人

背景

目前懒猫微服的备份是不支持选择特定的应用备份,而我当前只需要备份的应用数据只有 vaultwarden 的数据,这怎么搞呢?

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.vaultwarden

思路

由于安全原因,懒猫的应用容器是无法访问其他应用的数据的,即 /lzcsys/run/data/appvar/ 目录没有挂载到每个应用容器下的。那么我们如果需要在懒猫微服上用应用备份,比如这篇文章提到的 RcloneNg 应用,容器内是无法直接通过本地路径访问到 vaultwarden 的数据目录。

那么我们换一个思路来考虑,懒猫微服支持开通 ssh,我们可以通过 rclonesftp,就能访问到其他应用的数据目录了!

https://appstore.lazycat.cloud/#/shop/detail/ink.akawa.ety001.rcloneng

实施

开通 SSH

在懒猫客户端中,找到下面截图中的位置,开启 SSHD。

image.png

安装“懒猫开发者工具”。

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.developer.tools

打开“懒猫开发者工具”,确保下图的样子(我忘记这里的 public key 是如何增加的了)。

image.png

配置 RcloneNg

创建读取懒猫应用数据的配置

创建一个新的配置,在第一步的 “Select” 中选择 “SSH/SFTP”,

image.png

第二步中,“SSH Host” 中输入你的懒猫地址,[你的懒猫名].heiyu.space; “SSH Username” 中输入 root; “Raw PEM-encoded private key” 输入与你刚才添加的 Public Key 对应私钥,这里可以使用 awk '{printf "%s\\n", $0}' < ~/.ssh/id_rsa 命令来转换一下格式。

image.png

保存后,这样 vaultwarden 的数据就可以通过这个来读取了。

如果你的懒猫微服磁盘IO高,那么这里保存配置的时候会等的久一些。

创建备份目的地的配置

根据你的情况,配置即可。我这里配置的是局域网下群晖,使用 SMB。

image.png

测试 RcloneNg

首先登陆懒猫的终端:

ssh root@[你的懒猫名].heiyu.space

进入终端后,再进入 RcloneNg 容器:

lzc-docker exec -it inkakawaety001rcloneng-rcloneng-1 /bin/ash

测试 vaultwarden 数据是否可读:

rclone ls appdata:/lzcsys/run/data/appvar/cloud.lazycat.app.vaultwarden

测试你的目的地是否可读:

rclone ls synology:NetBackup/LazyCat/AppDataBackup/cloud.lazycat.app.vaultwarden

编写备份脚本

根据你的需求编写备份脚本,下面是我写的,仅作参考。

#!/bin/ash

# 配置参数
SRC="appdata:/lzcsys/run/data/appvar/cloud.lazycat.app.vaultwarden"
DST_BASE="synology:NetBackup/LazyCat/AppDataBackup/cloud.lazycat.app.vaultwarden"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="${DST_BASE}/backups"

# 创建备份目录(若不存在)
rclone mkdir "${BACKUP_DIR}"

# 执行备份
echo "[$(date)] 开始备份到 ${BACKUP_DIR}/${TIMESTAMP}..."
rclone sync -P "${SRC}" "${BACKUP_DIR}/${TIMESTAMP}"

# -------------- 移除错误的软链接操作 --------------
# (因 SMB 不支持 rclone link 创建软链接,故删除以下两行)
# rclone rmdirs --ignore-errors "${CURRENT_LINK}"
# rclone link "${BACKUP_DIR}/${TIMESTAMP}" "${CURRENT_LINK}"

# -------------- 版本清理逻辑(保持不变)--------------
BACKUP_VERSIONS=$(rclone lsf "${BACKUP_DIR}" --dirs-only | sort)

# 保留每天3个最新版本
for day in $(echo "${BACKUP_VERSIONS}" | cut -c1-8 | sort -u); do
  daily_versions=$(echo "${BACKUP_VERSIONS}" | grep "^${day}" | sort -r)
  echo "${daily_versions}" | tail -n +4 | while read -r old_version; do
    echo "[$(date)] 删除当天多余版本:${BACKUP_DIR}/${old_version}"
    rclone purge "${BACKUP_DIR}/${old_version}"
  done
done

# 保留每周除当天外,其余6天各1个最新版本
today=$(date +%Y%m%d)
for day in $(echo "${BACKUP_VERSIONS}" | cut -c1-8 | sort -u | grep -v "^${today}"); do
  daily_versions=$(echo "${BACKUP_VERSIONS}" | grep "^${day}" | sort -r)
  echo "${daily_versions}" | tail -n +2 | while read -r old_version; do
    echo "[$(date)] 删除非当天多余版本:${BACKUP_DIR}/${old_version}"
    rclone purge "${BACKUP_DIR}/${old_version}"
  done
done

echo "[$(date)] 备份及清理完成"

# 发送邮件通知
wget -qO- https://message-pusher.xxx.heiyu.space/push/ety001?title=vaultwarden已备份及清理完成&channel=email&token=xxxxxx

这个备份脚本 backup_vaultwarden.sh,用来保证每天有3个最新版本的备份,每周除当天外,每天保留一份备份,最后结束的时候,还会发一封备份成功的邮件,使用的是应用商店安装的 MessagePusher

https://appstore.lazycat.cloud/#/shop/detail/dev.beiyu.message-pusher

backup_vaultwarden.sh 脚本增加执行权限后,通过懒猫网盘上传到 RcloneNg应用目录/crontabs/perioidc/hourly 目录下面,这样每小时会执行一次这个备份脚本。

image.png

如果你想要自定义计划任务,也可以把脚本放到 应用目录/scripts 目录下,然后修改 应用目录/crontabs/config/root 文件,在里面增加自己的计划任务,如下图:

image.png

总结

至此,我们实现了指定应用的应用数据目录的备份操作。

评论

0

暂无评论

说点什么呢~
收藏
0
0
0