用 Docker 自建 Vaultwarden (Bitwarden_rs)

本文由 简悦 SimpRead 转码, 原文地址 cloud.tencent.com

Bitwarden 是一个免费、自由且开源的的密码管理器,服务端也完全开源,可以自己搭建。 本文将咱自建 bitwarden 的过程记录下来。

Bitwarden 是一个免费、自由且开源的的密码管理器,服务端也完全开源,可以自己搭建。 本文将咱自建 bitwarden 的过程记录下来。

更新 Updates


2021-09-30 :了解更多 nginx 之后重新写了一遍 config,而 Bitwarden_RS 已经改名成 Vaultwarden 了

2021-11-03 :增加了使用 CDN 访问时获取访客真实 ip 的方法

前言

那个男孩不想拥有自己的密码管理器呢,之前欧式都是 Google 密码和 iCloud keychain 一起用的,混合使用不仅难于跨平台同步(非 chrome/apple 设备的密码更是无法填充),而且数据也无法自己掌控。上了大学之后,我了解到了全平台开源密码管理器 bitwarden。经过了将近半年的折腾,终于做得好用点了,现在记录一下。

准备的东西


一个服务器,至少 200MB RAM

一个域名,这里就用了自己在使用的 (以 bitwarden.example.com 为例)

还有亿点点耐心和学习搭建密码管理器的兴趣

下载 docker 镜像


这里我使用的是 vaultwarden(前称 Bitwarden_RS),虽然它是第三方用 Rust 重写的,但是需要的资源更少,而且默认开启高级会员的功能 谁不想白嫖呢

1
docker pull vaultwarden/server

打开你的域名 dns 管理界面,添加 bitwarden 的 dns 记录。

配置反代


情况 1:bitwarden 单独放在一个服务器上

直接跳到初始化配置, 然后将设置改为 -p 80:80 -p 3012:3012

情况 2:bitwarden 与多个对外服务共存

配置 Nginx 反代, 根据具体情况修改 修改 / etc/nginx/nginx.conf,添加如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# http
    server {
        listen       80;
        listen  [::]:80;
        server_name  bitwarden.example.com;
       ##防止搜索引擎收录
       if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|^$") {  
        return 404;
            }
        location / { # 访问80端口后的所有路径都转发到 proxy_pass 配置的ip中
            root   /usr/share/nginx/html;
            index  index.html index.htm;

##如果使用cf加速就换成302
         return 301 https://bitwarden.example.com;
          
        }
    }


# https
 server {
        listen       443 ssl http2;
        listen  [::]:443 ssl http2;
        server_name  bitwarden.example.com;
           if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|^$") {  
        return 404;
        }
        #启用HSTS  
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 

        ssl_certificate /path/to/ssl/cert;

        ssl_certificate_key /path/to/cert/key;

        keepalive_timeout   70;

        # OCSP stapling
        ssl_stapling        on;

        ssl_stapling_verify on;
##填入你机器的DNS
        resolver 8.8.8.8;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

             location / {
             root   /usr/share/nginx/html;
#            index  index.html index.htm;



               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-Port $server_port;

               proxy_pass http://localhost:xxxx;
            
      }
  }

保存并退出,重启 nginx:

配置 vaultwarden


初始化运行

在命令行根据实际情况(需求)执行

1
docker run -d --name=bitwarden_rs -e WEBSOCKET_ENABLED=true -e LOG_FILE=/data/bitwarden.log -p xxxx:80 -p XXXX:3012 -v /data-directory-you-want/:/data/ --restart=always  vaultwarden/server:latest

注:

  1. –name = 你想要在 docker 里面显示的名字 (可选,方便后续管理)
  2. 80 和 3012 的设置端口不能冲突此乃废话
  3. –restart=always 自动重启
  4. -v /data-directory-you-want/:/data/ 注意这是从根目录开始的, 废废欧式就是没主意到导致现在整个文件夹都在根目录还找了 1 个星期都没有找到 注意权限

登录网页并设置初始账户

直接打开 bitwarden.example.com ,就出现如下图所示界面(当然这是支持中文的)

https://ask.qcloudimg.com/http-save/yehe-1201223/6e1935a39a1e0413437b5c724bb2fc29.png

直接按着引导走就是了。

高级设定


开启管理界面

添加环境变量 - e ADMIN_TOKEN=XXXX(XXXX 为管理界面密码)

打开 bitwarden.example.com/admin,用你设置好的 token 登入

登入后在 general settings 那里把 domain url 改成你的域名 https://bitwarden.example.com (注意要加 https://)

allow new signups 就是新用户注册许可的开关啦(

https://ask.qcloudimg.com/http-save/yehe-1201223/c32b8a34ca7351165eca956fc1b7ddaa.png

添加 SMTP 服务

配置 SMTP 服务可以开启 bitwarden 的邮件传送功能,能开启二步验证 (2FA),能发送邀请,还能给自己邮箱发送 password hint(管理密码提示) 防止自己脑残忘掉 master password

这里咱用的是 yandex 的 self-host email,配置教程可以看 newslearner 的教程(有些内容有可能过时)或者 yandex 自己的教程 (EN)

  1. 创建新的成员账户,即需要用的收发信账户。
  2. 登入并完成注册。
  3. 打开 yandex mail 登入,打开设置

https://ask.qcloudimg.com/http-save/yehe-1201223/87b8a4892e751412fcfee4454f2af9e1.png

  1. 选 other,然后左边选 email client,开启第三方客户端访问权限

https://ask.qcloudimg.com/http-save/yehe-1201223/eb1d0b3eb6b9f11353622dd91cd9e233.png

  1. 到 security 那里,生成 app password 并复制。
  2. 回到管理界面,在 smtp Email settings 那里如图填 (或者叫 Starttls on, port 587),password 就填入刚才生成的 app password。

https://ask.qcloudimg.com/http-save/yehe-1201223/c315015046e44b6ad25a56c962d7a9bf.png

  1. 保存,并到下方的 send test email 测试
  2. 如果看到这个 banner 出来并收到如下测试邮件的话,Yattase!配置成功了 w!

https://ask.qcloudimg.com/http-save/yehe-1201223/7c6d0da12fb610070d282bbe0edda991.png

  1. Enjoy~

使用 CDN 时让实例获取访客真实 ip

一般来讲我们都会使用 CDN 来提高服务可用性。但是默认设置中 Vaultwarden 读取 X-Real-IP 的 header,这样会读到的全是 CDN 的节点 IP。

要做到获取访客真实 IP,可以直接在 Admin Panel 中找到 Read Client Header,改成 X-Forwarded-For 保存即可。

Links:


Bitwarden 官网:https://bitwarden.com/ Vaultwarden Github 页面(有任何问题记住要往这边反映):https://github.com/dani-garcia/vaultwarden Vaultwarden Docker 页面: https://hub.docker.com/r/vaultwarden/server

本文由欧式 fifty(ous50 原创,采用 Attribution-NonCommercial-ShareAlike 4.0 International 授权

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. 转载请附上原文地址 https://blog.ous50.moe/2021/03/12/vaultwarden%E6%90%AD%E5%BB%BA/

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.idc.moe/archives/bitwarden-rs.html