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

下载链接

安卓,苹果用户现需要一些特殊设置请参照文章末尾另一篇有相关文章,本文不多赘述

安全性提升

因为服务器在公网上,需要进一步进行设置

  1. 点击右上角下箭头-账户设置-安全-两步登陆-FIDO2 WebAuthn或者验证器 App ,防止有人暴力破解你的Vault的主密码。
  2. 禁止其他人注册账户
  3. 进入安全组配置 关闭ssh(22)端口,或者参考20 个 OpenSSH 最佳安全实践 保护ssh
  4. 定期升级服务器系统
  5. 定期导出你的密码库或者备份目录 /www/vw-data/

后记

安卓,苹果等平台请参考另一篇有相关文章 受够了密码数据泄漏事件?用 Bitwarden 做自己的安全负责人

到此本教程就该结束了,本人笨嘴拙腮写不出情文并茂的句子,不足的地方还望见谅。