使用Docker自建bitwarden_rs密码管理

2020年3月25日 6550点热度 11人点赞 0条评论

密码管理软件最早用过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

 

信仰飘扬

行尽天涯 静默山水间