简介
vaultwarden是一个开源的密码管理工具,目前这个项目收藏有50.9K,是一个很出名的密码管理工具了
这时候有同学可能会有个疑问,那就是我们的浏览器以及自带密码管理了,还有比较部署这个吗?
接下来说一下我对这个工具的理解
首先这个是自托管的,也就是意味着数据掌握在自己手里
其次就是实用性,我感觉这个比浏览器自带的密码管理好用多了,浏览器自带的密码管理只能管理你在这个浏览器上使用的密码,一旦你换浏览器了就得导出密码从新导入,使用这个工具就不会有这样的问题,换浏览器后直接安装一个插件即可
然后就是跨端跨设备,使用这个工具你不但可以在电脑上使用,这个工具有移动端,你也可以在移动端上使用,这样你的密码更集中管理,更方便管理
还有一点就是团队使用,这个工具可以建立组织,让同一个组织的人员都可以共同调用密码,这个对于那种一个账号多共享的还是很实用的
项目地址
https://github.com/dani-garcia/vaultwarden
开始部署
这里的部署不止可以使用docker,还可以是二进制文件,但是使用二进制文件需要自己编译,所以我选择使用docker部署,很方便
这里就不重复docker和docker-compose的安装了,如果不会安装的可以参考这篇文章《从零开始学习Docker--Docker的安装和配置仓库源加速》
编写docker-compose文件
首先我们编写docker-compose文件,我们打开项目地址

滑倒下面,这里官方以及给了一个基础的docker-compose文件了,我们只需要在这个基础上修改即可

复制这个文件下来,新建一个记事本,粘贴进去

接下来我们需要修改的地方就三个,一个是变量,一个是数据持久化,还有就是端口
变量
必须变量
首先是变量,这里基础的docker-compose文件里面有一个DOMAIN: "https://vw.domain.tld"变量,这个变量是配置站点根目录
也就是说你的站点的域名的,如果没有域名,使用的ip就直接填写ip即可,但是这里注意的是,如果不是局域网使用建议配置域名和证书,否则你的数据就会以明文传输,意味着你的密码将会在网络上暴露
我这里时在局域网内演示,所以我直接填写ip地址

演示配置其他变量,非必须
这里我在演示一下配置其他变量,这个不是必须的,可以不用配置,都是可以在系统后台管理里面配置的
然后我们在项目地址网上翻,找到官方的变量说明,找到自己需要的变量添加上去
例如我还需要配置邮件服务,用于身份验证和发送忘记密码的时候密码提示
在项目首页找到“Usage”,在里面找到“Wiki”,点击查看详细的说明

我们在右边的导航栏里面找到“Configuration”,里面有一个“SMTP configuration”,点击查看

这里就可以看到官方给的启动示例文件了,-e开头的都是启动变量,我们可以把这个变量直接写入我们的docker-compose文件里面

我们把-e开头的全部复制,粘贴到记事本里面,粘贴的位置在刚刚我们改的ip的那个变量下面
docker-compose文件如果需要注释的话可以时#号开头

然后把前面的-e和后面的\删掉,记得保持缩进和ip那个变量一样

配置管理员
如果你不想直接在docker-compose文件里面配置邮箱等其它配置,那么就需要配置管理员,通过管理员进入系统后台进行配置
我们在右边目录里面找到“Enabling admin page”,点击打开

也是-e开头的,复制到记事本里面


然后把=号后面改成一个你的密码

注意
到这里我们的变量并没有配置完成,有细心的同学可能发现了,官方默认改的DOMAIN: "http://192.168.99.25"这个变量不是=号
是的,这里我们还需要把变量里面的=号换成:(冒号+一个空格),记住,冒号一定要英文的

数据持久化
接下来就是数据持久化了
在官方的配置文件里面其实已经做了数据持久化,但是我还是习惯改成绝对路径
volumes:下面的就是数据持久化
官方的是
- ./vw-data/:/data/

这里就看自己心情修改了,但是注意的是你只能修改:前面的,后面的不要修改
下面这个是我修改的路径
/opt/vaultwarden/data

端口/地址映射
官方给的配置文件的端口映射是把宿主机的8000端口映射到容器的80端口,这里可改可不改,如果你的服务器的8000端口没有被占用就没必要修改

这里要修改也是只能修改80端口前面的:前面的内容,后面的是不能修改的
下面是我修改后的内容,我把原本的8000端口改成了8080端口

还有就是8080端口前面的地址127.0.0.1,这个就限制了我们只能本机访问,也就是只能服务器自己访问,如果我们做反向代理的话这个不用修改,保持127.0.0.1即可,如果不做反向代理,那么就改成0.0.0.0,允许所有地址访问

创建目录
之前的docker-compose文件我们做了一个绝对路径的数据持久化,我们需要把目录创建好
ssh连接上服务器,执行下面命令,记住,创建的目录一定是你要做数据持久化的目录
mkdir -p /opt/vaultwarden/data

然后我们进入/opt/vaultwarden
cd /opt/vaultwarden

在创建一个用于存放docker-compose文件的目录,当然也可以不创建,直接把docker-compose文件扔你记得的地方,看个人习惯来
mkdir config

进入我们创建的config目录
cd config

创建docker-compose.yaml文件
刚刚我们以及在记事本上编辑好docker-compose文件了,现在就需要我们在config目录下使用vi创建一个docker-compose.yaml文件,然后把记事本上的内容粘贴进去
vi docker-compose.yaml

然后按【i】进入编辑模式,把刚刚记事本上的内容粘贴进来

按【esc】编辑模式,输入“:wq”保存并退出

执行部署
在config目录下也就是我们存放docker-compose文件的目录下执行下面命令开始拉取镜像并部署
docker compose up -d

完成部署
看到下面内容就是部署完成了

可以使用下面命令查看是否成功运行,只要看到端口正常就成功运行了
docker ps

用户登录
在浏览器上输入服务器地址加上刚刚我们docker-compose文件里面写的端口号访问,我的是8080端口
这时候你会发现一直在转圈圈

那是因为我们没有配置证书,即使我们在docker-compose里面的DOMAIN: "http://192.168.99.25"是http协议,但是也是不能访问的
这时候有两个解决方法
1、配置证书,即使是自签证书也可以,详细操作方法可以查看官方文档

第二个就是修改浏览器设置
以谷歌浏览器为例,新建一个标签页

然后在地址栏输入下面内容并回车
chrome://flags/#unsafely-treat-insecure-origin-as-secure

把“Insecure origins treated as secure”选项改成“启用”,然后在里面填写服务链接

然后点击右下角的“重新启动”,这时候就会发现可以访问了

刚开始是没有账号的,你需要新建账号

后台管理员登录
在我们的地址栏上加上/admin进入后台管理员登录界面

输入我们刚刚在变量里面设置的管理员密码登录

这时候就可以在这里面配置邮箱之类的了

警告消除
进入后台我们可以看到顶上有一个警告

这个是应为我们现在使用的管理员密码是明文形式
我们需要改一下
可以在官方文档里面找到对应的解决方法

“Secure the ADMIN_TOKEN”这部分就是解决方法

官方给了两个方法,一个是在容器里面操作,生成哈希后的替换原来的,另一个是在本机操作,也是一样的,我选择在容器里面操作
首先查看容器名称,可以看到容器名称是“vaultwarden”
docker ps
然后使用下面命令进入容器开始生成哈希
docker exec -it vaultwarden /vaultwarden hash

输入第一次密码,这个密码就是你要设置的后台管理员密码,这里输入密码是不会显示的,输入完成后回车

输入第二次密码,要和第一次的密码一样,否则不会生成

回车后就可以看到密码哈希后的值了

把这个复制下来,粘贴到记事本里面,只要复制ADMIN_TOKEN=''这对单引号里面的值即可

然后打开后台管理下的“ General settings”

找到“Admin token/Argon2 PHC”选项,把刚刚复制的值粘贴进去

滑倒最下面,点击“Save”保存

点击“确定”

这时候就会发现警告消除了

但是我们的密码是写在docker-compose文件里面的变量里面的,我们还需要到里面去修改的
在修改变量之前我们是需要先加工一下刚刚的值
我们刚刚的值里面有美元符号$,这个在docker-compose文件里面是会被认为是变量,这会导致docker-compose文件里面的ADMIN_TOKEN这个变量无法获取到真正的哈希后的密码
要解决docker-compose文件把美元符号认为是变量这个问题也很简单,把哈希后的值里面的美元符号改成双美元符号
例如下面这个是哈希后没有修改的值
$argon2id$v=19$m=65540,t=3,p=4$2Zt/hI4hUN7V2wXa5wrqc3tKTEy7WyhkccgNbWHjuoE$FI+fjSla0TL1rSdP9tC8PTjeRr9mdazPLjqDE0amHsA
那么我们就需要把里面所有的美元符号改成两个
$$argon2id$$v=19$$m=65540,t=3,p=4$$2Zt/hI4hUN7V2wXa5wrqc3tKTEy7WyhkccgNbWHjuoE$$FI+fjSla0TL1rSdP9tC8PTjeRr9mdazPLjqDE0amHsA

在记事本里面修改好后,先停止并删除我们的容器,在docker-compose文件目录下执行下面命令
docker compose down

然后使用vi编辑docker-compose.yaml文件

然后把ADMIN_TOKEN后面的明文密码替换成我们修改后的哈希值

然后保存并退出,在执行下面命令启动容器
docker compose up -d

再次进入后台,登录进去后就可以看到没有警告了
