使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)

[复制链接]
查看: 3700   回复: 9
发表于 2024-11-1 14:48:43 | 显示全部楼层 |阅读模式
前言
Bitwarden 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden 平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 作为一款商业自由软件,其开发公司提供云端托管服务 (bitwarden.com),同时为广大开源社区提供自行部署的解决方案。
Vaultwarden 原名 Bitwarden_rs,自 v2.21.0 开始更名为 Vaultwarden。Bitwarden 原始服务端使用 C# 编写,部署困难,且要求 MSSQL 等商业软件,运行需要 2GB 以上的内存;而 Vaultwarden 是一个使用 Rust 编写的非官方 Bitwarden 服务器实现,它与官方 Bitwarden 客户端兼容,运行 Vaultwarden 时只需要 10M 内存,可以说对硬件基本没有要求,对于不希望使用官方的占用大量资源的自托管部署而言,它是理想的选择。
Vaultwarden 除不支持官方企业版的部分功能(如事件日志、目录同步以及 SSO 登录)外,其他大部分功能均免费支持。并跟随官方版本保持及时更新。
Vaultwarden 实现了 Bitwarden API 所需的大部分功能,因此桌面端、移动端、浏览器扩展等客户端均可直接使用 Bitwarden 官方的客户端应用程序。
Vaultwarden 仓库推荐的安装方式均为直接使用 Docker 部署,本文将介绍一种使用非 Docker 方式、直接在系统上部署 Vaultwarden 的方法。16MB 左右的内存占用,再配合 MySQL 替代默认的 SQLite 作为数据存储形式可以将其“功耗”降到最低。
一、准备工作
1.1 服务器和系统选用
由于 Vaultwarden 运行时几乎不消耗系统资源,因此可以选用任意型号的轻量应用服务器;服务器系统建议选择 Ubuntu 18.04 或更新版本以及 Debian 10 或更新版本的 Linux 发行版,使用 CentOS 似乎会因依赖软件包版本问题而出现未知的错误。
此外,由于部署 Vaultwarden 不会对现有系统环境造成破坏性影响,在已经有网站业务的服务器上部署 Vaultwarden 也是一个不错的选择。
1.2 环境配置
1.2.1 软件包及依赖配置
依次执行以下命令以更新软件包信息、安装必要的软件包及开发工具包:
  1. apt update -yapt install git nano curl wget htop pkg-config openssl libssl1.1 libssl-dev -yapt install build-essential -y
复制代码
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
1.2.2 Rust 环境配置
执行
  1. curl https://sh.rustup.rs -sSf | sh
复制代码
以配置 Rust 环境。(国内可能较慢)
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
出现 Rust is installed now. Great! 即代表安装完成。
依次执行以下命令以配置 cargo 命令的环境变量:
  1. echo 'export PATH=~/.cargo/bin:$PATH' >> ~/.bashrcexport PATH=~/.cargo/bin:$PATH which rustc
复制代码
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
若返回
  1. /root/.cargo/bin/rustc
复制代码
则代表完成 Rust 环境的配置。
二、编译 Vaultwarden
执行
  1. git clone https://github.com/dani-garcia/vaultwarden && cd vaultwarden
复制代码
以拉取 Vaultwarden 储存库(国内可能较慢):
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
执行
  1. cargo clean && cargo build --features mysql --release
复制代码
以启动 Vaultwarden 的编译。
其中,
  1. mysql
复制代码
可以为与
  1. sqlite
复制代码
  1. postgresql
复制代码
三者的任意组合,选择编译
  1. mysql
复制代码
  1. postgresql
复制代码
时,系统必须安装了 MySQL 或 PostgreSQL,否则将提示:
  1. linking with `cc` failed: exit status: 1...= note: /usr/bin/ld: cannot find -lmysqlclient          collect2: error: ld returned 1 exit status
复制代码
编译需要 3GB 左右的内存,内存不足的可以调整虚拟内存,虚拟内存建议空闲 2GB 左右;编译耗时较久,LemonBench 跑分在 800 左右的单核服务器编译耗时 28 分 54 秒。
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
三、安装 Vaultwarden
3.1 移动 Vaultwarden 二进制文件
依次执行以下命令:
  1. cp target/release/vaultwarden /usr/bin/vaultwardenchmod +x /usr/bin/vaultwarden
复制代码
以将 Vaultwarden 二进制文件置入系统可执行目录并赋予执行权限。
3.2 配置 Vaultwarden 专用用户
依次执行以下命令:
  1. useradd -s /sbin/nologin -M vaultwardenmkdir -p /var/lib/vaultwarden/datachown -R vaultwarden:vaultwarden /var/lib/vaultwarden/
复制代码
3.3 部署 Vaultwarden Web UI
依次执行以下命令:
  1. wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2.28.0/bw_web_v2.28.0.tar.gztar -xf bw_web_v2.28.0.tar.gz -C /var/lib/vaultwarden/
复制代码
其中
  1. v2.28.0
复制代码
为写作时的版本号,获取地址为 https://github.com/dani-garcia/bw_web_builds/releases/latest ,请保持最新。
3.4 编写 Vaultwarden 配置文件
执行
  1. touch /etc/vaultwarden.env
复制代码
并写入以下内容:
  1. DATA_FOLDER=/var/lib/vaultwarden/data/DATABASE_URL=mysql://[数据库用户名]:[数据库密码]@127.0.0.1:3306/[数据库名]IP_HEADER=X-Real-IPWEB_VAULT_FOLDER=/var/lib/vaultwarden/web-vault/WEB_VAULT_ENABLED=trueADMIN_TOKEN=[base64码]DOMAIN=https://vaultwarden.iks.moe
复制代码
其中,
  1. [数据库密码]
复制代码
为 MySQL 数据库用户名,
  1. [数据库密码]
复制代码
为 MySQL 数据库用户的密码,
  1. [数据库名]
复制代码
为 MySQL 数据名,此三者均须提前创建;
  1. 127.0.0.1
复制代码
不得填写为
  1. localhost
复制代码
  1. [base64码]
复制代码
执行
  1. openssl rand -base64 48
复制代码
以得到,
  1. https://vaultwarden.iks.moe
复制代码
为你的域名,协议头必须为
  1. https://
复制代码

使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
3.5 编写 Vaultwarden SystemD 文件
执行
  1. touch /etc/systemd/system/vaultwarden.service
复制代码
并写入以下内容:
  1. [Unit]Description=Vaultwarden ServerDocumentation=https://github.com/dani-garcia/vaultwarden# 当你使用 SQLite 时,请取消下一行的注释# After=network.target# 当你使用 MariaDB 时,请取消下两行的注释# After=network.target mariadb.service# Requires=mariadb.service# 当你使用 MySQL 时,请取消下两行的注释# After=network.target mysqld.service# Requires=mysqld.service# 当你使用 PostgreSQL 时,请取消下两行的注释# After=network.target postgresql.service# Requires=postgresql.service[Service]User=vaultwardenGroup=vaultwardenEnvironmentFile=/etc/vaultwarden.envExecStart=/usr/bin/vaultwardenLimitNOFILE=1048576LimitNPROC=64PrivateTmp=truePrivateDevices=trueProtectHome=trueProtectSystem=strictWorkingDirectory=/var/lib/vaultwardenReadWriteDirectories=/var/lib/vaultwardenAmbientCapabilities=CAP_NET_BIND_SERVICE[Install]WantedBy=multi-user.target
复制代码
删去被注释的行,最终配置如图:
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
3.6 启动 Vaultwarden
依次执行以下命令:
  1. systemctl enable --now vaultwarden.servicesystemctl start vaultwarden.servicesystemctl status vaultwarden.service
复制代码
若正常启动,则如下图提示:
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
四、使用 Nginx 反向代理 Vaultwarden
本文以宝塔面板为例,其他环境与此操作相同。
4.1 新建站点
新建一个站点,域名填写步骤 3.4 中的域名,配置好 SSL 证书。
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
4.2 配置反向代理
名称随意,目标 URL 为
  1. http://127.0.0.1:8000
复制代码
,其他默认。
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
供非宝塔用户的 nginx 反向代理配置:
  1. location /{    proxy_pass http://127.0.0.1:8000;    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;    add_header Cache-Control no-cache;}
复制代码
五、使用
访问域名,单击 Create Account 开始密码管理的第一步。
使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)
六、Vaultwarden 后续更新
重做步骤二、步骤 3.1, 3.3 并执行
  1. systemctl restart vaultwarden.service
复制代码
即可。
参考文献
https://nickhuber.ca/blog/bitwarden-rs-without-docker
https://gist.github.com/tavinus/59c314f4ccd70879db7f11074eacb6cc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2024-11-1 14:49:38 | 显示全部楼层
我还是选docker….一条命令 nginx再反代一下 完事
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:50:29 | 显示全部楼层
技术贴顶一顶
如果内存小且清凉 可以使用caddy2反代
https://caddyserver.com/docs/install
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:51:24 | 显示全部楼层
感谢大佬分享
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:51:35 | 显示全部楼层
make
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:52:00 | 显示全部楼层
感觉用Docker 方便安装和维护一点.再配合traefik 更加优雅.使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:52:30 | 显示全部楼层
docker也是原生的和编译的没有性能上差异
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:53:05 | 显示全部楼层
centos7的时候编译过,报错了,后来用wsl编译的放进去的能跑,现在直接扔okteto上跑了:lol使用非 Docker 在腾讯云轻量上搭建 Vaultwarden (Bitwarden_rs)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:53:40 | 显示全部楼层
马克。。。
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:53:48 | 显示全部楼层
谢谢楼主,之前想找都没找到,只能Docker
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则