bitwarden的密码默认是储存在官方有服务器上,当然是加密存储的。官方为了方便用户,也提供docker方式在自己的服务器安装该密码管理服务。安装官方的镜像对服务器的要求高,由于官方使用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。
不过在github上有vaultwarden(为了便于与官方区别,bitwarden_rs已更名为vaultwarden),这个是用rust写的docker镜像,对服务器要求较低,小内存照样能用。具体详见:https://github.com/dani-garcia/vaultwarden/。
准备
一台vps
一个能正常访问网络的环境
一个已经申请ssl证书的域名
开始
安装docker
请自行查询安装,教程到处都是
安装vaultwarden
首先拉取docker镜像
docker pull vaultwarden/server:latest
进行默认安装(我这里映射到了6589端口,可根据你的需求自行改变)
docker run -d --name vaultwarden -v /bw-data/:/data/ -p 6589:80 vaultwarden/server:latest
配置nginx反代
如果你在使用宝塔面板,像我这样进行配置即可(替换为上文提到的你自己的端口)
如果没有,请参看官方配置文件:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples
使用
登入后设置你的电子邮箱(随意,只要格式是 xxx@xxx.xxx即可)和主密码(重要!建议纸笔记下来)
使用相应客户端/chrome插件填写你的域名,管理员密码等信息即可
进一步设置
在工具一栏中可以选择导入导出密码库
依照引导为你的vaultwarden添加安全密钥验证(我这里使用的yubikey)
首先申请你的yubikey api并妥善保管 :https://upgrade.yubico.com/getapikey/
停止运行你的vaultwarden docker并且添加如下环境变量后启动
停止运行:
docker stop vaultwarden
添加环境变量运行(逐条输入“>”后内容)
docker run -d --name bitwarden \
> -e YUBICO_CLIENT_ID=***** \
> -e YUBICO_SECRET_KEY=********************** \
> -e SIGNUPS_ALLOWED=false \
> -v /bw-data/:/data/ \
> -p 6589:80 \
> vaultwarden/server:latest
重新登陆并且按照引导设置yubikey即可
一些其他设置
本部分本人没有实践,搬运自相关文章和wiki,如果你没有需求,请不要乱动了
当然vaultwarden也是可以自定义安装,这个自定义是指相关的docker配置,下面简单介绍一下。
1、自行选择安装目录,如安装到/home/vaultwarden:
cd /data && mkdir vaultwarden && cd vaultwarden
2、准备一个配置文件config.env,里面包含了需要配置的环境变量:
cat >> config.env <<EOF
写入基本的环境配置(其它配置可在在安装好后进后台进行设置):
# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=true
# 设置web访问域名
DOMAIN=https://vault.yourdomain.com
# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db
# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true
# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX
# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=false
# 设置日志路径
LOG_FILE=data/access.log
# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true
EOF
DOMAIN填自己的域名,需要HTTPS。
这个环境配置文件不包含smtp发送邮件等配置,如果需要邮件功能,需要增加smtp的设置,可一并写入环境配置文件,相关设置说明如下(不一定非要写入环境文件,也可以按上面的基本配置安装完成后,进入后台界面进行设置):
# 启用或禁用新用户注册: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
# 自v1.25.0起,不再设置SMTP_SSL和SMTP_EXPLICIT_TLS,使用SMTP_SECURITY替代,它有以下选项:starttls、force_tls和off。
# 465端口使用force_tls,587端口使用starttls,25端口使用off。
SMTP_SECURITY=force_tls
# 启用或禁用邀请: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:
cat >> docker-compose.yml <<EOF
写入:
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、拉取镜像:
docker-compose up -d
4、nginx配置反代(其它web方式请参阅:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples):
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文件:
vi /etc/rc.d/rc.local
在最后加上
/usr/local/bin/docker-compose -f /usr/local/vaultwarden/docker-compose.yml up -d
这样开机就会自动启动vaultwarden。
访问 https://你的域名/admin 可以进管理面板。
到这里vaultwarden就搭建完成可以使用了,不过个人还是建议配置数据备份。
6、如果修改了配置,需要重新启动容器以便生效:
docker-compose stop && docker-compose up -d
用这个命令,停止当前容器服务并重新启动。
docker-compose down && docker-compose up -d
这个命令是移除容器和镜像并重建。