前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用非 Docker 方案在腾讯云轻量应用服务器上搭建密码管理软件 Vaultwarden (Bitwarden_rs)

使用非 Docker 方案在腾讯云轻量应用服务器上搭建密码管理软件 Vaultwarden (Bitwarden_rs)

作者头像
iks
发布于 2022-05-03 06:51:06
发布于 2022-05-03 06:51:06
2.3K0
举报
文章被收录于专栏:Lighthouse RouterLighthouse Router

前言

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 软件包及依赖配置

依次执行以下命令以更新软件包信息、安装必要的软件包及开发工具包:

代码语言:shell
复制
apt update -y
apt install git nano curl wget htop pkg-config openssl libssl1.1 libssl-dev -y
apt install build-essential -y
be-install
be-install

1.2.2 Rust 环境配置

执行 curl https://sh.rustup.rs -sSf | sh 以配置 Rust 环境。(国内可能较慢)

rust-install
rust-install

出现 Rust is installed now. Great! 即代表安装完成。

依次执行以下命令以配置 cargo 命令的环境变量:

代码语言:shell
复制
echo 'export PATH=~/.cargo/bin:$PATH' >> ~/.bashrc
export PATH=~/.cargo/bin:$PATH 
which rustc
rustc-install
rustc-install

若返回 /root/.cargo/bin/rustc 则代表完成 Rust 环境的配置。

二、编译 Vaultwarden

执行 git clone https://github.com/dani-garcia/vaultwarden && cd vaultwarden 以拉取 Vaultwarden 储存库(国内可能较慢):

vw-pull
vw-pull

执行 cargo clean && cargo build --features mysql --release 以启动 Vaultwarden 的编译。

其中,mysql 可以为与 sqlitepostgresql 三者的任意组合,选择编译 mysqlpostgresql 时,系统必须安装了 MySQL 或 PostgreSQL,否则将提示:

代码语言:shell
复制
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 秒。

cpmdone
cpmdone

三、安装 Vaultwarden

3.1 移动 Vaultwarden 二进制文件

依次执行以下命令:

代码语言:shell
复制
cp target/release/vaultwarden /usr/bin/vaultwarden
chmod +x /usr/bin/vaultwarden

以将 Vaultwarden 二进制文件置入系统可执行目录并赋予执行权限。

3.2 配置 Vaultwarden 专用用户

依次执行以下命令:

代码语言:shell
复制
useradd -s /sbin/nologin -M vaultwarden
mkdir -p /var/lib/vaultwarden/data
chown -R vaultwarden:vaultwarden /var/lib/vaultwarden/

3.3 部署 Vaultwarden Web UI

依次执行以下命令:

代码语言:shell
复制
wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2.28.0/bw_web_v2.28.0.tar.gz
tar -xf bw_web_v2.28.0.tar.gz -C /var/lib/vaultwarden/

其中 v2.28.0 为写作时的版本号,获取地址为 https://github.com/dani-garcia/bw_web_builds/releases/latest ,请保持最新。

3.4 编写 Vaultwarden 配置文件

执行 touch /etc/vaultwarden.env 并写入以下内容:

代码语言:text
复制
DATA_FOLDER=/var/lib/vaultwarden/data/
DATABASE_URL=mysql://[数据库用户名]:[数据库密码]@127.0.0.1:3306/[数据库名]
IP_HEADER=X-Real-IP
WEB_VAULT_FOLDER=/var/lib/vaultwarden/web-vault/
WEB_VAULT_ENABLED=true
ADMIN_TOKEN=[base64码]
DOMAIN=https://vaultwarden.iks.moe

其中,[数据库密码]MySQL 数据库用户名,[数据库密码] 为 MySQL 数据库用户的密码,[数据库名] 为 MySQL 数据名,此三者均须提前创建;127.0.0.1 不得填写为 localhost[base64码] 执行 openssl rand -base64 48 以得到,https://vaultwarden.iks.moe 为你的域名,协议头必须为 https://

b64
b64
simple-env
simple-env

3.5 编写 Vaultwarden SystemD 文件

执行 touch /etc/systemd/system/vaultwarden.service 并写入以下内容:

代码语言:text
复制
[Unit]
Description=Vaultwarden Server
Documentation=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=vaultwarden
Group=vaultwarden
EnvironmentFile=/etc/vaultwarden.env
ExecStart=/usr/bin/vaultwarden
LimitNOFILE=1048576
LimitNPROC=64
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
WorkingDirectory=/var/lib/vaultwarden
ReadWriteDirectories=/var/lib/vaultwarden
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

删去被注释的行,最终配置如图:

sdc
sdc

3.6 启动 Vaultwarden

依次执行以下命令:

代码语言:shell
复制
systemctl enable --now vaultwarden.service
systemctl start vaultwarden.service
systemctl status vaultwarden.service

若正常启动,则如下图提示:

st-img
st-img

四、使用 Nginx 反向代理 Vaultwarden

本文以宝塔面板为例,其他环境与此操作相同。

4.1 新建站点

新建一个站点,域名填写步骤 3.4 中的域名,配置好 SSL 证书

bt-newsite
bt-newsite

4.2 配置反向代理

名称随意,目标 URL 为 http://127.0.0.1:8000,其他默认。

image-20220503012246612
image-20220503012246612

供非宝塔用户的 nginx 反向代理配置:

代码语言:c++
复制
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 开始密码管理的第一步。

mainpage
mainpage

六、Vaultwarden 后续更新

重做步骤二、步骤 3.1, 3.3 并执行 systemctl restart vaultwarden.service 即可。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
  位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证。这些特性用于定义常见的验证模式,例如范围检查和必填字段。而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效。
Edison Zhou
2018/08/20
2.3K0
ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
一个ajax的Post要求
$.post(url,[data],[callback],[type]) 第一个参数是地址,第二个参数是一个参数传递。第三个参数是一个回调函数。參数是请求返回数据的类型
全栈程序员站长
2022/07/06
1.4K0
前端使用ajax_ajax属于前端吗
大家好,又见面了,我是你们的朋友全栈君。 原生AJAX 名称: 异步的javascript and xml 原理: 通过XMLHttpRequest与服务器交换数据 服务器数据通过json或者xml格式返回 浏览器通过js+css渲染展示数据 GET 创建xhr open打开连接 监听readystate readyState 4准备状态完毕 status 状态码200 响应成功 send 发送 <button id="btn">点击</button> <p id="content"></p> <scrip
全栈程序员站长
2022/11/11
1.8K0
ajax的几个面试题「建议收藏」
一、什么是AJAX(请谈一下你对Ajax的认识) AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。 Ajax包含下列技术: 基于web标准(standards-basedpresentation)XHTML+CSS的表示; 使用 DOM(Document ObjectModel)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。
全栈程序员站长
2022/09/27
4700
jQuery EasyUI+ashx实现数据库的CIUD操作
对上一个小项目做一个回顾总结,涉及到了jQuery EasyUI+ashx实现数据库的CIUD操作,和大家分享一下。基本思路是用easyui做前端,ashx做后端,中间使用json格式交换数据,其中json主要使用Newtonsoft.Json来序列化和反序列化,为简单起见,后端没有分层,数据都是靠拼接sql,使用一个简单封装的DBHelper来时间数据库的操作。
全栈程序员站长
2022/11/15
1.1K0
jQuery EasyUI+ashx实现数据库的CIUD操作
AjaxPro使用说明[通俗易懂]
Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写。”Ajax”这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求。
全栈程序员站长
2022/09/14
1K0
AjaxPro使用说明[通俗易懂]
JQuery ajax调用asp.net的webMethod
本文章转载:http://www.cnblogs.com/zengxiangzhan/archive/2011/01/16/1936938.html
跟着阿笨一起玩NET
2018/09/19
2.3K0
ASP.NET Core: 全新的ASP.NET !
背景 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5)   它颠覆了过去的 ASP.NET。 什么是 ASP.NET Core? ASP.NET Core
葡萄城控件
2018/01/10
11.8K0
ASP.NET Core: 全新的ASP.NET !
ASP.NET里的Session详细解释
Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子。
全栈程序员站长
2022/07/15
1.4K0
我的摸索过程之IIS下配置asp.net 的注意事项
"在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。"
Ryan_OVO
2023/10/18
3780
我的摸索过程之IIS下配置asp.net 的注意事项
Asp.Net开发等级星使用(Jquery Rating)
插件参数: rater第一个参数是AJAX提交的URL rater第二个参数 maxvalue:最大星数 curvalue:默认选择多少颗星 title:鼠标放在星上的提示 enable:可设置true or false,控件是否可用 rater的第三个参数回调函数 aspx页代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%> <!DOCTYPE html P
Porschev
2018/01/16
7870
Asp.Net开发等级星使用(Jquery Rating)
java中的jQuery与Ajax的应用,菜鸟教程
1. Ajax,并不是指一种单一的技术,而是有机的利用了一系列交互式网页应用相关的技术所形成的结合体。Ajax揭开了无刷新更新页面的新时代,并有代替系统的Web方式和通过隐藏的框架来进行异步提交的趋势,是Web开发应用的一个里程碑。Ajax全称(Asynchronous JavaScript and XML),即异步JavaScript和XML。实现客户端异步请求操作,不刷新整个页面进行服务器通信,减少等待时间。
全栈程序员站长
2022/07/23
1.5K0
java中的jQuery与Ajax的应用,菜鸟教程
[ASP.net]web.config的customErrors与httpErrors的区别
之前一直知道设置web.config(其实就是xml文件)的customErrors的error来指向自定义的错误页的URL,但是今天在调试的时候发现customErrors无法跳转到自定义的页面,在网上找了半天才了解还有httpErrors可以设置跳转自定义错误页。
全栈程序员站长
2022/09/07
9820
[ASP.net]web.config的customErrors与httpErrors的区别
在asp.net mvc中使用PartialView返回部分HTML段
在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同一时候它还有个兄弟PartialViewResult
全栈程序员站长
2022/07/13
1.7K0
Asp.net mvc 知多少(六)
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
圣杰
2018/01/11
2.5K0
Asp.net mvc 知多少(六)
ASP.NET AJAX(8)__Microsoft AJAX Library中异步通信层的使用什么是异步通信层Micorsoft AJAX Library异步通信层的组成WebRequestExec
什么是异步通信层 Microsoft AJAX Library的组长部分之一 负责ASP.NET AJAX框架中所有的客户端与服务器端的通信 其默认实现了封装了XMLHttpRequest的功能 一个使用XMLHttpRequest发出AJAX请求的示例 创建一个名为RandomNumber.ashx的一般处理程序 <%@ WebHandler Language="C#" Class="RandomNumber" %> using System; using System.Web; public cla
小白哥哥
2018/03/07
2.2K0
ASP.NET编程入门与应用_aspnet网站开发实例
转载于:https://www.cnblogs.com/smartsmile/p/6234169.html
全栈程序员站长
2022/11/18
1.2K0
Jquery Ajax 跨域调用asmx类型 WebService范例
摘要:Ajax 在 Web 2.0 时代起着非常重要的作用,然而有时因为同源策略(SOP)(俗称:跨域问题(cross domain)) 它的作用会受到限制。在本文中,将学习如何克服合作限制。本文以asmx方式搭建webservice作为测试用后端,给出完整的前后端调用解决方案、范例代码。
全栈程序员站长
2022/09/06
1.7K0
Jquery Ajax 跨域调用asmx类型 WebService范例
通过扩展让ASP.NET Web API支持JSONP
同源策略(Same Origin Policy)的存在导致了“源”自A的脚本只能操作“同源”页面的DOM,“跨源”操作来源于B的页面将会被拒绝。同源策略以及跨域资源共享在大部分情况下针对的是Ajax请求。同源策略主要限制了通过XMLHttpRequest实现的Ajax请求,如果请求的是一个“异源”地址,浏览器将不允许读取返回的内容。JSONP是一种常用的解决跨域资源共享的解决方案,现在我们利用ASP.NET Web API自身的扩展性提供一种“通用”的JSONP实现方案。 一、JsonpMediaTypeF
蒋金楠
2018/01/15
1.7K0
通过扩展让ASP.NET Web API支持JSONP
IIS7 beta FREE WEBHOSTING FREE HOSTING FOR ASP.NET 2.0 IIS7[通俗易懂]
From: http://blogs.iis.net/bills/archive/2007/04/28/free-iis7-web-hosting.aspx
全栈程序员站长
2022/11/08
5K0
相关推荐
ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档