密码管理软件最早用过LastPass,之后又用Enpass,但在移动端都是收费的。最近了解到开源密码管理器bitwarden_rs,bitwarden_rs项目延伸自Bitwarden,bitwarden_rs使用Rust实现了Bitwarden相似的功能,不过Bitwarden需要较多的依赖(如MSSQL),占用内存也比较大,如果是个人或家庭使用,推荐更加轻量的bitwarden_rs,并且bitwarden_rs可以免费使用Bitwarden官方服务器中需要付费订阅的一些功能。
一、安装Docker
作者提供了Docker安装方式,因此我们需要先安装Docker,以Centos 7 系统为例安装Docker方法如下:
#安装Docker yum -y install docker #启动docker systemctl start docker #开机自启 systemctl enable docker
二、快速部署 bitwarden_rs
使用Docker拉取bitwarden_rs镜像并运行
docker pull vaultwarden/server:latest docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest
上方使用了80端口,如果您已经安装了WEB服务,可能会导致冲突,可以将bitwarden_rs映射的端口修改为其它,比如8880
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 8880:80 vaultwarden/server:latest
三、反向代理和 HTTPS、启动服务
因为将 bitwarden_rs 服务的 80 端口映射到了宿主机的 8880 端口,你可以在宿主机上使用 nginx 或其他反向代理,为你的域名配置对应的代理规则,使得访问域名时,流量可以经由 bitwarden_rs 服务来处理。下方是我的nginx反向代理配置,内容仅供参考,请根据实际情况修改:
server { listen 80; server_name youdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name youdomain.com; ssl_certificate /usr/local/nginx/conf/ssl/youdomain.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/youdomain.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 60m; location / { proxy_pass http://127.0.0.1:8880; proxy_set_header Host $host:80; proxy_ssl_server_name on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_hide_header X-Powered-By; } }
如果不出意外,访问您的域名https://youdomain.com 就能看到Bitwarden界面。
四、升级 bitwarden_rs 镜像
先学习一下Docker常用命令
# $name 为 docker run 中定义的 name # 启动容器 docker start $name # 停止容器 docker stop $name # 删除容器 docker rm $name # 查看运行容器 docker ps -as #删除某个镜像 docker rm <image id>
那么升级 bitwarden_rs 镜像步骤就如下:
# 重新拉取镜像 docker pull bitwardenrs/server:latest # 停止、删除原容器 docker stop bitwarden docker rm bitwarden # 重新运行 docker run 命令 docker run -d --name bitwarden -v /bw-data/:/data/ -p 8880:80 vaultwarden/server:latest # 查看镜像文件 docker image ls # 删除原镜像文件, $ID 在 step4 中可以看到 docker image rm $ID
五、自定义部署bitwarden_rs
自定义一些参数,如关闭注册...
# 拉取 bitwarden_rs 镜像 docker pull vaultwarden/server:latest # 生成一个 admin 用户管理页面的 token openssl rand -base64 48 # 生成 ssl 证书,以启用 https,推荐使用 acme.sh 免费申请及自动续签 # 运行 bitwarden_rs 容器 docker run -d --name vaultwarden \ -e SIGNUPS_ALLOWED=false \ -e INVITATIONS_ALLOWED=false \ -e ADMIN_TOKEN=step2_generated_token \ -e ROCKET_TLS='{certs="/data/youdomain.crt",key="/data/youdomain.key"}' \ -e DOMAIN=https://youdomain.com/ \ -e LOG_FILE=/path/to/log \ -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \ -e DATA_FOLDER=/path/to/data/folder \ -p 443:80 \ -v /path/to/host/ssl/:/path/to/docker/ssl/ -v /path/to/host/data/folder:/path/to/docker/data/folder \ vaultwarden/server:latest
参数解释:
SIGNUP_ALLOWED:是否允许注册
INVITATIONS_ALLOWED:是否允许组织邀请注册
ADMIN_TOKEN:用户管理界面 (/admin),可用于删除用户及邀请用户注册
ROCKET_TLS:ssl 证书信息,同时需要配置 -v /path/to/host/ssl/:/path/to/docker/ssl/ 卷,前者为宿主机 ssl 证书的位置,后者为容器证书位置
DOMAIN:域名
LOG_FILE、LOG_LEVEL、EXTENDED_LOGGING:日志保存文件路径以及日志等级定义
DATA_FOLDER:docker 容器数据保存文件夹(默认为 /data),除了定义这个文件夹之外,还可以定义附件、图标缓存、数据库等参数
DATABASE_URL:数据库路径
ATTACHMENT_FOLDER:附件路径
ICON_CACHE_FOLDER:图标缓存路径
如果是个人使用,注册完以后就可以关闭注册,并设置开机启动步骤就如下:
# 停止、删除原容器 docker stop vaultwarden docker rm vaultwarden # 重新运行 docker run 命令 docker run -d --name vaultwarden \ -e SIGNUPS_ALLOWED=false \ -v /vw-data/:/data/ \ -p 8880:80 \ --restart=always \ vaultwarden/server:latest