简介
Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。[6]Bitwarden提供云端托管服务,并支持自行部署解决方案。[7]
官方服务器可以免费使用,但不包含高级服务。
用 Rust 编写的 Bitwarden 服务器 API 的替代实现,与上游 Bitwarden 客户端兼容*,非常适合运行官方资源密集型服务可能不理想的自托管部署。
vaultwarden 自己搭设的好处:
- 密码仓库在自己手中更安全。
- 可以使用无限的账户、组织。
- 包含高级功能。
准备工作
- 在线云服务器
- 公网域名
- 一把时间
云服务器
我用的阿里云服务器 特价99一年
学生特价服务器
新老客户续费优惠服务器
地区选离自己近的
我选择的是centos8
配置安全组
服务器通过端口与外界通信,安全组就是设置哪些端口可以通过。
购买后进入控制台 ecs实例配置安全组
没有安全组就创建一个。
点击管理规则,添加入方向规则 22 80 443 分别对应ssh http 和 https通信。其他的根据自己需求添加。出方向默认不用管。
设置密码
我这边步骤是先关机,然后通过阿里云控制台修改密码,然后在启动实例。之后就可以通过ssh工具连接了。
域名
vaultwarden 需要通过https使用,所以需要一个域名。
我是在阿里云买的域名。
搜索域名,然后选择购买。
购买后需要实名和备案,阿里云一套流程走完。
备案通过后,设置dns解析。将域名解析到你的服务器公网ip。
我这里用的cloudflare,需要先在域名提供商(阿里云 域名)设置为cloudflare的dns。
然后在cloudflare设置域名解析。
设置完之后继续后面的步骤。
配置Vaultwarden
安装docker
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
bash
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用以下命令来设置稳定的仓库。
bash
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
bash
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
启动bitwarden 镜像
bash
docker run --rm -d --name vaultwarden -v /home/bitwarden/:/data/ -e LOG_FILE=/data/vaultwarden.log--restart unless-stopped -p 80:80 vaultwarden/server:latest
启动docker
bash
sudo systemctl start docker
配置反向代理
我使用的caddy2
安装caddy2
bash
dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy
更改反向代理信息
bash
vi /etc/caddy/Caddyfile
参考下面的内容,配置反向代理。{{your email}}改成你的邮箱,www.exampledomain.com 改成你的域名。
caddy 支持自动配置https 省去了我们的麻烦,只需要写上tls 邮箱
即可
json
www.exampledomain.com {
log {
level WARN
output file "/home/caddy/www.exampledomain.com.log" {
roll_size 10MB
roll_keep 10
}
}
log {
level WARN
output file "/home/caddy/www.exampledomain.com-error.log" {
rotate_size 10
rotate_age 14
rotate_keep 5
rotate_compress
}
}
tls "{{your email}}"
encode gzip
handle_path "/vaultwarden/*" {
reverse_proxy "0.0.0.0:80" {
transport http {
dial_timeout 2s
response_header_timeout 30s
}
header_up "Host" "{upstream_hostport}"
header_up "X-Real-IP" "{remote_host}"
}
}
handle {
respond "Nope!" 404
}
}
反向代理配置更新
bash
caddy reload --config /etc/caddy/Caddyfile
访问你的 域名/vaultwarden/
就能看到登陆页面了🎉
高级配置
定时备份
vaultwarden中存储了我们的密码,以防万一,设置一个定时备份方便恢复。
使用cron进行备份。/etc/cron.daily/
目录下的脚本每天会自动执行一次。
bash
vi /etc/cron.daily/backup
输入文件内容
shell
#/bin/bash
bitwardenPath=/home/bitwarden
bitwardenBPath=你的备份目录
bitwardenBTDir=${bitwardenBPath}/tmp/
# bitwarden 备份
mkdir -p ${bitwardenBTDir}
cp -r ${bitwardenPath}/* ${bitwardenBTDir}
# 删除不需要备份的数据
rm -rf ${bitwardenBTDir}db.sqlite3-shm
rm -rf ${bitwardenBTDir}send/
rm -rf ${bitwardenBTDir}tmp/
tar -czf ${bitwardenBPath}/$(date '+%Y%m%d-%H%M').tar.gz -C ${bitwardenBTDir} .
rm -rf ${bitwardenBTDir}
后续如果需要恢复,就把挂载目录清空解压一个备份文件到里面重启docker即可。
定时更新镜像
vaultwarden 还在持续更新,为了及时用上最新的版本,设置一个定时任务,定时更新镜像。
bash
vi /etc/cron.daily/dockerImageUpdate
脚本内容如下
bash
#/bin/bash
docker run -d --name watchtower --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once
watchtower 自动更新 Docker 容器基础镜像的流程。
多次失败屏蔽ip fail2ban
待续
填坑记录
domain 重启 404
设置domain参数后重启docker,访问就404,暂未搜到解决方法。
绕行方案,删除domain参数,重启docker后通过ip:端口访问admin管理页面设置domain。
TOTP 时区问题
报错如下
txt
发生错误。
Invalid TOTP code! Server time: 2023-11-15 06:46:43 UTC IP: 172.xx.xx.xx
docker镜像内时间错误
启动时将时间挂载进去。
bash
docker run ······ -v /etc/localtime:/etc/localtime ·····
改完之后依旧不行,苦苦寻找解决方案,最后发现存的totp太多了用错了 😅。