自建bitwardenvaultwarden的密码服务

对于经常上网的我们,账号密码相当多,使用同一个密码很容易被脱裤,使用不同的密码却又难记。其实有很多密码管理软件可以使用,比如bitwarden。

bitwarden的密码默认是储存在官方有服务器上,当然是加密存储的。官方为了方便用户,也提供docker方式在自己的服务器安装该密码管理服务。要想自己安装使用bitwarden,需要先安装docker,这个可以参考《centos7下安装docker》一文。安装官方的镜像对服务器的要求高,由于官方使用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。

不过在github上有vaultwarden(为了便于与官方区别,bitwarden_rs已更名为vaultwarden),这个是用rust写的docker镜像,对服务器要求较低,小内存照样能用。具体详见:https://github.com/dani-garcia/vaultwarden/。

按照提示,两行命令即可拉取docker镜像,进行默认安装:

1
2
docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /bw-data/:/data/ -p 6666:80 vaultwarden/server:latest

为了可以通过宿主机上通过端口映射反代,需要配置相应的nginx,具体可以参考:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples。

按上面链接配置好web配置文件后(如nginx),就可以用配置好域名进行访问管理了。

当然vaultwarden也是可以自定义安装,这个自定义是指相关的docker配置,下面简单介绍一下。

1、自行选择安装目录,如安装到/home/vaultwarden:

1
cd /data && mkdir vaultwarden && cd vaultwarden

2、准备一个配置文件config.env,里面包含了需要配置的环境变量:

1
cat >> config.env <<EOF

写入:

1
2
3
4
5
6
7
8
SIGNUPS_ALLOWED=true
DOMAIN=https://vault.yourdomain.com
DATABASE_URL=data/vaultwarden.db
ROCKET_WORKERS=10
WEB_VAULT_ENABLED=true
ADMIN_TOKEN=XXXXXXXXXXXX
WEBSOCKET_ENABLED=true
EOF

DOMAIN填自己的域名,需要HTTPS。

这个环境配置文件不包含smtp发送邮件的配置,如果需要邮件功能,需要增加smtp的设置,完整配置及相关说明如下:

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
# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=false

# 设置web访问域名
DOMAIN=https://vault.yourdomain.com

# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db

# 设置日志路径
LOG_FILE=data/access.log

# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true

# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX

# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=true

# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true

# 修改线程,默认为10,若用户多可修改为更大,一般默认不需要设置
ROCKET_WORKERS=20

# 显示密码提示:true启用,false禁用
SHOW_PASSWORD_HINT=false

# 设置SMTP
SMTP_HOST=smtp.test.com
SMTP_FROM=test@test.com
SMTP_PORT=465
SMTP_USERNAME=test@test.com
SMTP_PASSWORD=password
SMTP_SSL=true
SMTP_EXPLICIT_TLS=true

# 启用或禁用邀请:true启用,false禁用
INVITATIONS_ALLOWED=false

# 启用或禁用分享发送功能,默认开启,启用true,禁用false
SENDS_ALLOWED=false

EOF

当然也可以在安装好后,进管理后台的界面设置smtp参数,不过要记得将Use explicit TLS(vaultwarden中的Force TLS选项)打上勾,然后保存即可,否则可能发送邮件会出错。

ADMIN_TOKEN为管理面板密码,推荐使用“openssl rand -base64 48”生成,当然也可以随意。

SIGNUPS_ALLOWED=true,此项控制注册,第一次使用的话设置为true,若是备份有数据库,可设置为false,安装好后将DATABASE_URL指定路径中的数据库替换为备份的db重启docker即可。

上述详细的环境变量说明请参阅:https://github.com/dani-garcia/vaultwarden/wiki。

3、准备服务描述文件docker-compose.yml:

1
cat >> docker-compose.yml <<EOF

写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
volumes:
- /docker/data:/data
env_file:
- config.env
ports:
- "6666:80"
- "8888:3012"
EOF

vaultwarden:现在是唯一一个服务;

image: vaultwarden/server:latest 指定使用 Docker Hub 的 vaultwarden/server:latest 最新镜像;

volumes 中指定将容器内的 /data 目录挂载到宿主机的当前目录下的 /docker/data 目录,这样你可以在宿主机上执行数据库的备份操作;

ports 指定分别将容器内的 80和3012 端口映射到了宿主机的 6666和8888 端口;

3、拉取镜像:

1
docker-compose up -d

4、nginx配置反代(其它web方式请参阅:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples):

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
server {
listen 443 ssl http2;
server_name vault.yourdomain.com;

# Specify SSL config if using a shared one.
#include conf.d/ssl/ssl.conf;

# Allow large attachments
client_max_body_size 128M;

location / {
proxy_pass http://<SERVER>:6666;
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;
}

location /notifications/hub {
proxy_pass http://<SERVER>:8888;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /notifications/hub/negotiate {
proxy_pass http://<SERVER>:6666;
}

# Optionally add extra authentication besides the AUTH_TOKEN
# If you don't want this, leave this part out
location /admin {
# See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
auth_basic "Private";
auth_basic_user_file /path/to/htpasswd_file;

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://<SERVER>:6666;
}

}

5、设置开机启动:

编辑rc.local文件:

1
vi /etc/rc.d/rc.local

在最后加上

1
/usr/local/bin/docker-compose -f /usr/local/vaultwarden/docker-compose.yml up -d

这样开机就会自动启动vaultwarden。

访问https://你的域名/admin可以进管理面板。

到这里vaultwarden就搭建完成可以使用了,不过个人还是建议配置数据备份。

6、如果修改了配置,需要重新启动容器以便生效:

1
docker-compose stop && docker-compose up -d

用这个命令,停止当前容器服务并重新启动。

1
docker-compose down && docker-compose up -d

这个命令是移除容器和镜像并重建。