在密码管理工具的「芸芸众生」之中,Bitwarden 是我最为青睐的一款。它不仅功能全面,采用开源架构,更重要的是支持在云主机或 HomeLab 等自托管环境中部署。通过自建服务器,你可以将密码和身份验证凭据牢牢掌握在自己的手中,再也不用担心敏感信息被服务提供商或第三方获取。
采用 Bitwarden 的混合架构后,你可以把核心密码保存在本地服务器,同时将其他数据同步到 Bitwarden 的云端服务,这样就同时兼顾了安全性和灵活性。
01. 什么是 Vaultwarden 服务?
尽管 Bitwarden 官方的服务器方案已经十分出色,但是比较吃硬件资源 😂。为此,GitHub 上的大拿 Dani Garcia 开发了 Vaultwarden,来作为 Bitwarden 的轻量级自托管替代方案。
Vaultwarden 采用了 Rust 编写,完全兼容 Bitwarden 客户端协议,支持通过 Docker 或 Podman 极速部署,几分钟内就能完成上线,极为便捷。尤其适合服务器资源有限、追求轻量化的用户。
我亲自入坑过 Bitwarden 和 Vaultwarden 的服务端方案。实测下来,Vaultwarden 的部署速度更快,功能也足够丰富,推荐你也上手一试。
那么,Vaultwarden 和 Bitwarden 之间有哪些具体差异呢?以下几点可以帮助你快速了解:
安全性:都采用了端到端加密(E2EE)来保护「密码库」数据。不过,Vaultwarden 使用了一种名为 Crypton 的专有算法,类似于 Signal 的加密方案,一定程度上甚至比 Bitwarden 的 OpenPGP 端到端加密更加安全。
用户界面:两者的界面风格相似,但不完全一致。Vaultwarden 的布局稍有不同,并且提供了内置密码管理器等额外功能,导航体验也略有区别。
服务端实现:Vaultwarden 采用了去中心化的服务器架构,各用户的数据加密后会分散存储,仅在客户端解密。相比 Bitwarden 的传统客户端-服务器(C/S)模式,这种设计在数据安全性上更具优势。
作为 Bitwarden 的轻量级替代品,Vaultwarden 自然继承了它的诸多核心功能,例如:
支持多设备同步。
端到端加密保护。
密码生成器:可以随机生成高强度密码、口令和用户名。
安全分享:可以与他人安全共享敏感信息。
Android 和 iOS 移动端应用覆盖。
接下来,我将以 Docker 部署方式为例,简要介绍 Vaultwarden 的上线流程。
02. 安装 Docker 环境
Vaultwarden 服务通常需要在多设备间同步数据,并通过公网访问。因此,建议优先选择一台稳定的 Linux 服务器或 Windows Server,来作为 Docker 的部署环境。 虽然你也可以在桌面版的 Linux 或 Windows 上部署,但关机后服务不就掉线了么 🥲……
主流 Linux 发行版:推荐使用 LinuxMirrors 提供的 Docker 一键部署脚本,适用于绝大多数主流发行版,使用起来也非常方便:
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
03. 部署 Vaultwarden 实例
Docker 环境准备就绪,现在就可以正式部署 Vaultwarden 了:
服务部署:执行以下命令,拉取 Vaultwarden 镜像并启动实例:
docker run --detach --name vaultwarden \
--volume /vaultwarden/data/:/data/ \
--restart unless-stopped \
--publish 80:80 \
vaultwarden/server:latest
记得将volume
指定到本地一个实际存在的数据存放位置。另外,虽然 Vaultwarden 也支持直接启用 HTTPS,但为了便于长期维护,我更推荐使用 Nginx 反代来提供 HTTPS 服务。
状态检查:稍等片刻,容器会自动拉起。你也可以通过以下命令查看运行状态:
docker ps -a
在列表中看到状态为healthy
就表示部署成功,可以进入下一步操作。
反向代理:在服务器上装一个你喜欢的反代服务,比如 Nginx 或 Caddy,然后再去 Vaultwarden 官方提供的反代配置示例中,Kiang 一个过来使用。例如:
器上装一个你喜欢的反代服务,比如 Nginx 或 Caddy,然后再去 Vaultwarden 官方提供的反代配置示例中,Kiang 一个过来使用。例如:
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 192.168.100.4:3210;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 80;
server_name vaultwarden.demo.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen 443 quic;
http2 on;
server_name vaultwarden.demo.com;
ssl_certificate /root/.acme.sh/XXX/fullchain.cer;
ssl_certificate_key /root/.acme.sh/XXX/osgeek.link.key;
add_header Alt-Svc 'h3=":443"; ma=86400';
add_header Strict-Transport-Security "max-age=31536000" always;
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;
}
}
公网发布:如果你使用的是云主机,记得开启防火墙;如果是 HomeLab 环境部署,则需要自行发布公网访问。这部分内容本文不做详细展开。
04. 访问 Vaultwarden 服务
在电脑上打开浏览器,访问
http://SERVER
打开 Vaultwarden 的登录页面,SERVER
需要替换为实际的服务器域名或 IP 地址。点击「创建账户」,按照提示填写相关信息并完成新用户注册。
登录管理界面后,根据需求完成初始设置。例如,从其他平台导入密码库,或者手动录入各类密码条目。
在桌面应用、移动端应用或浏览器的 Bitwarden 插件中,选择「自托管」服务,然后填入「服务器 URL」连接到本地 Vaultwarden 实例。
05、总结
通过本次实践,我们成功使用Docker部署了vaultwarden开源工作管理工具,并配置了Nginx作为反向代理来增强访问的安全性和灵活性。过程中不仅加深了对Docker容器化部署和管理的理解,也实践了如何为Web服务配置HTTPS访问,提升了项目的实战能力。此外,这次部署也为后续类似项目提供了一个可借鉴的模板,特别是在安全和效率方面提供了宝贵的经验。