以前一直使用多年lastpass作为我的密码管理器,使用上来总体说还不错,但是也还有些小问题,半年多前看到bitwarden,不仅可以使用他们提供的服务也可以自己搭建自己的密码管理器服务,但是本文教程是bitwarden_rs是Rust语言重写的比官网的更加轻量级而且更适合个人自己搭建,代码都是开源的安全性上也算可靠。经过半年的试用bitwarden_rs表现还是不错的,将该应用推荐给大家。
bitwarden_rs使用Docker进行安装,首先我们安装Docker,已经安装的可以跳过此部分

1、安装Docker

wget -qO- https://get.docker.com/ | bash

再安装docker-compose,管理起来更方便些

curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

国内安装docker-composer的话使用下面命令下载会更快些:

curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

修改为国内源:

cat >/etc/docker/daemon.json<<EOF
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com"
]
}
EOF

启动docker并设置为开机启动:

systemctl start docker
systemctl enable docker

2、部署bitwarden_rs

2.1 创建bitwarden_rs的运行目录,这里我们将在当前用户目录下运行:

cd ~ && mkdir bitwarden && cd bitwarden

如果是root用户登陆的,目录就是 /root/bitwarden,bitwarden_rs的相关文件就会在该目录下面。
2.2 创建docker-compose配置文件

cat > ~/bitwarden/docker-compose.yml<<EOF
version: "3"

services:
  bitwarden:
    image: bitwardenrs/server
    container_name: bitwardenrs
    restart: always
    ports:
        - "127.0.0.1:8087:80" #将宿主机8087端口映射到docker的80端口
        - "127.0.0.1:3012:3012"
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: "true" #是否开启WebSocket
      SIGNUPS_ALLOWED: "true"   #是否开启注册,自用的话自己搭建好注册后改成false
      WEB_VAULT_ENABLED: "true" #是否开启Web客户端
      #ADMIN_TOKEN: ""   #后台登陆密码,建议openssl rand -base64 48 生成ADMIN_TOKEN确保安全,当前是没启用,如需启用去掉ADMIN_TOKEN前面的 # ,并生成安全密码
EOF

2.3 启动bitwarden_rs服务

cd ~/bitwarden
docker-compose up -d

运行后会自动拉去镜像和设置bitwarden_rs,根据网络等因素拉取镜像会比较耗时,等一会儿,如果没有错误就会看到提示信息:Starting bitwardenrs ... done 就表示已经运行起来。
服务命令

docker-compose down #关闭服务
docker-compose restart #重启服务

3、Web管理平台服务器设置
虽然bitwarden_rs已经运行起来,但是bitwarden_rs是必须要通过https访问,否则进行无法注册、登陆等一系列的操作。接下来以LNM一键安装包环境为例创建虚拟主机并添加反向代理配置:
运行:
用acme.sh申请ssl域名证书或者用lnmp也可以自动申请,总之,ssl证书是必须的,酌情处理
nginx配置中加入如下项:

location / {
    proxy_pass http://127.0.0.1:8087;
    proxy_http_version    1.1;
    proxy_cache_bypass    $http_upgrade;
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host       $host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Port   $server_port;
}

location /notifications/hub {
    proxy_pass http://127.0.0.1:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

location /notifications/hub/negotiate {
    proxy_pass http://127.0.0.1:8087;
}

location /admin {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:8087;
}
proxy_pass http://127.0.0.1:8087对应docker-compose.yml中的- "127.0.0.1:8087:80" #将宿主机8087端口映射到docker的80端口

添加完成后,删掉下面这几行:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
}

location ~ .*\.(js|css)?$
{
    expires      12h;
}

保存,重启nginx,访问配置ssl证书的域名看到如下页面即表示成功!
图1