使用群晖自建 Bitwarden 密码仓库
Bitwarden 是一个跨平台的密码管理软件,类似于 1Password、EnPass、LastPass 等,支持几乎目前所有的平台(Mac、PC、iOS、Android、Web 浏览器、Chrome 扩展)。Bitwarden 是免费开源的,可以将服务端部署在自己的服务器上,比如群晖的 Docker 中。但官方的 Docker 镜像要求至少 2G 以上内存,对系统要求比较高。有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。最主要,是数据自已掌握,而有是免费。
网上的类似教程也有很多,这里我总结了一下,供参考。
一、 环境准备
1、打开File Station,找到docker文件夹,新建文件夹:bitwarden。然后在bitwarden 里建立两个下级文件夹:data和ssl,目录结构如下:
docker/bitwarden/data 和 docker/bitwarden/ssl
2、将证书文件放置于 docker/bitwarden/ssl 目录
将SSL证书(Nginx版)文件xxx.crt/xxx.pem 和 xxx.key放到 docker/bitwarden/ssl 目录。当然你也可以将这两个文件重命名,包括后缀。
二、 安装Bitwarden服务端
1、下载安装:
打开群晖 Docker,“注册表”中搜索bitwardenrs,双击bitwardenrs/server并选择 latest 下载。这个bitwardenrs/server是新版镜像,老版镜像是mprasil/bitwarden,老版镜像已被新版镜像替代并已停止更新。
2、配置容器参数
镜像下载完成后,到 Docker-映像,双击打开下载好的镜像,点击 “高级设置”,做如下配置。
添加数据文件的存储路径:“卷”中添加“文件夹路径”docker/bitwarden/data(根据你建的文件夹的路径修改);“装载路径”/data/(不能修改)
添加证书文件的存储路径:“卷”中添加 “文件夹路径”docker/bitwarden/ssl(根据你建的文件夹的路径修改);“装载路径”/ssl/(不能修改)
3、修改 “端口设置”
本地端口 8080(你自己定义,只要不与群晖已使用的端口冲突即可);容器端口 80(不需要更改);类型 TCP(新版镜像有一个 3021 的容器端口不用管它或者可以删除掉,这个是 WebSocket 的默认端口)
4、启用 SSL
添加环境变量:ROCKET_TLS
值:{certs="/ssl/sslcert.pem",key="/ssl/sslkey.key"}
5、启动 Bitwarden 容器
浏览器输入 https://群晖的ip:8080(不启用 SSL 则为:http://群晖的ip:8080),应该就可以进入登录页面了。
6、设置外网访问 Bitwarden 服务端
有公网IP,路由器做端口转发;没有公网IP,做内网穿透
通过以上方法,SSL证书已填加,故不用通过反向代理的方式获取SSL
三、 其他环境参数设置
1、关闭注册
添加环境变量 SIGNUPS_ALLOWED=false
2、关闭邀请
添加环境变量 INVITATIONS_ALLOWED=false
3、开启 log 日志记录
添加环境变量 LOG_FILE=/data/bitwarden.log
4、开启管理页面
添加环境变量 ADMIN_TOKEN=XXXXXXXX
XXXXXXXX为你自定义的一串任意字符
开启管理页面后,访问地址:https://yourdomain.com:端口号/admin。可以登录管理页面查看已注册用户并删除他们、开启二次验证、使用 YubiKey 等更多高级功能。
进入管理页面后可修改登录后台的密码,密码写到配置文件/docker/bitwarden/data/config.json里
四、 备份
主数据库文件:data/db.sqlite3
在后台管理中,只提供了备份文件,但没提供如何恢复。
恢复方法:
只恢复数据:将data中db.sqlite3数据库文件覆盖,然后重新启动docker
恢复全部数据:将data中的所有文件全部覆盖。
五、 Bitwarden 的缺点
不能离线编辑
客户端不能自动同步
不能自动点击登录按钮
六、 参考文献
http://www.gebi1.com/thread-295581-1-1.html
https://penpenguanguan.com/10271.html
https://koolshare.cn/thread-153879-1-1.html
https://post.smzdm.com/p/aoo6qdmr/