# 使用 Gitea 做 Rust Cargo 的 Registries 记录使用 Gitea 做 Rust Cargo 的 Registries,实际私有的 Registries 也有 Alexandrie 实现,即使不使用 Registries ,也可以指定依赖的 Git 路径,可以指定 tag ,ref 等等,不过 Registries 确实跟方便一些,而 Gitea 的 Registries 也算好用。 ## Gitea 部署 Gitea 部署和配置可见官方文档。我这里贴出 docker-compose.yml ```yml version: "3" networks: gitea: external: false services: server: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "22:22" ``` ## Gitea 软件包 下面介绍使用 Gitea 做 Rust Cargo 的 Registries。首先创建一个组织,实际上在自己账户的库里操作也可以。创建完成后进入组织,打开设置-软件包-Cargo 注册中心索引 ,点击初始化索引。然后可以看到组织仓库里出现一个 _cargo-index 库。 个人电脑上配置 Registries,可以在全局配置文件 ~/.cargo/config 中写入,也可以在每个使用这个 Registries 的 Rust 项目根目录下创建 .cargo/config 写入。 ```toml [registries.gitea] index = "https://api.example.com/RustLib/_cargo-index.git" token = "Bearer 令牌" [net] git-fetch-with-cli = true ``` token 为 gitea 的令牌,然后在要上传到库 minilib1 目录下执行 ```bash cargo login --registry gitea # 登录 需要输入令牌 cargo publish # 上传软件包 # 全部支持命令 cargo publish cargo add cargo install cargo yank cargo unyank cargo search ``` 等命令,可以如果成功,可以在 组织-软件包 中找到刚刚 publish 的包。 下面使用这个库,创建一个项目,依赖这么写就行,: ```toml [dependencies] minilib1 = { version = "0.1.0", registry = "gitea" } ``` 在 main.rs 就可以正常使用这个库的函数了。 需要注意的是,组织和库都可以是私有。但是我有时报错 401 ,组织改为公开,然后改为私有就好使了,可能是 bug 也可能是我误操作。此外,经过实验,配置文件中的 启用登录访问限制 需要关闭才能生效(版本: 1.19.3 )。启用登录访问限制后,组织公开和项目公开即使有鉴权,也不能通过 cargo run 自动拉取,会出现 401。