从keepass转到了自建vaultwarden
前言
如上所述,我一直是用的keepass加Dropbox在各个平台同步密码文件,用了三四年了,一直也还算舒服,只要解决了Dropbox连接服务器问题,大多数情况使用都是没问题的,但是Dropbox免费版不知道啥时候开始限制了客户端数量,对于我这种有多个设备的人来说稍微有点不方便,而且,有的时候不是所有在用的设备都能使Dropbox连上服务器。再者,keepass在iOS上是有客户端,但是并不是很好用,并且keepass在iOS的文件同步、文件关联什么的很不方便。
然后了解了下,vaultwarden自持自建,对资源占用也不高,各个系统都有对应的客户端,数据可以完全放在自己手里,如果域名备案,可以部署在国内服务器,速度和延迟都能得到保证。
综合考虑下了,vaultwarden相对keepass来说却是更适合我,正好手上还有几台3年到期的国内服务器在吃灰,这些原因一起促使我有动力从keepass转到vaultwarden。
配置过程
其实vaultwarden官方也提供安装脚本,使用的是vaultwarden原版以及MSSQL,我试了下,整体安装完成之后,总共占用大概1.5G的内存,仅仅是一个密码管理器,占这么多资源实在是没必要,还不如花10美元使用官方的服务。于是我选择了vaultwarden,一个使用Rust编写的官方vaultwarden替代品,占用内存非常轻量,vaultwarden本身可能占用就20M内存不到,配合现有的Nginx,也额外占不了多少资源。
我是在腾讯云国内地域服务器配置的,系统为最新版Debian,服务器资源为1核CPU,2G内存,50GSSD,用来配置一个vaultwarden绰绰有余。
其实vaultwarden也可以使用预编译的二进制软件安装,但是配置过程比Docker复杂多了,考虑到后期维护以及升级,我还是选择了docker方式部署。
安装过程是用的root账户。
安装docker
如果已经安装可以跳过这步,代码如下:
apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
接着是安装docker-compose,命令如下:
curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker composer配置文件
然后在打算保存vaultwarden数据的目录新建一个对应文件,比如说/var/www/vaultwarden,对应的名称及内容如下:
vim docker-compose.yml
version: "3"
services:
vaultwarden:
image: vaultwarden/server
container_name: vaultwarden
restart: always
ports:
- "127.0.0.1:8081:80"
- "127.0.0.1:3012:3012"
volumes:
- ./vw-data:/data
environment:
WEBSOCKET_ENABLED: "true"
SIGNUPS_ALLOWED: "true"
WEB_VAULT_ENABLED: "true"
#ADMIN_TOKEN: ""
其中,WEBSOCKET_ENABLED是指是否启用Websocket,用来推送变动通知;SIGNUPS_ALLOWED是指是否允许注册,建议第一次运行时允许注册,注册完账号之后再改为false关闭注册;WEB_VAULT_ENABLED,可以理解为是否开启web端,有些操作需要通过web端进行操作。
3012是vaultwarden使用的websocket端口,80是web相关端口,因为我本机的80端口已经被Nginx占用了,所以我将vaultwarden的80映射到了8081端口。
Nginx配置文件
没啥说的,就是配置Nginx反代后端的vaultwarden,我的完整配置文件如下:
server{
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name test.buzt.cn;
index index.html index.php;
ssl on;
ssl_certificate /path/to/test.buzt.cn.crt;
ssl_certificate_key /path/to/test.buzt.cn.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_stapling on;
ssl_stapling_verify on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header 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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8081;
}
location /admin {
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://127.0.0.1:8081;
}
}
server
{
listen 80;
server_name test.buzt.cn;
location / {
rewrite ^/(.*)$ https://test.buzt.cn/$1 permanent;
}
}
实际使用的话,替换一下SSL证书就行了。我这里使用的是test.buzt.cn作为域名。
相关命令
几个进程相关命令:
# 启动
docker-compose up -d
# 重启
docker-compose restart
# 停止
docker-compose down
# 更新vaultwarden镜像,需要先停止
docker pull vaultwarden/server:latest
配置好docker-compose及Nginx之后,打开对应的域名比如说test.buzt.cn即可登录web端注册账号,如图:
注册完之后即可返回登录界面进行登录。建议注册完之后关闭注册选项,防止无关用户注册。关闭注册方法是先停止容器,然后修改上述yml文件里面的SIGNUPS_ALLOWED为false,重新启动就行了。
配置客户端
其实客户端配置没啥说的,只要改个URL就行,比如说我macOS客户端:
打开之后,点击右上角的齿轮图标,将服务器URL修改为自建的即可。iOS等也是一样。
将密码从keepass转到vaultwarden
vaultwarden提供了keepass转换至vaultwarden功能,原版keepass 2或者macOS端的MacPass都支持导出再导入至vaultwarden,以我用的MacPass为例,解锁之后,点击文件→导出→导出为xml…,即可导出成xml:
然后登陆web端,依次到工具→导入数据,选择对应的格式即可导入了:
vaultwarden数据备份
如果跟我一样,选择将vaultwarden的数据放在/var/www/vaultwarden,则所有数据都在该目录下面,备份的时候将里面所有的文件或者挣个文件夹备份就行,如果不放心,还可以单独将里面的sqlite3数据备份一下,例如将文件备份至~:
sqlite3 /var/www/vaultwarden/bw-data/db.sqlite3 ".backup '/root/db-$(date '+%Y%m%d-%H%M').sqlite3'"
如果提示“-bash: sqlit3: command not found”,则手动安装一下sqlite3就行:
apt install sqlite3
参考内容
文中很多内容都来自于vaultwarden项目官方,项目地址:https://github.com/dani-garcia/vaultwarden/
配置相关wiki:https://github.com/dani-garcia/vaultwarden/wiki
感谢vaultwarden官方及vaultwarden项目以及众多开源开发者。