私有密码管理器(二)自动化备份

Naseele 技术工坊 70 次阅读 1745 字 预计阅读时间: 8 分钟 发布于 2025-11-26 最后更新于 2025-12-05


AI 摘要

哈喽!上次咱们搭好了自己的密码保险箱,今天来给它加个“自动存档”功能! 就像给重要文件找个云上保险柜,本文手把手教你用阿里云OSS(对象存储)每天凌晨自动备份。即使服务器出问题,密码数据也能安全恢复。 我们会配置一个“备份小助手”容器,让它定时打包加密你的数据,悄悄传到云端。操作简单,跟着步骤来就行!

上一节我们已经部署好了自己的密码管理器,本节我们来讲讲如何让他自动化备份。

本来我是考虑用rclone+onedrive来存储的(在我们自己的电脑安装rclone协助鉴权,然后把token配置到服务器),但是经过测试,我的服务器并不能稳定连上onedrive,于是我换用了阿里云对象存储。

1.前置准备

服务器已经部署好vaultwarden。

2.开通OSS

来到阿里云,进入oss管理控制台。如果你以前没用过这个,他会让你先开启,跟着步骤走,开启之后别去购买,我们直接选择按量计费(因为他的资源包有点过于大了,最低都是100GB,我们用不着那么大的)。

来到oss管理控制台,新建一个Bucket

Bucket名称随便填,但是一定要记好,后面要用。地域尽量选离自己服务器近的,尽量同一个省的。版本控制可以考虑打开,服务端加密方式也可以打开:

创建完成,点击进入,来到概览界面,复制下面的访问端口链接(一会要用),我们用Endpoint链接:

3.获取 AccessKey 和 SecretKey

鼠标悬停到右上角个人头像,点击访问控制(或者阿里云搜索框直接搜RAM访问控制),来到访问控制界面。

点击身份管理-用户,创建用户,名字随意。创建好之后把AccessKey ID和AccessKey Secret复制下来,一会要用。

之后刷新页面,给你的用户添加AliyunOSSFullAccess权限

打钩之后记得点下面的确认新增授权。之后我们回到服务器端进行操作

4.修改服务器端配置

4.1创建rclone.conf

(其实我们还是用到rclone了,我们使用的 Docker 镜像 ttionya/vaultwarden-backup 的核心上传引擎就是Rclone)

来到我们放Vaultwarden的docker-compose.yml的目录。

nano rclone.conf

输入:

[AliyunOSS]
type = s3
provider = Alibaba
access_key_id = <你的阿里云AccessKey_ID>
secret_access_key = <你的阿里云AccessKey_Secret>
endpoint = 刚才让你复制的Endpoint链接
acl = private

注意Endpoint 不带 https 前缀,直接填类似oss-cn-shanghai.aliyuncs.com即可。

4.2修改vaultwarden的配置

nano docker-compose.yml

在其中添加backup服务:

backup:
    image: ttionya/vaultwarden-backup:latest
    container_name: vaultwarden_backup
    restart: always
    environment:
      - TZ=Asia/Shanghai
      # 每天凌晨 4 点备份
      - CRON=0 4 * * *
      
      # 对应你在 rclone.conf 里中括号[]里的名字,一定要一模一样!
      - RCLONE_REMOTE_NAME=AliyunOSS
      # 格式:Bucket名称/文件夹 (注意中间没有冒号)
      - RCLONE_REMOTE_DIR=nv-bac/Vaultwarden
      # 我们存到阿里的是一个加密过的压缩包,这是压缩包密码 (为了安全,强烈建议修改!)
      - ZIP_PASSWORD=Naseeledekey123@!
      # 保留最近 30 天的备份
      - BACKUP_KEEP_DAYS=30
      # === 强制指定数据路径 ===
      - DATA_DIR=/data
    volumes:
      # 注意:这里冒号左边的路径,必须和上面 vaultwarden 服务挂载的数据目录保持一致!
      # 假设你的 vaultwarden 挂载的是 ./vw-data:/data
      - ./vw-data:/data
      # 挂载我们刚才创建的 rclone 配置文件
      - ./rclone.conf:/config/rclone/rclone.conf
    depends_on:
      - vaultwarden

完整docker-compose.yml如下:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://你的vaultwarden域名
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=false  # 注册完记得改成 false 并重建容器
      - ADMIN_TOKEN=你的密码
    volumes:
      - ./vw-data/:/data/
    networks:
      - caddy_net  
  # 自动备份服务
  backup:
    image: ttionya/vaultwarden-backup:latest
    container_name: vaultwarden_backup
    restart: always
    environment:
      - TZ=Asia/Shanghai
      # 每天凌晨 4 点备份
      - CRON=0 4 * * *
      # 对应你在 rclone.conf 里中括号[]里的名字,一定要一模一样!
      - RCLONE_REMOTE_NAME=AliyunOSS
      # 网盘里的目标文件夹名字
      # === 修改这里:Bucket名字 + 文件夹 ===
      # 格式是:Bucket名称/文件夹路径
      - RCLONE_REMOTE_DIR=你的Bucket名称/Vaultwarden
      # 压缩包密码 (为了安全,强烈建议修改!)
      - ZIP_PASSWORD=Naseeledekey123@!
      # 保留最近 30 天的备份
      - BACKUP_KEEP_DAYS=30
      # === 增加这一行,强制指定数据路径 ===
      - DATA_DIR=/data
    volumes:
      # 注意:这里冒号左边的路径,必须和上面 vaultwarden 服务挂载的数据目录保持一致!
      # 假设你的 vaultwarden 挂载的是 ./vw-data:/data
      - ./vw-data:/data
      # 挂载我们刚才创建的 rclone 配置文件
      - ./rclone.conf:/config/rclone/rclone.conf
    depends_on:
      - vaultwarden

# 这里声明网络是外部存在的
networks:
  caddy_net:
    external: true

拉取镜像并启动服务:

docker compose up -d

如果你不放心,还可以手动触发一次,等镜像拉取完成且服务启动之后,稍等十秒钟,然后执行:

docker compose exec backup /app/backup.sh

如果看见一堆输出,还有Backup successful,说明备份完成,我们可以去阿里云那边看一下是不是多了一个文件夹,里面多了个压缩包。