给你免费的甲骨文小鸡上个保险:如何用 restic 备份 vaultwarden 数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
通过以下 Referral 链接购买 DigitalOcean 主机,你将可以帮助 V2EX 持续发展
DigitalOcean - SSD Cloud Servers
tomyail
V2EX    VPS

给你免费的甲骨文小鸡上个保险:如何用 restic 备份 vaultwarden 数据

  •  
  •   tomyail 2024-09-01 23:22:37 +08:00 2160 次点击
    这是一个创建于 455 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在甲骨文免费的机器上用 docker 运行着一个 vaultwarden 服务,用来管理自己的所有密码。

    因为是免费的 vps ,为了避免机器被忽然回收导致数据丢失,因此需要定期备份 vaultwarden 的数据库。

    首先 vaultwarden 使用了 docker compose 部署,部署文件如下:

    services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: SIGNUPS_ALLOWED: false # Deactivate this with "false" after you have created your account so that no strangers can register volumes: - ./vw-data:/data # the path before the : can be changed ports: - 11001:80 # you can replace the 11001 with your preferred port 

    因此在 vw-data 下面,保存着所有密码数据,只要备份这个目录,就可以还原。

    备份工具使用 restic ,它支持将数据直接备份到远程,下面步骤主要是设置好备份地址,然后定期执行的操作细节:

    一: 首先安装 restic

    sudo apt update sudo apt install restic 

    二: 初始化 restic 仓库

    先设置好环境变量:

    export RESTIC_REPOSITORY=s3:https://<minio-host>:<minio-port>/<bucket-name>/<subpath> export AWS_ACCESS_KEY_ID=<your-access-key> export AWS_SECRET_ACCESS_KEY=<your-secret-key> export RESTIC_PASSWORD=<your-password> 

    然后执行:

    restic init 

    执行成功后,会在远程 S3 目录 https://<minio-host>:<minio-port>/<bucket-name>/<subpath> 看到一些初始化 meta 数据。

    三: 创建备份并清理旧数据的脚本 backup_and_prune.sh ,内容如下:

    #!/bin/bash # 设置环境变量 export RESTIC_REPOSITORY=s3:https://<minio-host>:<minio-port>/<bucket-name>/<subpath> export AWS_ACCESS_KEY_ID=<your-access-key> export AWS_SECRET_ACCESS_KEY=<your-secret-key> export RESTIC_PASSWORD=<your-password> # 备份目录 BACKUP_SOURCE="/home/ubuntu/vaultwarden/vwdata" # 日志文件 LOG_FILE="/home/ubuntu/back.log" # 执行备份并记录日志 restic backup $BACKUP_SOURCE >> $LOG_FILE 2>&1 # 删除超过 7 天的旧备份并记录日志 restic forget --keep-daily 7 --prune >> $LOG_FILE 2>&1 # 记录快照信息 restic snapshots >> $LOG_FILE 2>&1 

    请自行将里面的变量和路径替换为实际值。

    四: 设置定期执行:

    使用 cron 来设置每天定期执行备份任务。

    crontab -e 

    添加以下行来设置每天凌晨 2 点执行备份脚本:

    0 2 * * * /home/ubuntu/backup_and_prune.sh 

    确保你的脚本有执行权限:

    chmod +x /home/ubuntu/backup_and_prune.sh 

    这样你的备份脚本就会每天凌晨 2 点执行一次了。

    五: 验证备份

    验证数据是否正常的最好办法是让 vaultwarden 加载备份的数据,然后在网页查看数据是否是最新的。因此接下来的操作是将远程的备份下载到本地,然后在本地执行的具体操作。

    首先设置环境变量

    export RESTIC_REPOSITORY=s3:https://<minio-host>:<minio-port>/<bucket-name>/<subpath> export AWS_ACCESS_KEY_ID=<your-access-key> export AWS_SECRET_ACCESS_KEY=<your-secret-key> export RESTIC_PASSWORD=<your-password> 

    列出所有快照:

    restic snapshots 

    恢复某个快照到指定目录:

    restic restore <snapshot-id> --target ~/Downloads/ 

    根据本文的例子,最终的文件还原到了 ~/Downloads/vw-data 下面。

    本地临时运行一个 docker compose 文件:

    services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: SIGNUPS_ALLOWED: false # Deactivate this with "false" after you have created your account so that no strangers can register volumes: - ~/Downloads/vw-data:/data # the path before the : can be changed ports: - 11001:80 # you can replace the 11001 with your preferred port 

    docker compose up 启动后,访问 localhost:11001 查看数据正常就表示备份没有问题了。

    本文首发于: https://blog.tomyail.com/backup-vaultwarden-data-using-restic/ 转载请注明出处

    4 条回复    2024-09-06 15:52:35 +08:00
    300
        1
    300  
       2024-09-02 09:11:19 +08:00
    我是让 ChatGPT 写了个脚本 push 到 GitHub ,每天定时运行

    不过还没还原过,不知道成不成


    #!/bin/bash

    cd /etc/bitwarden

    rsync -av --progress /usr/local/bitwarden/ . --exclude={db.sqlite3,db.sqlite3-shm,db.sqlite3-wal,tmp}

    sqlite3 /usr/local/bitwarden/db.sqlite3 .dump > bitwarden.sql

    git add .
    git commit -m "更新 bitwarden 文件"
    git push
    tomyail
        2
    tomyail  
    OP
       2024-09-02 09:40:23 +08:00 via iPhone
    不瞒你说我的脚本也是 cursor 写的。
    存到 git 这操作挺 6 的,不过 restic 自带备份快照,而且有自动删历史备份功能,可以避免像提交到 git 那样仓库体积无限变大的情况。
    CodeDrift
        3
    CodeDrift  
       2024-09-02 10:48:12 +08:00
    snuglove
        4
    snuglove  
       2024-09-06 15:52:35 +08:00
    怎么感觉这是本地备份呢 直接整个数据目录打包不就行了 不用那么麻烦。
    @Anybfans
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5031 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 09:36 PVG 17:36 LAX 01:36 JFK 04:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86