6 个稳定版本

1.8.0 2024年7月30日
1.7.0 2024年7月23日
1.6.1 2024年7月18日
1.6.0 2024年7月17日
1.5.1 2024年7月15日

#15 in HTTP 服务器

Download history 80/week @ 2024-07-09 218/week @ 2024-07-16 126/week @ 2024-07-23 135/week @ 2024-07-30

559 每月下载量

MIT 许可证

765KB
7K SLoC

📦 Cratery

轻量级内置电池的私有 cargo 注册表,专为组织构建

Build Status Cratery Crates.io version Cratery Rust documentation Cratery dependency status docker

快速入门

要使用预构建的 Docker 镜像启动空注册表,获取最新的 docker-compose.yml 文件并启动它

git clone https://github.com/cenotelie/cratery
cd cratery
docker compose up -d

然后,连接到 https://127.0.0.1/。在默认配置中,必须使用 Google 账户。

第一个登录的用户将自动获得管理权限。他/她负责设置管理员团队。

连接后,可以通过访问 https://127.0.0.1/webapp/account.html 并点击“创建新令牌”按钮来获取用于 Cargo 的 CLI 令牌。令牌可以限制为只读访问,例如用于 CI。要发布 crates,必须获取具有写入访问权限的令牌。令牌的名称仅作为便利。创建时,将出现一个弹出窗口,其中包含有关如何为 Cargo 注册此令牌的信息。

功能

身份验证

默认情况下使用 OAuth 处理身份验证。只需连接您的组织提供商。在默认配置中,Google 已配置为提供商。这仅适用于演示目的。

管理

管理托管 crates 的所有者。

Screenshot of the admin panel for setting a crate's owner

文档生成

Cratery 会自动生成和提供已发布 crates 的文档。

Screenshot of a piece of documentation

依赖关系分析

Cratery 会自动扫描托管 crates 最新版本(每个主要版本)的依赖关系图。Cratery 会检测过时的直接依赖关系,并提供替代的最新版本号。Cratery 还会审计完整的依赖关系图,以查找受 RustSec 小组 发布的漏洞影响的直接或间接依赖关系。

当发现问题时,Cratery 会通过电子邮件向 crates 的所有者发送通知。还会在每个 crates 的页面上进行按需分析。

Screenshot of warning about outdated dependencies

Screenshot of warning about vulnerable dependencies

统计信息

Cratery 还会跟踪下载量,以提供有关您的 crates 使用情况的统计信息。

Screenshot of download statistics for a crate

配置

配置通过环境变量传递。有关所有值,请参阅docker-compose.yml

通用

  • REGISTRY_WEB_PUBLIC_URI:注册表可用的URI。
  • REGISTRY_WEB_COOKIE_SECRET:由cratery设置的私有cookie的秘密密钥,用于跟踪已连接的用户。

身份验证

cratery上使用OAuth进行身份验证,并通过REGISTRY_OAUTH_*环境变量进行配置。该docker-compose.yml文件包含使用Google作为身份验证提供者的基本配置。此配置仅允许在cratery实例上公开localhost进行评估和测试。必须更改此配置才能使用您自己的OAuth身份提供者。

  • REGISTRY_OAUTH_LOGIN_URI:尝试登录时重定向到的URI。
  • REGISTRY_OAUTH_CALLBACK_URI:用户在身份提供者成功登录后将被重定向到的cratery上的URI。
  • REGISTRY_OAUTH_TOKEN_URIcratery将连接到的URI以从身份提供者获取授权令牌。
  • REGISTRY_OAUTH_USERINFO_URIcratery将连接到的URI以从身份提供者获取用户信息(用户已登录时)。
  • REGISTRY_OAUTH_USERINFO_PATH_EMAIL:身份提供者作为用户信息返回的JSON blob中电子邮件字段的路径。
  • REGISTRY_OAUTH_USERINFO_PATH_FULLNAME:身份提供者作为用户信息返回的JSON blob中全名字段的路径。
  • REGISTRY_OAUTH_CLIENT_ID:连接到身份提供者时使用的客户端ID。
  • REGISTRY_OAUTH_CLIENT_SECRET:连接到身份提供者时使用的客户端密钥。
  • REGISTRY_OAUTH_CLIENT_SCOPE:重定向到身份提供者时请求的范围。

存储

cratery的持久化数据是

  • 一个sqlite数据库,
  • 索引git存储库,
  • 实际的crates包及其元数据,
  • 存储的crates生成的文档。

默认情况下,所有数据都存储在由REGISTRY_DATA_DIR环境变量指定的单个目录中。默认值是/data文件夹,预期将其挂载到docker容器中。

crates数据和它们生成的文档可以存储在S3上。此配置由以下配置控制

  • REGISTRY_STORAGE:存储在REGISTRY_DATA_DIR文件夹中的fs(默认)或存储在S3存储桶中的s3
  • REGISTRY_STORAGE_TIMEOUT:与存储交互时使用的超时时间(以毫秒为单位),默认为3000。
  • REGISTRY_S3_URI:S3服务的顶级域名。
  • REGISTRY_S3_REGION:区域的子域名。
  • REGISTRY_S3_SERVICE:可以留空;如果有,则为S3服务的子域名。
  • REGISTRY_S3_ACCESS_KEY:要使用的访问密钥。
  • REGISTRY_S3_SECRET_KEY:要使用的秘密密钥。
  • REGISTRY_S3_BUCKET:用于存储的S3存储桶。如果不存在,则将其创建。

S3 存储桶的域名如下所示进行插值(REGISTRY_S3_SERVICE 可以为空):{REGISTRY_S3_BUCKET}.{REGISTRY_S3_SERVICE}.{REGISTRY_S3_REGION}.{REGISTRY_S3_URI}

索引

索引可以通过 gitsparse 协议提供。两者默认都启用,但可以根据需要启用或禁用

  • REGISTRY_INDEX_PROTOCOL_GIT 默认为 true 以启用 git 的“智能”协议。任何其他值都会禁用它。
  • REGISTRY_INDEX_PROTOCOL_SPARSE 默认为 true 以启用 sparse 协议。任何其他值都会禁用它。

无论使用哪种协议,获取索引始终需要认证。

注册表的索引被管理为一个 Git 仓库。当 cratery 作为作者向此仓库提交时

  • REGISTRY_GIT_USER_NAME 是要使用的用户名,
  • REGISTRY_GIT_USER_EMAIL 是要使用的电子邮件。

可以使用以下方式将索引的 Git 仓库与外部托管的 Git 仓库同步

  • REGISTRY_GIT_REMOTE:要使用的远程 Git 仓库的 URI。它将在启动时克隆(如果已存在,则从中拉取更改)。
  • REGISTRY_GIT_REMOTE_SSH_KEY_FILENAME:用于认证远程主机的 SSH 密钥的路径和文件名。
  • REGISTRY_GIT_REMOTE_PUSH_CHANGES:如果设置为 true,则会自动将更改推送到远程仓库以保持远程同步。

文档生成

当生成存储的 crate 的文档时

  • REGISTRY_SELF_LOCAL_NAME 是 Cargo 注册表的名称。它应该与上传 crate 时使用的名称相匹配。

cratery 会自动将 docs.rs 链接到 crates.io 上的依赖项。使用 REGISTRY_WEB_PUBLIC_URI 值识别同一 cratery 实例上托管的 crate 的依赖项。

外部私有注册表,以便可以生成文档并将依赖项的文档链接到它们。这通过以下环境变量指定。 {index} 是第一个外部注册表的起始编号为 1

  • REGISTRY_EXTERNAL_{index}_NAME:Cargo 注册表的名称。
  • REGISTRY_EXTERNAL_{index}_INDEX:注册表索引的 URL
  • REGISTRY_EXTERNAL_{index}_DOCS:用于链接到该注册表上 crate 文档的 URL 前缀。
  • REGISTRY_EXTERNAL_{index}_LOGIN:Cargo 将用于从注册表获取 crate 的登录名。
  • REGISTRY_EXTERNAL_{index}_TOKEN:相关的令牌。

依赖关系分析

在执行依赖分析时,Cratery 将访问 crates.io 和其他外部注册表。

  • REGISTRY_DEPS_STALE_REGISTRY:本地关于外部注册表的数据被认为已过时,必须再次拉取的毫秒数。默认为 60000(1 分钟)。
  • REGISTRY_DEPS_STALE_ANALYSIS:保存的 crate 分析变得过时的分钟数。默认为 1 天。负数将禁用 crate 的后台分析。
  • REGISTRY_DEPS_NOTIFY_OUTDATED:是否在 crate 的某些依赖项变得过时时,通过电子邮件向其所有者发送通知,默认为 false。要激活,设置为 true
  • REGISTRY_DEPS_NOTIFY_CVES:是否在 crate 的依赖项中发现 CVE 时,通过电子邮件向其所有者发送通知,默认为 false。要激活,设置为 true
  • REGISTRY_EMAIL_SMTP_HOST:发送邮件的主机。
  • REGISTRY_EMAIL_SMTP_PORT:发送邮件的端口。
  • REGISTRY_EMAIL_SMTP_LOGIN:连接到 SMTP 主机的登录名。
  • REGISTRY_EMAIL_SMTP_PASSWORD:连接到 SMTP 主机的密码。
  • REGISTRY_EMAIL_SENDER:用于发送邮件的发送者地址。
  • REGISTRY_EMAIL_CC:用于始终 CC 的邮件地址。

贡献

欢迎贡献!

打开工单,提出问题或提交拉取请求。

许可证

本项目采用 MIT 许可证

依赖

~68MB
~1.5M SLoC