使用群晖 Docker 搭建第三方 Bitwarden(bitwarden_rs)密码服务器

文章目录
[隐藏]

Bitwarden 是一个跨平台的密码管理软件,类似于 1Password、EnPass、LastPass 等。Bitwarden 是免费开源的,可以将服务端部署在自己的服务器上,比如群晖,并且支持 Docker 部署。但官方的镜像要求至少 2G 以上内存,要求比较高。有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。

Docker 知识(官方的命令参数对应群晖 Docker 容器中的设置):

  • -v:对应容器中的 “卷”
  • -p:对应容器中的 “端口”
  • -e:对应容器中的 “环境”

准备

  1. 群晖安装 Docker。直接在群晖的套件中心搜索安装
  2. 你得有一个域名,并且有证书。因为 Bitwarden 必须 https 登录,否则不能注册(注册时不能提交)和登录(提示 Cannot read property ‘importKey’)。证书可以在阿里云免费申请,申请好以后下载(下载时 “服务器类型” 选 “其他”),然后导入群晖中
  3. 群晖中新建 docker/bitwarden/data 和 docker/bitwarden/ssl 两个目录(这个你自己随意建)
  4. 将证书从群晖中导出,解压后两个证书文件放置于 docker/bitwarden/ssl 目录中,并将 cert.pem 的文件命名为 fullchain.pem(不改名可能导致安卓客户端不能连接服务器,见文末的故障解决

安装 Bitwarden 服务端

群晖 Docker-注册表中搜索mprasil/bitwarden,下载映像(目前新版为bitwardenrs/server

启动此映像,修改相应的容器设置如下:

  • 添加数据存储路径:“卷” 中添加 “文件夹路径”docker/bitwarden/data(根据你建的文件夹的路径修改);“装载路径”/data/(不能修改)
  • 添加证书路径:“卷” 中添加 “文件夹路径”docker/bitwarden/ssl(根据你建的文件夹的路径修改);“装载路径”/ssl/(不能修改)
  • “端口设置”:本地端口 8080(这个填写群晖未使用的一个端口);容器端口 80(此容器的端口);类型 TCP

一些配置

群晖中设置反向代理

“控制面板”-“Synology 应用程序门户”-“反向代理服务器”,新增一个反向代理服务器规则,如图:

说明:“来源端口” 填写远程访问端口;“目的地端口” 就是 mprasil-bitwarden 容器端口中你填写的本地端口。

设置外网访问 Bitwarden 服务器

我的宽带供应商没有提供公网 IP,但我有使用 frp 做内网穿透,见我另一篇文章搭建 frp 内网穿透以访问 NAS,所以想要外面访问 Bitwarden 服务端,还需要修改 frpc 客户端配置文件。

frpc.ini 中增加如下配置信息:

[Bitwarden_server]
type = tcp
local_ip = 127.0.0.1 # 我的 frpc 客户端搭建在 NAS 上,所以直接本机
local_port = 8080 # 映射到 NAS 上的端口(和群晖中设置的反向代理目的地端口对应)
remote_port = 8443 # 和群晖中设置的反向代理来源端口对应
custom_domains = mydomain.com # 自己的域名

搭建完成

浏览器中输入 https://mydomain.com:8443 应该就可以访问了

功能关闭及其他

更多功能查看 bitwarden_rs wiki

启用 HTTPS

添加环境变量 ROCKET_TLS,值 {certs="/ssl/fullchain.pem",key="/ssl/privkey.pem"}

关闭注册

添加环境变量 SIGNUPS_ALLOWED,值 false

关闭邀请

添加环境变量 INVITATIONS_ALLOWED,值 false

备份数据库

直接复制 docker/bitwarden/data 文件夹下的 db.sqlite3 文件即可

故障解决

Windows 客户端提示 Failed to fetch 错误

网页登录、Chrome 浏览器扩展、苹果和安卓 app 使用一切正常,但 Windows 版 Bitwarden 程序登录(以及创建帐号)时提示 Failed to fetch,试过删除账户、重新启动容器、容器操作中使用 “清除”、重装 app 等,都不能解决。

网上找到的只有一篇英文文章“Failed to fetch” errors on desktop app,然而并没有解决问题。

解决方法:查看群晖及容器都没有相关的日志记录,猜测是没有和服务端建立连接,最后测试发现和 Windows 系统代理设置有关。打开 “Windows 设置-网络和 Internet-代理”,关闭使用设置脚本即可。

安卓客户端提示 “发生错误 There is a problem connecting to the server” 错误

网页登录、Chrome 浏览器扩展、Windows 版 app、苹果 app 等使用一切正常,但安卓 app 登录提示此错误

解决方法:经过无数测试和搜索参考,最后将 docker/bitwarden/ssl 中的证书文件 cert.pem 命名为 fullchain.pem 后解决

具体参考 bitwarden_rs wikiEnabling HTTPS 中的这段文字:

Due to what is likely a certificate validation bug in Android, you need to make sure that your certificate includes the full chain of trust. In the case of certbot, this means using fullchain.pem instead of cert.pem.

Bitwarden 的缺点

  • 不能离线编辑
  • 不能自动登录,必须手动点击登录按钮。相比较,1Passwords 更为方便。

2019-06-12 更新:新版的映像为bitwardenrs/server,使用同样的配置方式,使用mprasil/bitwardeny 原有的数据无损切换。

其他

  • Bitwarden 的 “自动填充服务” 在三星 S8 中被自动禁用的解决:将 Bitwarden 加入 “自启动应用程序” 中即可

参考链接

已有 7 人 对 ”使用群晖 Docker 搭建第三方 Bitwarden(bitwarden_rs)密码服务器” 进行了评论

  1. 阿锐说道:

    请问一下自己在群辉上建的可以使用两步认证的功能吗

    [Reply]

    王小喜 Reply:

    应该是可以的,但我没有研究测试过,因为对我没啥用处

    [Reply]

  2. Stride说道:

    文章中的 docker 用错了,不应该使用 mprasil/bitwarden 应该使用 bitwardenrs/server

    [Reply]

    王小喜 Reply:

    感谢提供这个信息。我看到 Note: you should use bitwardenrs/server instead of this image as that is the new official image.
    这个应该是新版的 Docker 吧,我来试试。

    [Reply]

  3. 小贝说道:

    发现个小问题 :服务器使用的是 80 端口,苹果手机客户端连击不上,提示: there is problem connecting to the server.
    网页 、 mac 客户端、安卓客户端 都好使。唯独苹果手机不行!

    [Reply]

    test Reply:

    可能是 IOS 禁止不安全网络连接吧,部署 https 试一下

    [Reply]

    王小喜 Reply:

    既然其他客户端可以,就某一设备上的不行,多半就是此设备上系统代理的问题。和我 Windows 客户端遇到的 Failed to fetch 故障应该是一个道理。

    所以,看看你的 iOS 是不是被其他代理程序接管了,或者看一下网络里面的 “配置代理”,正常应该是关闭状态

    [Reply]

对本文发表评论





5 + 7 = ?

注意:
1、请勿单纯发表顶啊、打酱油之类无任何意义的评论,否则将被视为spam!谢谢合作!
2、但欢迎你留下对本文的看法或技术上的任何疑问,我会及时回复你。