Vaultwarden 跑起来后,还需要把服务器上的数据定期复制到外部存储。我这里用 Rclone 把数据打包后上传到 Microsoft OneDrive,每天执行一次,并保留 7 天本地备份。
我的环境与目标
- 服务器:Google Cloud VPS(Debian / Ubuntu 系统)
- 服务:Vaultwarden(通过 Docker 部署)
- 备份目标:Microsoft OneDrive
- 最终目标:每日定时、自动执行、异地备份。
安装与配置 Rclone
1. 安装 Rclone
sudo -v ; curl https://rclone.org/install.sh | sudo bash踩坑点 #1:解压工具缺失
遭遇:脚本报错
unzip工具未找到。 分析:纯净的 VPS 系统缺少基础解压工具。 解决:先安装unzip:sudo apt-get update && sudo apt-get install unzip -y,然后重新运行安装脚本。
2. 配置 Rclone
运行 rclone config,根据提示开始配置。
- 新建连接:选
n) New remote,命名为onedrive。 - 选择云盘类型:选择
Microsoft OneDrive。 - 客户端 ID 和密钥:全部直接回车,留空。
- 区域:直接回车,选择
global。 - 高级配置:选
n(No)。 - 自动配置:选
n(No),这是在无浏览器 VPS 上的关键!
踩坑点 #2:如何在无浏览器的服务器上授权?
遭遇:选择了
n之后,终端提示我需要一个config_token。 分析:这是 Rclone 的远程授权机制,需要在有浏览器的电脑上生成授权令牌。 解决:
- 在自己的个人电脑上同样安装 Rclone。
- 在个人电脑的命令行中运行
rclone authorize "onedrive"。- 浏览器会自动弹出并引导你登录微软账户、授权。
- 授权成功后,回到个人电脑的命令行窗口,复制那一整大串
{...}的 JSON 文本。- 将这串文本完整地粘贴回VPS 的终端里
config_token>提示符之后,按回车。
之后一路确认,选择你的个人 OneDrive,即可完成配置。
编写备份脚本
1. 找到 Vaultwarden 数据目录
踩坑点 #3:数据目录路径不确定
分析:备份脚本需要知道 Docker 容器映射到 VPS 上的真实数据路径。 解决:运行
sudo docker inspect vaultwarden,在输出中找到"Mounts"部分,里面的"Source"对应的路径就是我们需要的。在我的例子中是"/vw-data"。
2. 创建 backup.sh 脚本
运行 nano backup.sh,写入下面的代码:
# !/bin/bash
# 任何命令失败则立即退出
set -e
# --- 开始配置 ---
CONTAINER_NAME="vaultwarden"
VAULTWARDEN_DATA_DIR="/vw-data"
BACKUP_DIR="/home/imsxx_com/vaultwarden_backups"
RCLONE_REMOTE_NAME="onedrive"
ONEDRIVE_BACKUP_DIR="VaultwardenBackups"
RCLONE_CONFIG_PATH="/home/imsxx_com/.config/rclone/rclone.conf"
# --- 结束配置 ---
echo "备份流程开始于: $(date +"%Y-%m-%d %H:%M:%S")"
mkdir -p "$BACKUP_DIR"
BACKUP_FILE="vaultwarden-backup-$(date +%Y%m%d-%H%M%S).tar.gz"
BACKUP_FILE_PATH="$BACKUP_DIR/$BACKUP_FILE"
echo "准备停止 Vaultwarden 容器..."
sudo docker stop "$CONTAINER_NAME"
echo "容器已停止,开始创建备份文件: $BACKUP_FILE_PATH"
tar -czf "$BACKUP_FILE_PATH" -C "$VAULTWARDEN_DATA_DIR" .
echo "备份文件创建完成,准备重启 Vaultwarden 容器..."
sudo docker start "$CONTAINER_NAME"
echo "容器已重启。本地备份完成。"
echo "开始上传备份文件到 OneDrive..."
rclone --config "$RCLONE_CONFIG_PATH" copy "$BACKUP_FILE_PATH" "$RCLONE_REMOTE_NAME:$ONEDRIVE_BACKUP_DIR" --progress
echo "文件上传成功。"
echo "开始清理7天前的本地旧备份..."
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
echo "旧备份清理完毕。"
echo "备份流程全部完成于: $(date +"%Y-%m-%d %H:%M:%S")"3. 添加执行权限
chmod +x backup.sh设置 Cron 定时任务
1. 手动执行脚本,发现权限“连环坑”
踩坑点 #4:
sudo密码问题遭遇:设置了
cron任务后,发现不执行。查看日志cat ...backup.log,发现错误sudo: a password is required。 分析:cron在后台非交互式环境运行,无法响应sudo的密码输入请求。 解决:通过sudo visudo命令,在打开的sudoers文件末尾添加一行,给予指定命令免密权限:PLAINTEXTimsxx_com ALL=(ALL) NOPASSWD: /usr/bin/docker stop vaultwarden, /usr/bin/docker start vaultwardenimsxx_com ALL=(ALL) NOPASSWD: /usr/bin/docker stop vaultwarden, /usr/bin/docker start vaultwarden踩坑点 #5:
tar打包权限问题遭遇:解决了
sudo问题后,手动以普通用户身份./backup.sh模拟cron执行,又报tar: Permission denied。分析:之前用
sudo运行脚本时,创建的vaultwarden_backups文件夹所有者是root,普通用户imsxx_com没有写入权限。解决:用
chown命令将文件夹“物归原主”:BASHsudo chown -R imsxx_com:imsxx_com /home/imsxx_com/vaultwarden_backupssudo chown -R imsxx_com:imsxx_com /home/imsxx_com/vaultwarden_backups
2. 最终的定时任务设置
踩坑点 #6:Cron 的执行环境问题
遭遇:解决权限问题后,手动运行
./backup.sh正常,但cron自动执行依然失败。 分析:cron的执行环境非常干净,它不知道各种命令的路径 (PATH),也不会加载用户的环境变量配置文件 (.profile)。这是cron任务失败最根本、最常见的原因。 解决:在crontab命令中,让cron在运行脚本前加载用户环境。
- 运行
crontab -e打开编辑器。- 写入下面这行任务配置:
BASH10 0 * * * /bin/bash -c 'source ~/.profile; /home/imsxx_com/backup.sh' >> /home/imsxx_com/vaultwarden_backup.log 2>&110 0 * * * /bin/bash -c 'source ~/.profile; /home/imsxx_com/backup.sh' >> /home/imsxx_com/vaultwarden_backup.log 2>&1这行命令让
cron先加载.profile文件,再执行备份脚本。我设置的时间是北京时间每天的00:10。
调整时区并验证
1. 修改服务器时区为北京时间
sudo timedatectl set-timezone Asia/Shanghai2. 验证备份结果
设置好 cron 后,等待设定时间,确认 OneDrive 中出现带有正确北京时间的备份文件。需要修改执行时间时,调整表达式前面的分钟和小时字段。例如每天凌晨 03:00 使用 0 3 * * *。
相关内容
记录如何用 Google Cloud、Docker 与 Cloudflare Tunnel 部署 Vaultwarden,并为密码库补上安全配置和 OneDrive 异地备份。
Windows 11 使用 Emby 播放电影时频繁出现 NETIO.SYS 蓝屏,最终通过 WinDbg 日志和公开案例定位到 AdGuard WFP 驱动。本文记录问题特征、解决方法与验证结果。
记录 AMD Ryzen 平台在 Windows 11 高频使用 WSL2 时出现随机蓝屏/重启(HYPERVISOR_ERROR 0x00020001)的根因与稳定修复方案:BIOS 关闭 C-State,并附 WSL2 推荐配置。