9 个版本

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.0.0 2020 年 11 月 7 日

#295数据库实现


用于 2 crate

BSD-2-Clause

38KB
664

托盘机

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

它更注重简洁而非可扩展性:您可以通过运行单个服务器应用程序来托管整个仓库。尽管如此,它应该对大多数组织来说运行得相当顺畅,并且内存占用很小,性能问题将得到认真对待。

当前功能

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

设置新仓库

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

初始化新仓库

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

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

默认情况下,新的注册表配置为接受来自 crates.io 的具有依赖关系的 crates。您可以通过添加 --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。在编写本文档时,它无法执行经过身份验证的索引或 crate 下载。登录令牌仅用于访问 Web API,但这对于托管可能敏感代码的私有注册表来说还不够。

在 crate 下载可进行身份验证之前,Palletizer 不会支持身份验证。这应该避免给人一种您只需配置身份验证,代码就是安全的错误印象。有关更多信息,请参阅 RFC #2719

好吧,但我确实需要身份验证

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

您还可以直接将分拣机服务器绑定到私有VPN地址,避免需要单独的代理服务器。如果您正在寻找一个简单且好的VPN,可以看看WireGuard

项目结构

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

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

服务器应用程序托管索引存储库、crate数据和Cargo Web API。您也可以决定为crate数据和索引存储库使用专用服务器,只将分拣机服务器的API暴露给互联网(或您的VPN)。

贡献

贡献总是受欢迎的。请随意在GitHub上创建问题或拉取请求。

依赖项

~12–21MB
~400K SLoC