在本地搭建密码管理工具 Vaultwarden
Vaultwarden 是一个开源的密码管理器的服务器,它主要由 Rust 编写,最终编译成一个可执行文件,因此不需要安装其他依赖,非常地小巧绿色,下载可执行文件后,即可运行服务器;然后再搭配客户端程序,就可以管理密码了。
其项目主页介绍了通过 Docker 安装和运行的方式:
➜ docker pull vaultwarden/server:latest
➜ docker run -d --name vaultwarden -v /vw-data/:/data/ --restart unless-stopped -p 80:80 vaultwarden/server:latest
但是,如果电脑上没有安装 Docker,但是想尝试一下,该怎么办呢?遗憾的是,官方并没有提供官方的可执行文件下载链接。本文介绍获取可执行文件,以及在本地运行和试用的实践。
获取 vaultwarden
可执行文件 🔗
那么有两种方式获取可执行文件:
- 从官方的 Docker 镜像中提取可执行文件
- 从源码编译可执行文件
从官方的 Docker 镜像中提取可执行文件 🔗
如果本地有安装了 Docker,那么可以拉取镜像到本地后,然后复制出来;如果本地没有安装Docker,那么也可以使用 docker-image-extract 从镜像中提取。
详细步骤见文档《Pre built binaries 》。
从源码编译可执行文件 🔗
安装 Rust 🔗
Vaultwarden 是由 Rust 编写的,因此首先安装 Rust 编译器。根据 Rust 安装页面 的介绍,运行如下命令,按照提示安装:
➜ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
配置 Rust 的软件包索引 🔗
在编译 Rust 程序时,通常需要下载第三方的包。从国内直接放过官方的软件源,可能非常慢,甚至超时失败。因此首先要克服网络问题。可将 Rust 软件源配置为国内的镜像。比如清华大学开源软件镜像站提供的 Rust creates.io 索引。
下载源码并编译 Vaultwaren 🔗
从源码编译的二进制的官方文档见《Building binary 》。
➜ git clone git@github.com:dani-garcia/vaultwarden.git
➜ cd vaultwarden
➜ git checkout 1.30.5 # 可选,切换到最新的标签;否则编译主分支上的最新代码
➜ cargo build --features sqlite,postgresql,mysql --release # 编译发行版的 vaultwarden,并启用 sqlite, postgresql, mysql 的支持。可根据数据库按需启用
注意:上面的命令在编译时使用了--release
选项。目前编译后的可执行文件体积为 27M
左右。如果不启用该选项,默认编译的是调试(debug
)版本,编译后的可执行文件体积高达上百兆字节。
众所周知,Rust运行起来很快,但是编译起来巨慢无比。因此 cargo build
可能花费数分钟到数十分钟才会完成。编译后的可执行文件路径为 target/release/vaultwarden
。
特别注意:Vaultwarden 依赖了 openssl,因此需要本地安装了 openssl 相关库才可以编译成功。比如,对于 Debian Linux 发行版,需要安装 libssl-dev
:
➜ apt-get update && apt install -y pkg-config libssl-dev
由于编译后的可执行文件不是跨平台的,因此需要为不同的平台编译不同的可执行文件。通常需要在不同的平台上编译,或者使用交叉编译技术。但由于此处用到了 openssl,交叉编译的方式可能难以成功,或者复杂度较高。
启动 Vaultwarden 🔗
Vaultwarden 依赖数据库存储数据,这也是在编译指定了数据库驱动的特性的原因。在本地试用的最简单方式,就是试用 SQLite3 数据库。
创建一个目录作为 Vaultwarden 的程序目录。进入该目录后,创建一个 data
目录,作为 SQLite3 数据库的存储目录。默认情况下,Vaultwarden 要求安装 Web Vault 到程序目录,否则会报如下错误:
➜ vaultwarden
/--------------------------------------------------------------------\
| Starting Vaultwarden |
| Version 1.30.5 |
|--------------------------------------------------------------------|
| This is an *unofficial* Bitwarden implementation, DO NOT use the |
| official channels to report bugs/features, regardless of client. |
| Send usage/configuration questions or feature requests to: |
| https://github.com/dani-garcia/vaultwarden/discussions or |
| https://vaultwarden.discourse.group/ |
| Report suspected bugs/issues in the software itself at: |
| https://github.com/dani-garcia/vaultwarden/issues/new |
\--------------------------------------------------------------------/
[2024-03-22 23:04:57.284][vaultwarden][INFO] Private key created correctly.
[2024-03-22 23:04:57.285][vaultwarden][INFO] Public key created correctly.
[2024-03-22 23:04:57.285][vaultwarden][ERROR] Web vault is not found at 'web-vault/'. To install it, please follow the steps in:
[2024-03-22 23:04:57.285][vaultwarden][ERROR] https://github.com/dani-garcia/vaultwarden/wiki/Building-binary#install-the-web-vault
[2024-03-22 23:04:57.285][vaultwarden][ERROR] You can also set the environment variable 'WEB_VAULT_ENABLED=false' to disable it
如果不使用 Web Vault,而使用其他客户端(比如 Bitwarden),那么也可以设置 WEB_VAULT_ENABLED=false
。比如使用如下命令启动 Vaultwarden:
WEB_VAULT_ENABLED=false vaultwarden
使用客户端访问 🔗
Vaultwarden 只是一个服务器端程序,因此还需要一个前端交互界面。根据其项目说明,它与官方 Bitwarden 客户端兼容,因此使用 Bitwarden 客户端可访问 Vaultwarden 。另外,也可以在本地启动一个网页客户端 Web Vault builds for Vaultwarden。
使用 Web Vault 🔗
因此,在 Web Vault 的 Github Releases 页面 下载编译好的客户端,解压到程序目录下的 web-vault/
即可。
此时运行 vaultwarden
可执行文件,即可看到程序正常启动:
➜ vaultwarden
/--------------------------------------------------------------------\
| Starting Vaultwarden |
| Version 1.30.5 |
|--------------------------------------------------------------------|
| This is an *unofficial* Bitwarden implementation, DO NOT use the |
| official channels to report bugs/features, regardless of client. |
| Send usage/configuration questions or feature requests to: |
| https://github.com/dani-garcia/vaultwarden/discussions or |
| https://vaultwarden.discourse.group/ |
| Report suspected bugs/issues in the software itself at: |
| https://github.com/dani-garcia/vaultwarden/issues/new |
\--------------------------------------------------------------------/
[2024-03-22 23:18:50.756][start][INFO] Rocket has launched from http://127.0.0.1:8000
根据提示,在浏览器打开 http://127.0.0.1:8000,先注册账户:
登录后即可试用 Vaultwarden:
使用 Bitwarden 客户端 🔗
从 Bitwarden 的官方下载页面 找到客户端的下载地址。对于 macOS 客户端,会跳转到 Apple Store。由于苹果在国内有服务器,因此直接使用国内网络,即可快速地从 Apple Store 下载到本机。
运行 Bitwarden 客户端后,选择 self-hosted
,并填入 http://127.0.0.1:8000
。
然后就可以创建新的账号或者使用已有的账户使用本地的 Vaultwarden 了。登录后的页面如下所示:
下一步 🔗
试用 Vaultwarden 的过程是很简单和顺利的。但是,如果要作为个人甚至团队的日常,那么还需要考虑生产使用的数据库(SQLite3也许并不合适)、HTTPS 的访问,以及数据备份等等,需要精心地设计和运维。