Hi,少数派社区的读者们,我是zysrefuse,这是我来少数派写的教程系列文章的第一篇,给大家带来一个开源密码管理器Vaultwarden的部署教程。
同学也许会问Vaultwarden是什么,我直接引用一下官方的定义
Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.Basically full implementation of Bitwarden API is provided.
用 Rust 编写的 Bitwarden 服务器 API 的替代实现,上游 Bitwarden 客户端兼容,非常适合运行官方资源密集型服务的自托管部署。基本上提供了 Bitwarden API 的完整实现。
出发点
自托管在自己的服务器或设备上运行、管理软件或服务越来越流行,一方面,开源社区代有才人出,不断奉献出功能和品质上不逊于收费产品的项目;另一方面,容器(docker)、虚拟化(KVM)等技术不断发展,将用户从繁琐的服务器运维操作中解放出来。加上云服务器厂商大价格战加剧,云服务越来越便宜。
bitwarden.com上家庭版每年的价格是40美元,但是阿里云99计划到2026年3月31日每年都是99元。.top域名新注价格1年12元,3年76元,续费价格 每年32元,阿里云Digicert 单域名证书一年68(可选) 每年最高199元价格上有优势。
⚠️但是服务器在国内需要进行IPC备案和公安备案⚠️ 时间成本上可能付出更多。
从购买到部署
第一步 购买云服务器及域名
前往阿里云
购买服务器,选择ECS 经济型e实例
购买域名,建议选择.top域名
购买ssl证书(可选)
- 在阿里云控制台搜索 数字证书管理服务 侧边栏>ssl证书管理>免费证书>立刻购买
- 产品-个人测试证书 证书类型-默认证书(3个月有效期) 如果想要一年有效期 证书类型-升级证书
第二步 IPC备案和公安备案
⚠️ 在中华人民共和国境内提供互联网信息服务,应当依法履行备案手续,所以我们需要进行备案 ⚠️
具体参考阿里云的ICP备案 指南,当IPC备案完成后就可以开始域名与DNS的配置
第三步 配置域名与DNS
进入云服务器 ECS 获取公网IP地址
进入云解析DNS >新手引导
进入数字证书管理服务 >SSL 证书管理 > 创建证书。证书签发后下载Nginx的格式的证书解压得到域名.pem和和域名.key(可选)
第四步 配置云服务器
操作系统: Ubuntu 22.04 64位
硬件配置:2核(vCPU) 2GiB 3 Mbps带宽 40GiBESSD Entry云盘
创建完 ECS实例后,通过Workbench远程连接以 root 用户身份登录(或用其他用户登录后运行 sudo su 切换为 root 身份),然后开始安装

安装docker
附上 Docker 官方部署文档(如果需要更详细的安装流程,请参考官方文档)
由于运营商网络原因,会导致您拉取Docker Hub镜像变慢,甚至下载失败。阿里云提供了官方的镜像加速器,从而加速官方镜像的下载。官方镜像加速参考文档
安装Vaultwarden
#将容器的页面复制到host,方便编辑
docker run -d --name vaultwarden -v /www/vw-data/:/data/ --restart unless-stopped vaultwarden/server:latest
docker cp vaultwarden:/web-vault/ /www/vw-vault/
docker container stop vaultwarden
docker container rm vaultwarden
#需要在文本编辑器里面修改添加上你的主域名,这个代码允许任何人注册
docker run -d --name vaultwarden -v /www/vw-data/:/data/ -v /www/web-vault/:/web-vault/ --env DOMAIN="https://你的主域名" --restart unless-stopped -p 80 vaultwarden/server:latest
#如果想要禁止其他人注册可以先删除再更改环境变量,重新创建容器
docker container stop vaultwarden
docker container rm vaultwarden
docker run -d --name vaultwarden -v /www/vw-data/:/data/ -v /www/web-vault/:/web-vault/ --env DOMAIN="https://你的主域名" -v SIGNUPS_ALLOWED=false --restart unless-stopped -p 80 vaultwarden/server:latest
#查看容器ip地址
docker inspect vaultwarden | grep IPAddress添加IPC备案号。
docker cp vaultwarden:/web-vault/index.html ./
#编辑index.html文件
vim ./index.html
<html class="theme_light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=1010">
<meta name="theme-color" content="#175DDC">
<title page-title>Bitwarden Web Vault</title>
<link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="images/icons/favicon-16x16.png">
<link rel="mask-icon" href="images/icons/safari-pinned-tab.svg" color="#175DDC">
<link rel="manifest" href="manifest.json">
<script src="theme_head.8e5494e39b48bad5e654.js"></script>
<link href="app/main.8e5494e39b48bad5e654.css" rel="stylesheet">
</head>
<body class="layout_frontend">
<app-root>
<div class="mt-5 d-flex justify-content-center">
<div><img class="mb-4 logo logo-themed" alt="Bitwarden">
<p class="text-center"><i class="fa fa-spinner fa-spin fa-2x text-muted" title="Loading" aria-hidden="true"></i></p>
</div>
</div>
</app-root>
<script src="app/polyfills.8e5494e39b48bad5e654.js"></script>
<script src="app/vendor.8e5494e39b48bad5e654.js"></script>
<script src="app/main.8e5494e39b48bad5e654.js"></script><a href="https://beian.miit.gov.cn" target="_blank">
<center>ipc备案号</center>
</a></script>
</body>
</html>
docker cp ./index.html vaultwarden:/web-vault/
docker container restart vaultwarden安装caddy
Caddy是第一个也是唯一一个_默认_自动使用HTTPS的Web服务器。
安装并且配置caddy使用反向代理和SSL。
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
nano /etc/caddy/Caddyfile 如果购买了阿里云的证书
进入ECS 云助手先将Nginx的格式的证书上传到到ECS实例,请默认上传到/www目录。
#删除/etc/caddy/Caddyfile的内容
#将以下代码需要在文本编辑器里面修改添加上你的主域名后添加到Caddyfile
xxxxx.top {
tls /www/xxxxx.top.pem /www/xxxxx.top.key
reverse_proxy 容器的IPAddress:80
}
www.xxxxx.top {
redir https://xxxxx.top{uri}
}
修改Nginx的格式的证书的所有权给caddy
cd /www
chown caddy *.key
chown caddy *.pem如果没有购买了阿里云的证书
#删除/etc/caddy/Caddyfile的内容
#将以下代码需要在文本编辑器里面修改添加上你的主域名和邮箱后,添加到Caddyfile
xxxxx.top {
tls youremail
reverse_proxy 容器的IPAddress:80
}
www.xxxxx.top {
redir https://xxxxx.top{uri}
}
重启caddy
systemctl restart caddy.service配置防火墙
进入安全组配置>安全组>入方向>快速添加

放行HTTP (80),HTTPS (443)端口

Vault初体验
浏览器输入你的域名
此时需要我们提供邮箱和一个密码来生成账号。点击 创建账户,密码不建议太简单。

创建完账户密码后,开始使用浏览器插件和手机app
安卓,苹果用户现需要一些特殊设置请参照文章末尾另一篇有相关文章,本文不多赘述
安全性提升
因为服务器在公网上,需要进一步进行设置

- 点击右上角下箭头-账户设置-安全-两步登陆-FIDO2 WebAuthn或者验证器 App ,防止有人暴力破解你的Vault的主密码。
- 禁止其他人注册账户
- 进入安全组配置 关闭ssh(22)端口,或者参考20 个 OpenSSH 最佳安全实践 保护ssh
- 定期升级服务器系统
- 定期导出你的密码库或者备份目录 /www/vw-data/
后记
安卓,苹果等平台请参考另一篇有相关文章 受够了密码数据泄漏事件?用 Bitwarden 做自己的安全负责人
到此本教程就该结束了,本人笨嘴拙腮写不出情文并茂的句子,不足的地方还望见谅。
