之前使用了两年的 1Password,但是想想花一年百度盘会员的钱只是为了记个密码,简直没有任何性价比可言。而且,1Password 默认将数据保存在它们自己的服务器上,不支持通过 WebDAV 等进行自定义存储位置,这样不够令人放心。
放弃 1Password 后,用了几个月的 Enpass,但是有一个很烦人的小 bug 一直没有得到解决(macOS 下的 mini 窗口不能输入中文),而且界面没有适配 macOS 11 Big Sur。几经周转,最后发现 Bitwarden ,于是我决定试用一段时间。
文章结尾我总结了使用过的几款密码管理软件,不专业也不正式,只是以我个人的喜好进行下对比。
本文介绍使用 docker 配置 bitwarden_rs,没有使用官方的 Bitwarden 是因为官方版本只支持 SQL Server 数据库,对性能要求比较高,而且也不方便在 Linux 平台上部署。
已有环境:
- CentOS 7
- 宝塔面板 7.6
- nginx 1.18
搭建 docker 环境
为了确保安装最新版本,我们从 Docker 官方存储库安装。
安装 docker
首先卸载 docker,此举是避免万一系统中有其他版本的 docker 而引发的兼容性问题。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
接下来添加 Docker 的官方源,首先需要安装 yum-utils
这个工具:
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装 docker:
$ sudo yum install docker-ce docker-ce-cli containerd.io
启动 docker:
$ sudo systemctl start docker
至此 docker 安装完成,检查一下是不是安装成功了:
$ sudo systemctl status docker
如果安装成功的话,会显示类似下图的结果:
安装 docker-compose
这部分安装很简单,两条命令就可以搞定:
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
截止 2021-02-17,docker-compose 的最新版本为 1.28.2,如果你看这篇文章时已经过去了很久,可以查看最新版本的安装方法:Install Docker Compose
安装 bitwarden_rs
实际上 bitwarden_rs 不需要复杂的安装过程,只要 pull 一个 docker 镜像下来并运行就可以了,在此之前我们先准备好 bitwarden_rs 的配置文件。
准备配置文件
假设我们在 Home 目录中存放数据,新建一个目录:
$ cd ~ && mkdir bitwarden && cd bitwarden
$ pwd
# 应当输出 /home/username/bitwarden
# 如果以 root 用户执行命令,则应输出 /root/bitwarden
准备一个配置文件,该文件设置 bitwarden_rs 的一些参数:
cat >> config.env << EOF
SIGNUPS_ALLOWED=true
DOMAIN=https://pass.example.com
DATABASE_URL=/data/bitwarden.db
ROCKET_WORKERS=2
WEB_VAULT_ENABLED=true
EOF
# https://pass.example.com 这个改成你自己的域名
说明:
SIGNUPS_ALLOWED
是否开放用户注册。我们还没有注册第一个用户,所以先打开它;DOMAIN
填入你准备分配给 Bitwarden 服务使用的域名;DATABASE_URL
数据库在容器内的路径。可以不设置,默认位于/data/db.sqlite3
;ROCKET_WORKERS
设置服务器使用几个线程。10 是默认值,可以根据机器性能和个人需求适当调整;WEB_VAULT_ENABLED
设置是否开启网页访问。如果开启,可以通过网页来管理密码。因为第一次注册用户需要在网页进行,所以也先打开它。
准备 docker-sompose.yml:
cat >> docker-compose.yml <<EOF
version: '3'
services:
bitwarden:
image: bitwardenrs/server:latest
container_name: bitwarden
restart: always
volumes:
- ./data:/data
env_file:
- config.env
ports:
- "6666:80"
EOF
说明:
volumes
将容器内的/data
目录挂载到宿主机的当前目录下的data
目录,这样你可以在宿主机上操作数据库文件(例如备份等);ports
将容器内的 80 端口映射到了宿主机的 6666 端口。
运行 bitwarden_rs
在宝塔中新建一个静态站点,域名添写你准备好的域名,不需要数据库、ftp 等:
配置好 SSL,可以开启“强制HTTPS”:
添加反向代理:
最后启动服务:
$ docker-compose up -d
用户注册和数据导入
启动服务后,访问 https://pass.example.com (替换成你自己的域名),应该可以看到以下界面:
点击“创建账号”进入注册页面:
注册完成后直接登陆,在左侧“工具”菜单中可以进行“导入数据”,支持各种密码管理软件的导出文件。
关闭用户注册,网页访问
关闭网页访问和用户注册功能,在前面生成的 config.env 文件中,调整以下两个参数:
SIGNUPS_ALLOWED=false
WEB_VAULT_ENABLED=false
重启服务使新的配置文件生效:
$ docker-compose down && docker-compose up -d
附:几款密码管理软件的对比
首先我日常使用的设置是一台 Macbook 和一台 Android 手机,所以要求有比较好用的 mac 版、Android 版客户端。
名称 | 加分项 | 减分项 |
---|---|---|
1Password | 外观好看 功能多、模板全 | 贵 不支持纯本地存储或 WebDAV |
Enpass | 桌面客户端免费 | mac 版本没有适配 Big Sur 开发迟缓,解决 bug 慢 |
MacPass | 免费、开源 外观好看 支持插件 | 没有商业支持 比较折腾人 |