最近看到 Chrome 密码管理器出现问题了,虽然没有波及到我,但感觉用谷歌浏览器的密码管理器还是不太安全,所以准备自建。
自建目标
- 稳定
- 低成本
- 高可用
- 安全
经过考虑, 选择了 Vaultwarden,并用阿里云函数通过 docker 部署。
Vaultwarden 简介
Vaultwarden 是一款开源密码管理器, 通过 Rust 编写并基于 Bitwarden API 实现。客户端仍使用 Bitwarden, 只需对接 Vaultwarden 的 API 即可。
准备工作
- 一个阿里云账号(腾讯云不知道有没有 docker 部署)
- 本地 docker 环境或具有 docker 环境的 VPS (最好是国内的, 传输更快)
部署步骤
1. 创建阿里云容器镜像服务实例
- 登录阿里云账号, 进入容器镜像服务控制台
- 开通免费个人实例
- 创建命名空间 (名称随意)
- 创建名为 "vaultwarden" 的镜像仓库
- 设置访问凭证密码
2. 登录 Docker 到阿里云
docker login --username=xxxxxxxxxxxx registry.cn-shenzhen.aliyuncs.com
xxxxx 是你的阿里云账号,就是右上角头像那里,看清楚不是 id,一般新用户是 “aliyun” 开头的,改了的自己看清楚
登录密码就是上面访问凭证设置的密码
3. 准备并上传 Docker 镜像
# 拉取官方镜像
docker pull vaultwarden/server:latest
# 查看镜像ID
docker images
# 标记镜像
docker tag 9ae942f38c7c registry.cn-shenzhen.aliyuncs.com/space/vaultwarden:2024.8.5
# 推送镜像到阿里云
docker push registry.cn-shenzhen.aliyuncs.com/space/vaultwarden:2024.8.5
这一步很重要,是为了上传镜像到阿里云(阿里不允许从公用 hub 直接 pull)
cn-shenzhen 是地域,自己换成自己开的地域,space 是上面设置的命名空间,vaultwarden 就是上面设置的你准备上传到阿里的镜像仓库名称,2024.8.5 是 tag,自己随便设置就行,我喜欢设置日期,方便后面更新的时候对比。
4. 创建阿里云函数
- 打开函数计算控制台
- 创建 Web 函数, 选择自定义容器镜像
- 选择刚才上传的镜像
- 设置监听端口为 80
- 配置 CPU 和内存 (0.25 CPU, 256MB 内存),个人使用是够了的,别开高了,等会内存泄漏,反薅
- 设置单实例并发为 100
- 选择上海时区
5. 配置函数
- 开启专有网络 (自动配置)
- 开通 NAS 文件系统 (自动配置),会挂载一个点,自己看挂载的目录
添加环境变量:
# 数据目录 DATA_FOLDER=/mnt/vaultwarden # 这个不解释,自己搜索 ENABLE_DB_WAL=false
- 部署函数
6. 临时访问设置
自己在阿里云有已经备案过的域名可以跳过 6 和 7 步,直接绑定自己的。
由于近期云函数整改, 需要通过以下步骤实现临时访问:
- 创建新的 Flask 应用获取 30 天有效域名
- 将该域名绑定到 Vaultwarden 函数,在进行 web 操作
7. 后续操作
- 在 30 天域名过期前, 通过 Web 导入密码库
- 之后直接使用函数原始 URL 调用 API
成本估算
免费套餐结束后, 个人使用年费用预计在几块钱左右,小 cpu 加冷启动会更便宜
云函数正价、nas 存储的成本自己去看阿里云的价格表
注意别让反薅了
评论