bitwarden是一个免费且可以自建服务器的多客户端同步的密码管理器
客户端在官网下载: https://bitwarden.com/download/

使用docker-compose来安装bitwarden

Preparation

  • 一个域名, 假设这里是 bitwarden.example.com
  • 一台至少512mb内存的服务器,我这里用的是aws的lightsail最低配
  • 我这里安装的是debian 11系统

Install Guide

  1. 网页版bitwarden需要https,准备 bitwarden.example.com 的ssl证书
  2. 在服务器上安装docker和docker-compose,过程如下
curl -fsSL https://get.docker.com | bash -s docker
systemctl enable docker
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker --version
docker-compose --version

安装完显示出版本号即安装成功

  1. 创建docker-compose.yml文件,修改其中的部分内容
version: "3"
services:
  web:
    container_name: nginx
    image: nginx:1.16.1
    ports:
      - 443:443         
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d
      - ./certs/:/root/certs/
    restart: always
    networks:
      - mynetwork
  bitwarden:
    image: bitwardenrs/server
    container_name: bitwarden
    restart: always
    ports:
      - "8080:80"
      - "3012:3012"
    volumes:
      - ./bitwarden/data:/data
    environment:
      WEBSOCKET_ENABLED: "true"
      SIGNUPS_ALLOWED: "true"
      WEB_VAULT_ENABLED: "true"
      ADMIN_TOKEN: "修改为你自己的随机的token值"
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge
  1. 启动容器
docker-compose up

启动成功后,按ctrl+c取消运行
在当前目录下会生成certs,nginx,bitwarden文件夹

将 bitwarden.example.com 的证书和密钥文件
复制到certs文件夹中并重新命名为server.crt和server.key文件

在nginx/conf.d/目录下新建 bitwarden.example.com.conf 文件,内容如下,修改其中的bitwarden.example.com为你的域名

server
{
    listen 443 ssl http2;
    server_name bitwarden.example.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/server/stop;
    
    ssl_certificate    /root/certs/server.crt;
    ssl_certificate_key    /root/certs/server.key;
    
    location / {
        proxy_pass http://bitwarden.example.com:8080;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    location /notifications/hub/negotiate {
        proxy_pass http://bitwarden.example.com:8080;
    }
    
    location /notifications/hub {
        proxy_pass http://bitwarden.example.com:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://bitwarden.example.com:8080;
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        proxy_pass http://bitwarden.example.com:8080;
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
}
  1. 启动容器, -d参数是后台运行
docker-compose up -d
  1. 稍等一会没有问题的话就可以访问 https://bitwarden.example.com
  2. 在网页里注册一个账户,并且登录
    都没有问题的话,去shell修改docker-compose.yml
    SIGNUPS_ALLOWED: "true"修改为false,禁止其他人注册
  3. 重启容器
docker-compose down
docker-compose up -d
  1. 打开客户端配置一下自建的地址,设置为 https://bitwarden.example.com 即可使用刚才注册的账户登录了
  2. 愉快的使用密码同步吧~