之前尝试过使用Bitwarden,作为跨平台密码管理来说还是可以的,虽然不如各个浏览器以及iOS自带的密码管理,但跨平台、免费使用的优势还是相当突出。最近看到vaultwarden这个开源项目,相比官方来说具有消耗资源少的优势,因此也将其部署到VPS上。
配置vaultwarden 官方提供了打包好的容器镜像,因此直接拉取相应的镜像即可。我这里用的是alpine版本,对于资源的消耗更小。
1 docker pull vaultwarden/server:latest-alpine
对于docker项目来说,docker compose方式更加简便,虽然只运行单个容器,但我也推荐这种方法部署。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 services: vaultwarden: image: vaultwarden/server:latest-alpine container_name: vaultwarden restart: unless-stopped environment: DOMAIN: "https://vaultwarden.xxxxxxx.xxx" SIGNUPS_ALLOWED: "false" ADMIN_TOKEN: “” WEB_VAULT_ENABLED: "true" volumes: - ./vw-data/:/data/ ports: - 15060:80
环境变量解释:DOMAIN表示配置的域名;下面那个代表开放注册,如果是第一次使用,建议开启,等注册完账号后再关闭。ADMIN_TOKEN表示管理界面的密码,不配置表示不开启该功能,如果关闭注册,可以在管理界面里邀请用户注册;WEB_VAULT_ENABLED代表是否开启web界面,如果用app和网页插件的话,也可以关闭。
配置nginx反向代理及https访问 这里一开始参考的中文wiki,然而中文wiki里面的配置竟然有括号不匹配。之后参照官方wiki的nginx进行配置,但是由于我用certbot进行自动化ssl证书管理,因此调整了部分配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 # 'upstream' 指令确保你有一个 http/1.1 连接 # 这里启用了 keepalive 选项并拥有更好的性能 # # 此处定义服务器的 IP 和端口。 upstream vaultwarden-default { zone vaultwarden-default 64k; server 127.0.0.1:15060; keepalive 2; } # 要支持 websocket 连接的话才需要 # 参阅:https://nginx.org/en/docs/http/websocket.html # 我们不发送上述链接中所说的 "close",而是发送一个空值。 # 否则所有的 keepalive 连接都将无法工作。 map $http_upgrade $connection_upgrade { default upgrade; '' ""; } server { # 对于旧版本的 nginx,在 ssl 后面的 listen 行中加入 http2,并移除 'http2 on' listen 443 ssl http2 ipv6only=on; listen [::]:443 ssl http2; # http2 on; server_name vaultwarden.xxxxxx.xxx; ssl_certificate # managed by Certbot ssl_certificate_key # managed by Certbot include # managed by Certbot ssl_dhparam # managed by Certbot add_header Strict-Transport-Security "max-age=31536000;"; client_max_body_size 525M; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 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; location / { proxy_pass http://vaultwarden-default; } } server { if ($host = vaultwarden.xxxxxx.xxx) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name vaultwarden.xxxxxx.xxx; return 404; # managed by Certbot }
上述配置可能存在多余项,不过实测可以正常运行了。
通过上述的配置,可以将passkey存储到相应的账号密码上(一定要有账号密码,存储成功可以看到下面有passkey的提示,但无法看到具体内容),而且还能将TOTP密钥保存到账号里,这样登录账号时可以直接复制口令,但这种方法不是很安全,建议使用bitwarden authenticator来单独保存。