自己搭设开源密码管理工具 bitwarden

简介

Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。[6]Bitwarden提供云端托管服务,并支持自行部署解决方案。[7]

官方服务器可以免费使用,但不包含高级服务。

官网地址

用 Rust 编写的 Bitwarden 服务器 API 的替代实现,与上游 Bitwarden 客户端兼容*,非常适合运行官方资源密集型服务可能不理想的自托管部署。

vaultwarden 自己搭设的好处:

  1. 密码仓库在自己手中更安全。
  2. 可以使用无限的账户、组织。
  3. 包含高级功能。

官方仓库

准备工作

  1. 在线云服务器
  2. 公网域名
  3. 一把时间

云服务器

我用的阿里云服务器 特价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太多了用错了 😅。

待续

相关推荐
文言一心4 分钟前
基于 Docker + Docker Compose 实现一键部署(单节点部署场景下轻量、易维护、可一键启停)
运维·docker·容器
木木木一8 分钟前
Rust学习记录--C8 常用的集合
开发语言·学习·rust
守护砂之国泰裤辣15 分钟前
Windows+docker下简单kafka测试联调
java·运维·spring boot·docker·容器
释怀不想释怀20 分钟前
Docker(常见命令)
docker·容器·eureka
TDengine (老段)32 分钟前
TDengine Rust 连接器入门指南
大数据·数据库·物联网·rust·时序数据库·tdengine·涛思数据
Java陈序员37 分钟前
运维必备!一款全平台可用的服务器管理利器!
linux·react.js·docker
德育处主任1 小时前
『NAS』中午煮什么?Cook
前端·docker
腥臭腐朽的日子熠熠生辉2 小时前
nest js docker 化全流程
开发语言·javascript·docker
酒醉的胡铁2 小时前
Docker Desktop 数据迁移完整流程(Windows 10/11 x64)
windows·docker·容器