Docker部署Bitwarden
Page content
在我们的生活和工作当中,会接触到 N 多的 APP 或网页,因为并不是每个服务都能用类似 QQ 一键登录的方式来绑定账号,所以也就有了 N 多的账号密码,记密码成为了让我们非常头疼的事情。太简单或者过于单一的密码容易被撞库或“脱裤”,而太复杂的密码又难以记忆。
因此,市面上就有了多款帮助我们记录密码的软件服务,比如 1password、Lastpass 等。这些软件能够自动抓取我们提交的账号密码保存到云端,实现多终端同步、自动填充密码等功能。虽说这类服务一般还是比较靠谱的,而且还有一些付费套餐。 但是密码存在别人的服务器上你总是会有些不放心,谁知道哪天会不会出现数据泄露之类的问题?
鉴于此,本文分享一个基于 VPS,低成本打造个人专属密码管理服务的方案。
安装 Docker
Docker 部署 Bitwarden
官方版本 Bitwarden 搭建对服务器要求很高,国外有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。 另外,bitwarden_rs 支持官方付费才能实现的服务。
docker pull vaultwarden/server:latest
# -p端口映射,-v绑定数据目录
docker run -d \
--name bitwarden \
-p 8080:80 \
-p 3012:3012 \
--restart=always \
-e SIGNUPS_ALLOWED=true \
-e WEB_VAULT_ENABLED=true \
-e DOMAIN=https://mm.lockshell.com \
-v /home/bitwarden/data:/data \
vaultwarden/server:latest
# 查看是否启动成功
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4218b657636 bitwardenrs/server:latest "/usr/bin/dumb-init …" 28 hours ago Up 28 hours (healthy) 0.0.0.0:3012->3012/tcp, :::3012->3012/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp bitwarden
注意
-d
是指保持 Docker 容器在后台运行-p 8080:80
将 Docker 容器的 80 端口 映射到 宿主机的 8880 端口/home/bitwarden/data
这段修改为自己选择的路径,:/data
不能修改为其他内容。
在创建容器的时候可以指定很多环境变量,这里简单介绍几个
管理员访问密码,设置密码后可以访问管理页面
-e ADMIN_TOKEN=some_random_token_as_per_above_explanation \
是否允许注册,false为禁止之策
ADMIN_TOKEN 变量用于开启bitwarden的网页管理功能,请使用高强度token!如非需要,建议不要开启。
-e SIGNUPS_ALLOWED=false \
是否允许邀请注册,在禁止注册的情况下可以邀请某个指定的用户进行注册。
如果只是自己使用,建议删除容器,重新加入SIGNUPS_ALLOWED=false 变量即可禁止其他人注册。
-e INVITATIONS_ALLOWED=false \
是否直接在页面显示密码提示,不通过邮箱
-e SHOW_PASSWORD_HINT=false \
部署反向代理
Bitwarden 必须启用 HTTPS 访问管理界面才能正常注册,所以如果不打算套一层 CDN 来做安全加固的话, 还需要在本地部署一个 Nginx/Caddy 来代理 Bitwarden,以便开启 HTTPS。
Caddy2.x 代理配置
mm.lockshell.com {
encode gzip
tls {
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
curves x25519
}
log {
level INFO
output file /home/ubuntu/caddy/access.log {
roll_size 10MB
roll_keep 10
}
}
# Notifications redirected to the websockets server
reverse_proxy /notifications/hub localhost:3012
# Proxy everything else to Rocket
reverse_proxy localhost:8080 {
# Send the true remote IP to Rocket, so that vaultwarden can put this in the
# log, so that fail2ban can ban the correct IP.
header_up X-Real-IP {remote_host}
}
}
Nginx 代理配置
#PROXY-START/
location /
{
proxy_pass http://127.0.0.1:8880;
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 REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header X-Cache $upstream_cache_status;
# Set Nginx Cache
add_header Cache-Control no-cache;
expires 12h;
}
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:8880;
}
#PROXY-END/
更新 DNS
将mm.lockshell.com
域名解析到服务器的公网 IP 就能正常打开 Bitwarden 的管理后台了。
本文由 络壳 原创或整理,转载请注明出处