因爲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
進行監控同步的方案
首先安裝 rsync
和inotifywait
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定時同步的方案
參考鏈接
-
https://rs.bitwarden.in/configuration/enabling-websocket-notifications
-
https://gythialy.github.io/deploy-bitwarden-rs-with-traefik/
-
https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples
-
https://rclone.org/commands/rclone_mount/#vfs-cache-mode-full
-
https://www.myfreax.com/how-to-exclude-files-and-directories-with-rsync/