自建bitwarden備份同步到堅果雲

因爲bitwarden的氪金玩家才能使用雙因子認證,恰好手上有個vps,搭建個bitwarden服務端來使用2fa

自建bitwarden

vps比較垃圾,所以選用一個資源開銷比較小的服務端比較有必要,我這裏選擇的是 https://github.com/mprasil/bitwarden_rs

這裏採用 docker-compose 進行部署

version: '3'

services:
  bitwarden:
    image: bitwardenrs/server:latest
    container_name: bitwarden
    restart: unless-stopped
    volumes:
      - ./bw-data:/data
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true
      - WEB_VAULT_ENABLED=true
      - ADMIN_TOKEN=xxxxxxxxxxxxxxxxxxxx
    ports:
      - "127.0.0.1:8889:80"
      - "127.0.0.1:8810:3012"

其中的3012是websocket通知端口

  • WEBSOCKET_ENABLED 代表啓用 websocket

  • SIGNUPS_ALLOWED 代表是否啓用註冊

  • WEB_VAULT_ENABLED 代表是否啓用web界面

  • ADMIN_TOKEN 是管理界面的密碼,用來啓用管理界面,啓用後可通過 [https://你的域名/admin](https://你的域名/admin) 進行訪問

然後我們需要創建一個反向代理,這裏我使用的是 nginx,下面給出 nginx 配置

upstream bitwarden-default { server 127.0.0.1:8889; }
upstream bitwarden-ws { server 127.0.0.1:8810; }

server {
    listen 80;
    listen [::]:80;
    server_name bitwarden.example.tld;

    client_max_body_size 128M;

    # reverse proxy
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_pass http://bitwarden-default;
    }

    location /notifications/hub/negotiate {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://bitwarden-default;
    }

    location /notifications/hub {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;

        proxy_pass http://bitwarden-ws;
    }
}

你現在可以訪問域名看看界面了

當然,現在還只是http,http協議下bitwarden是不允許進行一些密碼操作的,你可以配置證書接入ssl,或者使用cloudflare接入ssl

註冊完自己的用戶後建議修改上面的 SIGNUPS_ALLOWED 然後重啓docker關閉註冊。

然後你可以使用bitwarden的客戶端了

創建掛載目錄備份數據

密碼數據最好備份一下,要是哪天vps壞了就gg了

bitwarden_rs的數據庫是sqlite3,直接打包壓縮備份,然後同步到堅果雲

堅果雲配置webdav

首先我們在堅果雲後端創建一個備份應用,點擊進入 賬戶信息 - 安全選項

然後點擊下面的添加應用,隨便填寫一個名字,然後複製生成的應用密碼

然後在堅果雲根目錄下創建一個目錄名爲 bitwarden_backup 作爲我們後續的同步文件夾

服務器掛載webdav

首先安裝rclone,爲什麼使用rclone而不是davfs2,主要是因爲davfs2不支持 vfs 緩存(將直接從遠程讀取並直接寫入遠程),對於後續的同步會有比較大的問題(主要是同步程序對於文件的操作)

curl https://rclone.org/install.sh | sudo bash

掛載需要使用fuse,所以需要安裝一下

apt install fuse

然後使用 rclone config 配置webdav

然後創建目錄進行掛載

mkdir /mnt/rclone_bitwarden_backup

#掛載
#rclone mount <網盤名稱:網盤路徑> <本地路徑> [參數] --daemon
#取消掛載
#fusermount -qzu <本地路徑>

rclone mount jianguoyun:/bitwarden_backup /mnt/rclone_bitwarden_backup --allow-non-empty --daemon --vfs-cache-mode full --log-file /var/log/rclone_bitwarden_backup.lo

上面的是手動掛載,如果你希望開機自動掛載可以查看 Rclone 使用教程 - 掛載 OneDrive、Google Drive 等網盤(Linux)

監聽文件變化進行同步

其實也可以直接將上面的 docker-compose 掛載目錄設置到webdav的掛載目錄上去,但是icon_cache這個目錄下很多文件,調用webdav次數過多會觸發堅果雲風控,如果不在意的話也可以採取該方案

我這裏採用 inotify 進行監控同步的方案

首先安裝 rsyncinotifywait

apt install -y rsync inotify-tools

然後監控文件變更,同步到webdav的掛載目錄

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,create,delete,move /root/bitwarden_rs/bw-data | while read -r event; do rsync -aHv --exclude icon_cache /root/bitwarden_rs/bw-data/ /mnt/rclone_bitwarden_backup/; done

注意該命令最好使用tmux之類的程序來啓動,因爲需要跑在後臺

後記

發現監聽變化就同步,堅果雲的上傳流量用得太猛了,所以還是採用了crontab定時同步的方案

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章