#cargo-registry #self-hosted #organization #server #command-line #index #palletizer

app palletizer-tools

托盘堆垛工具的 CLI 工具,一个自托管的 cargo 仓库

5 个版本

0.2.4 2021年11月30日
0.2.3 2021年10月5日
0.2.1 2021年9月12日
0.1.3 2021年8月30日
0.1.0 2021年5月17日

11#cargo-registry 中排名

每月 下载 32

BSD-2-Clause

50KB
807 行代码(不包括注释)

托盘堆垛

托盘堆垛是一个完全开源(BSD-2-clause)的自托管私有 Cargo 仓库。主要目标受众是小型组织。

它优先考虑简洁性而非可扩展性:您可以通过运行单个服务器应用程序来托管整个仓库。但是,它应该对大多数组织来说运行得相当顺畅,内存占用低,并且性能问题将受到重视。

当前功能

  • 从同一服务器托管您的 crate 数据和索引仓库。
  • 使用 Cargo 网络 API 发布和撤回 crate。
  • 使用 cargo search --registry ... 搜索 crate。
  • 网络服务器有多个监听套接字,每个套接字都有独立的(可选)TLS 配置。
  • 从命令行手动添加/删除/撤回/恢复 crate。

设置新的仓库

创建新仓库的过程相当简单。您可以使用来自 palletizer-tools 包的 palletizer 命令创建一个空的仓库。然后,您可以从 palletizer-server 包运行 palletizer-server 命令以使仓库上线。

初始化新的仓库

只需运行 palletizer init --url "https://example.com"。这将创建一个 palletizer.toml 文件,一个 index git 仓库和一个 crates 目录。仓库索引最终必须托管在 $URL/index,而 crate 在 $URL/crates。请参阅下一节以获取设置服务器的说明。

您可以使用额外的命令行选项进一步自定义仓库。您可以使用 --index-dir--crates-dir 选项更改索引仓库和 crate 目录的路径。

默认情况下,新注册表配置为接受来自 crates.io 的有依赖项的软件包。您可以通过添加 --no-crates-io 标志来禁用此功能,并可以使用 --allowed-registry 选项允许额外的注册表。您应该传递允许的注册表的索引的完整 URL。

设置服务器

要运行服务器,您首先需要创建一个服务器配置文件。

一个最小配置文件可以是与 palletizer init 创建的 palletizer.toml 同一目录中的 server.toml

[[listener]]
bind = "[::1]:8080"

然后可以通过运行 palletizer-server server.toml 来启动服务器。这将监听回环适配器上的 8080 端口上的连接。

您可以通过添加更多的 [[listener]] 部分,以配置任意数量的监听器。每个监听器都可以选择配置为 HTTPS。

[[listener]]
bind = "127.0.0.1:4333"
tls = {
   private_key = "/etc/letsencrypt/live/example.com/privkey.pem",
   certificate_chain = "/etc/letsencrypt/live/example.com/fullchain.pem",
}

服务器配置文件也可以与注册表本身分开。在这种情况下,您需要在服务器配置文件中配置注册表的路径。

registry = "/srv/my-little-registry"

[[listener]]
bind = "[::1]:8080"

请注意,配置文件中的所有相对路径都将相对于配置文件的文件夹本身进行解释,而不是相对于服务器的工作目录。

身份验证

目前,Palletizer 没有实现身份验证。API 服务器不会检查登录令牌,尽管 Cargo 仍然希望您指定一个。您可以使用任何随机的乱码作为令牌,服务器甚至都不会查看它。

当然,目的是实现安全身份验证,这样您可以安全地将您的注册表暴露给互联网,但目前的主要障碍是 Cargo。在编写本文时,它无法执行已验证的索引或软件包下载。登录令牌仅用于访问 Web API,但这对于托管可能敏感代码的私有注册表来说还不够。

在软件包下载可用身份验证之前,Palletizer 将不支持身份验证。这应该避免给您造成错误印象,即如果您仅配置身份验证,您的代码就是安全的。有关更多信息,请参阅 RFC #2719

好吧,但我真的很想实现身份验证

公平地说,这对于充满私有代码的私有注册表来说是有意义的。目前,您可以在 Web 服务器前放置一个代理(例如:nginx)来执行身份验证。但是,如果您想它与纯 Cargo 一起工作,您需要仔细选择您的身份验证机制。可能可行的一种方法是使用基于 IP 的身份验证来允许从某些网络访问。

您也可以直接将 Palletizer 服务器绑定到私有 VPN 地址,从而避免需要单独的代理服务器。如果您正在寻找一个既好又简单的 VPN,您可以看看 WireGuard

项目结构

该项目包括一个库、一个命令行工具和一个服务器应用程序。该库可用于实现 Palletizer 注册表的不同前端。它还由命令行工具和服务器应用程序用于实现实际的注册表管理。

命令行工具不会与运行中的服务器通信。它可以用于手动添加、删除、撤销和取消撤销注册表中的软件包。您需要直接访问注册表才能使用它。

服务器应用程序托管索引存储库、软件包数据和 Cargo Web API。您也可以决定为软件包数据和索引存储库使用专用服务器,并且仅将 Palletizer 服务器的 API 暴露给互联网(或您的 VPN)。

贡献

欢迎贡献。请随意在 GitHub 上打开问题或拉取请求。

依赖关系

~13-23MB
~415K SLoC