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
docker run -d --name vaultwarden -v /www/vw-data/:/data/ --env DOMAIN="https://你的主域名" --restart unless-stopped -p 17777:80 vaultwarden/server:latest
#以上代码需要在文本编辑器里面修改添加上你的主域名,这个代码允许任何人注册
#如果想要禁止其他人注册可以先删除在重新创建容器
docker container stop vaultwarden
docker container rm vaultwarden
docker run -d --name vaultwarden -v /www/vw-data/:/data/ --env DOMAIN="https://你的主域名" -v SIGNUPS_ALLOWED=false --restart unless-stopped -p 17777:80 vaultwarden/server:latest
添加IPC备案号。
#进入docker容器
docker exec -it vaultwarden /bin/sh
#以下代码需要在文本编辑器里面修改添加上你的IPC备案号
echo '<!doctype 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>Vaultwarden Web</title><link rel="apple-touch-icon" sizes="180x180" href="images/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png"/><link rel="mask-icon" href="images/safari-pinned-tab.svg" color="#175DDC"/><link rel="manifest" href="cca56971e438d22818d6.json"/><script defer="defer" src="theme_head.1df11f603fda400762b7.js"></script><link href="app/main.bfda25c788b32075b928.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="Vaultwarden"/><p class="text-center"><i class="bwi bwi-spinner bwi-spin bwi-2x text-muted" title="Loading" aria-hidden="true"></i></p></div></div></app-root><script defer="defer" src="app/polyfills.553f1c6e04a4256f1a4c.js"></script><script defer="defer" src="app/vendor.58a71e94f36c45876e9f.js"></script><script defer="defer" src="app/main.a8f027a034b348c3f19d.js"></script><a href="https://beian.miit.gov.cn" target="_blank"><center>你的IPC备案号</center></a></body></html>' > /web-vault/index.html
#按照顺序安按键"ctrl" "P" "Q" 退出docker容器
docker restart vaultwarden
docker ps -a
安装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
你的主域名 {
tls /www/你的主域名.pem /www/你的主域名.key
reverse_proxy 127.0.0.1:17777
}
www.你的主域名{
tls /www/你的主域名.pem /www/你的主域名.key
reverse_proxy 127.0.0.1:17777
}
修改Nginx的格式的证书的所有权给caddy
cd /www
chown caddy *.key
chown caddy *.pem
如果没有购买了阿里云的证书
#删除/etc/caddy/Caddyfile的内容
#将以下代码需要在文本编辑器里面修改添加上你的主域名和邮箱后,添加到Caddyfile
你的主域名 {
tls 你的邮箱
reverse_proxy 127.0.0.1:17777
}
www.你的主域名{
tls 你的邮箱
reverse_proxy 127.0.0.1:17777
}
重启服务器
reboot
配置防火墙
进入安全组配置>安全组>入方向>快速添加
放行HTTP (80),HTTPS (443)端口
Vault初体验
浏览器输入你的域名
此时需要我们提供邮箱和一个密码来生成账号。点击 创建账户,密码不建议太简单。
创建完账户密码后,开始使用浏览器插件和手机app
安卓,苹果用户现需要一些特殊设置请参照文章末尾另一篇有相关文章,本文不多赘述
安全性提升
因为服务器在公网上,需要进一步进行设置
- 点击右上角下箭头-账户设置-安全-两步登陆-FIDO2 WebAuthn或者验证器 App ,防止有人暴力破解你的Vault的主密码。
- 禁止其他人注册账户
- 进入安全组配置 关闭ssh(22)端口,或者参考20 个 OpenSSH 最佳安全实践 保护ssh
- 定期升级服务器系统
- 定期导出你的密码库或者备份目录 /www/vw-data/
后记
安卓,苹果等平台请参考另一篇有相关文章 受够了密码数据泄漏事件?用 Bitwarden 做自己的安全负责人
到此本教程就该结束了,本人笨嘴拙腮写不出情文并茂的句子,不足的地方还望见谅。