
ety001
目前懒猫微服的备份是不支持选择特定的应用备份,而我当前只需要备份的应用数据只有 vaultwarden 的数据,这怎么搞呢?
由于安全原因,懒猫的应用容器是无法访问其他应用的数据的,即 /lzcsys/run/data/appvar/ 目录没有挂载到每个应用容器下的。那么我们如果需要在懒猫微服上用应用备份,比如这篇文章提到的 RcloneNg 应用,容器内是无法直接通过本地路径访问到 vaultwarden 的数据目录。
那么我们换一个思路来考虑,懒猫微服支持开通 ssh,我们可以通过 rclone 的 sftp,就能访问到其他应用的数据目录了!
在懒猫客户端中,找到下面截图中的位置,开启 SSHD。

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

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

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

保存后,这样 vaultwarden 的数据就可以通过这个来读取了。
如果你的懒猫微服磁盘IO高,那么这里保存配置的时候会等的久一些。
根据你的情况,配置即可。我这里配置的是局域网下群晖,使用 SMB。

首先登陆懒猫的终端:
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。
把 backup_vaultwarden.sh 脚本增加执行权限后,通过懒猫网盘上传到 RcloneNg 的 应用目录/crontabs/perioidc/hourly 目录下面,这样每小时会执行一次这个备份脚本。

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

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