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

简介

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

待续

相关推荐
落知秋10 小时前
RUST中的trait是什么?
笔记·rust
修罗王11 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
张龙68713 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
Jay-r14 小时前
极简博客搭建(精简版):textlog + GitHub Pages
python·github·教程·集成学习·博客网站·技术教程·自我成长
杨浦老苏14 小时前
开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问
运维·docker·ssh·堡垒机·群晖
ERD Online15 小时前
docker-compose 一键部署的 MIT 开源数据库建模平台
数据库·docker·开源
Embedded-Xin16 小时前
中间件—zenoh零基础入门
linux·中间件·rust·机器人·自动驾驶·嵌入式
qq834431016 小时前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
三言老师16 小时前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk17 小时前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署