此页面主要面向对 Vaultwarden 开发感兴趣或有特定原因想要构建自己的二进制文件的人。

典型用户应该从基于 Alpine 的 Docker 镜像中使用哪个容器镜像预建二进制文件,或者寻找 第三方包

依赖

  • Rust nightly(强烈推荐使用 rustup)
  • 在基于 Debian 的发行版上,一些通用软件包可确保构建正常进行,请安装以下内容:build-essentialgit
  • OpenSSL(应该在路径中可用,参见 openssl crate docs) 在基于 Debian 的发行版上,您需要安装 pkg-configlibssl-dev
  • 对于基于 Debian 的发行版上的 SQlite3 后端,您需要安装 libsqlite3-dev
  • 对于基于 Debian 的发行版上的 MySQL 后端,您需要安装 libmariadb-dev-compatlibmariadb-dev
  • 对于基于 Debian 的发行版上的 PostgreSQL,您需要安装 libpq-devpkg-config
  • NodeJS(仅在编译 web-vault 时,通过系统的包管理器安装,使用 预构建的二进制文件)或 nodesource binary distribution 注意:web-vault 当前使用需要 NodeJS v11 的软件包基础(例如 node-sass < v4.12)

运行/编译

所有后端

  1. # 编译所有后端并运行
  2. cargo run --features sqlite,mysql,postgresql --release
  3. # 或者只编译所有后端(二进制文件位于 target/release/vaultwarden)
  4. cargo build --features sqlite,mysql,postgresql --release

SQlite 后端

  1. # 使用sqlite后端编译并运行
  2. cargo run --features sqlite --release
  3. # 或者直接用 sqlite 编译(二进制文件位于 target/release/vaultwarden)
  4. cargo build --features sqlite --release

MySQL 后端

  1. # 用mysql后端编译并运行
  2. cargo run --features mysql --release
  3. # 或者直接用 mysql 编译(二进制文件位于 target/release/vaultwarden)
  4. cargo build --features mysql --release

PostgreSQL 后端

  1. # 使用 postgresql 后端编译并运行
  2. cargo run --features postgresql --release
  3. # 或者只用 postgresql 编译(二进制文件位于 target/release/vaultwarden)
  4. cargo build --features postgresql --release

运行时,服务器可以在 http://localhost:8000 中访问。

注意:之前的 issue 意味着由于 Rust 编译器和 LLVM 之间的不兼容,编译可能会因段错误而失败。可以使用旧版本的编译器作为解决方法,例如__cargo +nightly-2019-08-27 build --features yourbackend --release

安装网络保险库

Web Vault 的编译版本可以从 dani-garcia/bw_web_builds 下载。

如果您更喜欢手动编译它,请按照下列步骤操作:

注意:构建 Vault 需要 ~1.5GB 的 RAM。在 RaspberryPI 等 1GB 或更少的系统上,请启用交换 或在更强大的机器上构建它并从那里。如此多的内存仅用于构建它,使用 Vault 运行 Vaultwarden 只需要大约 10MB 的 RAM。

  • bitwarden/web 克隆 git 存储库并签出最新的发布标签(例如 v2.1.1):
  1. # 克隆存储库
  2. git clone https://github.com/bitwarden/web.git web-vault
  3. cd web-vault
  4. # 切换到最新的标签
  5. git checkout "$(git tag --sort=v:refname | tail -n1)"
  6. # 使用匹配的 jslib 提交
  7. git submodule update --init --recursive
  • dani-garcia/bw_web_builds 下载补丁文件并将其复制到web-vault 文件夹。 要选择要使用的版本,假设 Web Vault 是版本 vX.Y.Z
    • 如果有版本为 vX.Y.Z 的补丁,请使用那个补丁
    • 否则,选择版本最大但仍然小于 vX.Y.Z 的那个
  • 应用补丁
  1. # 在`网络保险库`目录中
  2. git apply vX.Y.Z.patch
  • 然后,构建 Vault:
  1. npm install
  2. # 阅读下面的注释(我们确实将它用于我们的 docker 构建)。
  3. # npm 审计修复
  4. npm run dist

注意:您可能会被要求运行 npm audit fix 来修复漏洞。这将自动尝试将软件包升级到较新版本,这可能不兼容并破坏网络保险库功能。 如果您知道自己在做什么,请自担风险使用它。顺便说一句,我们确实在我们自己的版本中使用了它!

最后将build文件夹的内容复制到目标文件夹中:

  • 如果你用 cargo run --release 运行,它是 vaultwarden/web-vault
  • 如果你直接运行编译好的二进制文件,它就在二进制文件的旁边,在 vaultwarden/target/release/web-vault 中。

配置

可用的配置选项记录在默认的 .env 文件中,可以通过取消对该文件中所需选项的注释或设置它们各自的环境变量来修改它们。有关可用的主要配置选项,请参阅此 wiki 的配置部分。

注意:环境变量会覆盖在 .env 文件中设置的值。

更多部署信息

如何为 sqlite 后端重新创建数据库模式(对于开发人员)

安装带有货物的diesel-cli:

  1. cargo install diesel_cli --no-default-features --features sqlite-bundled

确保数据库的正确路径在 .env 文件中。

如果要修改架构,请使用以下命令创建新迁移:

  1. diesel migration generate <name>

修改 *.sql 文件,确保在 down.sql 文件中恢复任何更改。

应用迁移并保存生成的模式,如下所示:

  1. diesel migration redo
  2. # 这一步应该在使用diesel-cli > 1.3.0 时自动完成
  3. # 柴油打印模式> src/db/sqlite/schema.rs

如何从 SQLite 后端迁移到 MySQL 后端(针对开发人员)

如果您想从 SQLite 迁移,请参阅使用 MySQL 后端

如何从 SQLite 后端迁移到 PostgreSQL 后端(针对开发人员)

如果要从 SQLite 迁移,请参阅使用 PostgreSQL 后端