2.构建二进制
注意:最低支持 Rust 版本 (MSRV - Minimum Support Rust Version) 策略是 N-2,这意味着如果当前 Rust 版本是 v1.67,我们支持使用 v1.65 构建,如果是 v1.69 稳定版,MSRV 将是 v1.67。
这意味着新的稳定版发布时,新的稳定版 Rust 功能将无法使用,而必须等待另外两个版本。
低于 MSRV 的任何版本都会生成警告,在强制使用旧版本构建时,您只能靠您自己了。
这个页面主要是给那些对 Vaultwarden 开发感兴趣,或者有特殊原因想要构建自己的二进制的用户。
- 在基于 Debian 的发行版上,请安装以下包:
build-essential
、git
,这些通用包可确保构建能正常进行 - 对于基于 Debian 发行版上的 SQLite3 后端,需要安装
libsqlite3-dev
- 对于基于 Debian 发行版上的 MySQL 后端,需要安装
libmariadb-dev-compat
和libmariadb-dev
- 对于基于 Debian 发行版上的 PostgreSQL 后端,需要安装
libpq-dev
和pkg-config
NodeJS
(仅当编译网页密码库时使用。使用预构建的二进制,通过系统的包管理器安装)或 nodesource 二进制发行版。备注:构建 web-vault 当前要求 NodeJS v16 和 NPM v8.11
# 使用所有后端编译并运行
cargo run --features sqlite,mysql,postgresql --release
# 或仅使用所有后端编译(二进制位于 target/release/vaultwarden)
cargo build --features sqlite,mysql,postgresql --release
# 使用 sqlite 后端编译并运行
cargo run --features sqlite --release
# 或仅使用 sqlite 编译(二进制位于 target/release/vaultwarden)
cargo build --features sqlite --release
# 使用 mysql 后端编译并运行
cargo run --features mysql --release
# 或仅使用 mysql 编译(二进制位于 target/release/vaultwarden)
cargo build --features mysql --release
# 使用 postgresql 后端编译并运行
cargo run --features postgresql --release
# 或仅使用 postgresql 编译(二进制位于 target/release/vaultwarden)
cargo build --features postgresql --release
注意:一个先前的话题表明由于 Rust 编译器和 LLVM 之间存在不兼容,导致编译可能会因段错误而失败。作为解决方法,可以使用较旧版本的编译器,例如
cargo +nightly-2019-08-27 build --features yourbackend --release
构建密码库需要约 1.5GB 的 RAM。在具有 1GB 或更小容量的 RaspberryPI 之类的系统上,请启用交换功能或在功能更强大的计算机上构建,然后从那里复制目录。仅构建时需要大量内存,而运行带密码库的 Vaultwarden 仅需要约 10MB 的 RAM。
如果您希望手动编译它,请遵循如下的步骤:
# 克隆库
git clone https://github.com/dani-garcia/bw_web_builds.git bw_web_builds
cd bw_web_builds
# 使用 docker 作为构建环境(最安全的方式并使用正确的构建版本)
# 这将构建 web-vault,并将文件解压缩到 docker_build 目录
make docker-extract
# 改用主机提供的 npm 和节点
make full
# 克隆库
git clone https://github.com/bitwarden/clients.git web-vault
cd web-vault
# 切换到最新的标签
git -c advice.detachedHead=false checkout web-v2022.6.0
# 或者使用此版本的提交哈希
git -c advice.detachedHead=false checkout bb5f9311a776b94a33bcf0a7bff44cd87a2fcc92
- 如果有版本为
vXXXX.Y.Z
的补丁,则使用该版本 - 否则,选择小于
vXXXX.Y.Z
的最大的那一个版本
4、应用补丁:
# 在 web-vault 目录中
git apply vXXXX.Y.Z.patch
5、然后,构建密码库:
npm ci
# 阅读下方的备注(我们将其用于我们的 docker 构建)
# npm 审计修复
# 切换到 web-Vault 目录
cd apps/web
# 构建 web-Vault
npm run dist:oss:selfhost
可能会要求您运行
npm audit fix
以修复漏洞。 这将自动尝试将包升级到较新的版本,该版本可能不兼容并破坏网页密码库功能。如果知道自己在做什么,请自行承担风险。顺便一提,我们会在自己的发行版中使用它!6、最后将
build
文件夹的内容复制到目标文件夹中:- 如果与
cargo run --release
一起运行,则目标文件夹为vaultwarden/web-vault
。 - 如果直接运行已编译的二进制,则它位于二进制旁,为
vaultwarden/target/release/web-vault
。
环境变量将覆盖
.env.template
文件中设置的值。使用 cargo 安装 diesel_cli:
cargo install diesel_cli --no-default-features --features sqlite-bundled
确保在
.env
文件中包含正确的数据库路径。如果要修改模式,请使用以下命令创建新迁移:
diesel migration generate <name>
修改
*.sql
文件,确保在 down.sql
文件中还原了所有更改。应用迁移并保存生成的模式,如下所示:
diesel migration redo
# 当使用的 diesel-cli > 1.3.0 时,此步骤会自动完成
# diesel print-schema > src/db/sqlite/schema.rs
最近更新 2d ago