Bitwarden是一款免费且开源的支付卡、密码、秘钥及关键文本存储方案,其最大的亮点就是这全平台支持,提供有浏览器、移动、桌面应用程序支持,可以一键填入密码。

老彭我使用了一段时间bitwarden官方的服务,总体感觉良好,但是近期联通和移动网络非常不稳定,经常无法登录bitwarden官方服务器,今天就来分享一下自建bitwarden服务器的操作步骤。
运行环境准备
Bitwarden官方推荐使用Docker镜像安装,而官方使用.net构建,docker镜像体积有点大,这里推荐使用第三方构建的Vaultwarden,支持使用SQlite3、MySQL、PostgreSQL进行数据存储(默认使用SQlite3)。
准备vps服务器
默认会用SQlite3作为数据库,对服务器没有什么特殊要求,一般的1核512Mb内存就足够使用了,老彭我使用的是阿里云的1核2GB内存1MB宽带的配置。
准备一个域名
bitwarden推荐所有请求都是安全的https访问,当然可以使用子域名进行访问。
安装nginx反代服务
bitwarden需要使用nginx作为前端反代,当然你也可以使用其他反代服务器。推荐使用lnmp或者oneinstack等一键环境部署。
Bitwarden安装
安装docker环境
官方一键docker-ce和docker compose环境安装脚本:
#通用网络环境安装脚本
curl -fsSL https://get.docker.com | bash -s docker
#国内网络安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#验证安装是否正确,输出有Pull complete字符表示安装正确
docker run hello-world
#启动docker服务并设置开机启动
systemctl start docker
sustemctl enable docker
#拉取镜像
docker pull vaultwarden/web-vault:v2022.05.0
反向代理服务配置
直接在nginx中加入下面内容即可:
location / {
proxy_set_header Host 'pwd.ixmu.net';
proxy_pass http://127.0.0.1:8980;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
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:8980;
}
Bitwarden服务运行
第一次运行bitwarden
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=true \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/data/bitwarden.log \
-p 8980:80 \
-p 3012:3012 \
-v /bw-data/:/data/ \
vaultwarden/web-vault:latest
使用以下命令可以停止和重启Bitwarden运行:
docker stop bitwarden
docker start bitwarden
Bitwarden禁止注册
为了保证bitwarden服务器的稳定,你可以在自己注册完成后禁用注册功能。
docker stop bitwarden
docker rm bitwarden
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=false \
-e WEBSOCKET_ENABLED=true \
-e LOG_FILE=/data/bitwarden.log \
-p 8980:80 \
-p 3012:3012 \
-v /bw-data/:/data/ \
vaultwarden/web-vault:latest
Bitwarden发送邮件
某些情况下需要配置smtp发送邮件功能,例如多用户或邀请注册的情况下,可以通过如下命令配置smtp服务器信息。
docker run -d --name bitwarden \
-e SMTP_HOST=<smtp.domain.tld> \
-e SMTP_FROM=<[email protected]> \
-e SMTP_PORT=587 \
-e SMTP_SSL=true \
-e SMTP_USERNAME=<username> \
-e SMTP_PASSWORD=<password> \
-v /bw-data/:/data/ \
-p 8980:80 \
vaultwarden/web-vault:latest
Bitwarden开启管理员权限
bitwarden可以开启管理员权限/admin页面,此页面允许服务器管理员查看所有注册用户并删除它们,它还允许邀请新用户,即使注册被禁用。
当然为了用户隐私安全,管理员只能查看用户和删除用户,并不能读取用户存储的密码信息。
docker run -d --name vaultwarden \
-e ADMIN_TOKEN=some_random_token_as_per_above_explanation \
-v /vw-data/:/data/ \
-p 8980:80 \
vaultwarden/server:latest
Bitwarden使用
电脑、移动设备、浏览器插件
https://bitwarden.com/download/
bitwarden密码管理系统支持客户端和浏览器插件,只需要在登录器点击设置输入服务器地址即可,例如https://pwd.ixmu.net

Bitwarden数据备份
bitwarden备份最关键的就是sqlite3数据库文件了,你可以直接进入到bw-data目录下,将sqlite3数据库保存下来。当然你也可以将bw-data目录下所有的包括附件文件夹、图标缓存文件夹、密钥等文件备份下来。
总结
bitwarden是一款非常优秀的密码管理系统软件,为了可以让手机APP和浏览器扩展能够正常使用Bitwarden自建密码存储系统,我们需要用到反代域名,如果这些都不需要直接执行启动命令使用IP登录即可。
bitwarden运行命令相关的参数还有如下:
# 运行 bitwarden_rs 容器
docker run -d --name bitwarden \
-e SIGNUPS_ALLOWED=false \
-e INVITATIONS_ALLOWED=false \
-e ADMIN_TOKEN=step2_generated_token \
-e ROCKET_TLS='{certs="/data/xxx.crt",key="/data/xxx.key"}' \
-e DOMAIN=https://bwh.vioe.cc/ \
-e LOG_FILE=/path/to/log \
-e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \
-e DATA_FOLDER=/path/to/data/folder \
-p 443:80 \
-v /path/to/host/ssl/:/path/to/docker/ssl/
-v /path/to/host/data/folder:/path/to/docker/data/folder \
vaultwarden/server:latest
说明如下:
SIGNUP_ALLOWED:是否允许注册
INVITATIONS_ALLOWED:是否允许组织邀请注册
ADMIN_TOKEN:用户管理界面 (/admin),可用于删除用户及邀请用户注册
ROCKET_TLS:ssl 证书信息,同时需要配置 -v /path/to/host/ssl/:/path/to/docker/ssl/ 卷,前者为宿主机 ssl 证书的位置,后者为容器证书位置
DOMAIN:域名
LOG_FILE、LOG_LEVEL、EXTENDED_LOGGING:日志保存文件路径以及日志等级定义
DATA_FOLDER:docker 容器数据保存文件夹(默认为 /data),除了定义这个文件夹之外,还可以定义附件、图标缓存、数据库等参数
DATABASE_URL:数据库路径
ATTACHMENT_FOLDER:附件路径
ICON_CACHE_FOLDER:图标缓存路径
评论