Step 1:服务端创建Git仓库

私有仓库的crates目录使用Git进行版本管理:

$ mkdir mycrates-io
$ cd mycrates-io
$ git init
$ cd ..
$ git clone --bare mycrates-io mycrates-io.git

Step 2:服务端部署Alexandrie服务

Alexandrie是Rust语言编写的私有仓库管理服务器,当前版本0.1.0。官方提供了份花里胡哨的安装脚本,事实上也就执行了以下几步。

Step 2.1:构建Alexandrie

$ cd alexandrie
$ cargo build -p alexandrie

编译器:rustc 1.46.0

编到migrations_macros模块可能会报/usr/bin/ld: cannot find -lsqlite3,解决方法:

$ sudo apt install sqlite3
$ sudo apt install libsqlite3-dev

Step 2.2:创建仓库目录

在alexandrie目录中创建存放crates的文件夹:

$ crate-storage

Step 2.3:配置仓库目录

在alexandrie目录中拉一份mycrates-io.git:

$ git clone path/to/mycrates-io.git crate-index

在crate-index中添加配置文件config.json:

{"dl": "http://<Alexandrie_IP>:3000/api/v1/crates/{crate}/{version}/download","api": "http://$(hostname):3000","allowed-registries": ["https://github.com/rust-lang/crates.io-index"]
}

注意:官方脚本中这里的<Alexandrie_IP>字段用的是$(hostname),实践证明可能会导致error: [6] Couldn't resolve host name,查错查了好久。

提交:

$ git add config.json;
$ git commit -m 'Added `config.json`';
$ git push -u origin master;

Step 2.4:运行Alexandrie

在alexandrie目录中运行:

$ ./target/debug/alexandrie -c alexandrie.toml
Sep 12 16:48:21.043 INFO running database migrations, version: 0.1.0
Sep 12 16:48:21.048 INFO setting up request logger middleware, version: 0.1.0
Sep 12 16:48:21.050 INFO setting up cookie middleware, version: 0.1.0
Sep 12 16:48:21.052 INFO setting up authentication middleware, version: 0.1.0
Sep 12 16:48:21.055 INFO mounting '/', version: 0.1.0
Sep 12 16:48:21.059 INFO mounting '/me', version: 0.1.0
Sep 12 16:48:21.061 INFO mounting '/search', version: 0.1.0
Sep 12 16:48:21.064 INFO mounting '/most-downloaded', version: 0.1.0
Sep 12 16:48:21.065 INFO mounting '/last-updated', version: 0.1.0
Sep 12 16:48:21.067 INFO mounting '/crates/:crate', version: 0.1.0
Sep 12 16:48:21.069 INFO mounting '/account/login', version: 0.1.0
Sep 12 16:48:21.071 INFO mounting '/account/logout', version: 0.1.0
Sep 12 16:48:21.073 INFO mounting '/account/register', version: 0.1.0
Sep 12 16:48:21.075 INFO mounting '/account/manage', version: 0.1.0
Sep 12 16:48:21.081 INFO mounting '/account/manage/password', version: 0.1.0
Sep 12 16:48:21.083 INFO mounting '/account/manage/tokens', version: 0.1.0
Sep 12 16:48:21.084 INFO mounting '/account/manage/tokens/:token-id/revoke', version: 0.1.0
Sep 12 16:48:21.086 INFO mounting '/assets/*path', version: 0.1.0
Sep 12 16:48:21.088 INFO mounting '/api/v1/account/register', version: 0.1.0
Sep 12 16:48:21.089 INFO mounting '/api/v1/account/login', version: 0.1.0
Sep 12 16:48:21.091 INFO mounting '/api/v1/account/tokens', version: 0.1.0
Sep 12 16:48:21.093 INFO mounting '/api/v1/account/tokens/:name', version: 0.1.0
Sep 12 16:48:21.094 INFO mounting '/api/v1/categories', version: 0.1.0
Sep 12 16:48:21.101 INFO mounting '/api/v1/crates', version: 0.1.0
Sep 12 16:48:21.102 INFO mounting '/api/v1/crates/new', version: 0.1.0
Sep 12 16:48:21.104 INFO mounting '/api/v1/crates/suggest', version: 0.1.0
Sep 12 16:48:21.107 INFO mounting '/api/v1/crates/:name', version: 0.1.0
Sep 12 16:48:21.108 INFO mounting '/api/v1/crates/:name/owners', version: 0.1.0
Sep 12 16:48:21.110 INFO mounting '/api/v1/crates/:name/:version/yank', version: 0.1.0
Sep 12 16:48:21.112 INFO mounting '/api/v1/crates/:name/:version/unyank', version: 0.1.0
Sep 12 16:48:21.114 INFO mounting '/api/v1/crates/:name/:version/download', version: 0.1.0
Sep 12 16:48:21.119 INFO listening on '127.0.0.1:3000', version: 0.1.0
Sep 12 16:48:21.122 INFO Server listening on http://127.0.0.1:3000, version: 0.1.0

为了让局域网中的其他机器访问到,可能需要将alexandrie.toml中配置的回环地址改成固定IP。

输出信息显示Alexandrie在3000端口监听请求,但防火墙可能会将其禁用,使用以下步骤依次完成查看端口状态、开启端口、重启防火墙、确认端口状态:

$ sudo firewall-cmd --query-port=3000/tcp
no
$ sudo firewall-cmd --permanent --add-port=3000/tcp
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --query-port=3000/tcp
yes

后面如需关闭端口:

$ sudo firewall-cmd --permanent --remove-port=3000/tcp

Step 3:客户端注册账户

上传crates之前需注册一个Alexandrie账户,使用浏览器访问http://<Alexandrie_IP>:3000进行注册。有趣的是,密码似乎只能是十六进制数,因为alexandrie/src/frontend/account/register.rs是这么处理的:

//? Decode hex-encoded password hash.let decoded_password = match hex::decode(form.password.as_bytes()) {Ok(passwd) => passwd,Err(_) => {let error_msg = String::from("password/salt decoding issue.");req.set_flash_message(FlashMessage::from_json(&error_msg)?);return Ok(utils::response::redirect("/account/register"));}};

注册之后进入http://<Alexandrie_IP>:3000/account/manage页面,点击「Create token」获得token。

Step 4:客户端配置私有仓库

默认情况下,cargo访问的crates仓库目录是https://github.com/rust-lang/crates.io-index,我们需要在~/.cargo/config中将其替换为自己的私有仓库:

[source.crates-io]
replace-with = 'mycrates-io'
[source.mycrates-io]
registry = "ssh://<USER>:<PASSWORD>@<Alexandrie_IP>/path/to/mycrates-io.git"

注意:一个是把服务端密码放进去,二个是IP后面的:改成/

Step 5:客户端使用

登陆

$ cargo login <TOKEN>

cargo会自动将token保存至~/.cargo/credential

发布

$ cargo publish

由于Cargo仓库被设计成永久保存,发布上去的crate只能yank,不能删除,无法重新发布同版本的crate,这意味着一旦传错,只能在服务端删库重来:

$ rm alexandrie.db

参考资料

  • Cargo Alternative Registries
  • Alexandrie
  • Alexandrie Installation script
  • Rust crates私有化部署指南

2020年9月11日、14日 无锡


http://www.taodudu.cc/news/show-2849295.html

相关文章:

  • Ubuntu桌面不见了,桌面找回
  • 联想笔记本桌面计算机不见了,桌面上的图标不见了怎么办,教您桌面上的图标不见了怎么办...
  • linux桌面图标恢复,恢复Linux桌面下方面板上显示最小化的图标的方法
  • 计算机恢复桌面,电脑桌面及桌面图标消失不见怎么找回?
  • 桌面文件突然不见了怎么恢复?
  • 桌面文件夹不见了怎么恢复?4招教你找回消失的文件夹
  • 手机计算机桌面图标恢复,三种方法快速找回桌面图标(附电脑文件恢复教程)...
  • 电脑桌面文件不见了怎么恢复?
  • 计算机组织桌面不见了,教您如果计算机桌面图标不见了怎么办
  • 计算机的桌面不见了,桌面上的图标不见了怎么办-电脑桌面图标不见了电脑屏幕桌面不见了,怎么办? 爱问知识人...
  • 如何恢复计算机手机桌面图标,桌面图标不见了怎如何恢复
  • 计算机如何恢复桌面,如何恢复计算机桌面图标不见了
  • 互动微剧《明星大侦探》打造沉浸式探案体验
  • 计算机组成原理ACC MQ,计算机组成原理讲案第一章.ppt
  • 餐饮行业如何做好微营销
  • 马云收购士兰微_根本停不下来!又一家国内半导体公司将被吞并!
  • 第一章 微服务简介
  • CC微校园小程序(云开发)设计方案
  • 计算机组成原理第一章作业,计算机组成原理第一章习题答案(作业).doc
  • ⼤数据平台基础架构及解决⽅案
  • 认识计算机微课导学单,微课“任务单”与“导学案”之比较
  • 说说北大软微那些事儿
  • 电子设计大赛-微电网模拟系统
  • 188数码管驱动案方案
  • 中国一票否决Arm被购案的六个理由
  • 二元函数可微与偏导数_二元函数的连续、偏导数、可微之间的关系-推荐下载...
  • 计算机一级C类试题及答案,计算机一级c类试题(2)
  • Lattice并购案我国FPGA发展路径
  • 微商如何通过自媒体平台进行引流
  • 微商城如何借势618微信营销?5分钟完成活动策划案

Cargo 私有仓库部署相关推荐

  1. Docker容器之harbor私有仓库部署与管理

    Docker容器之harbor私有仓库部署与管理 前言 一.Harbor概述 二.Harbor的特性 三.Harbor的构成 四.Harbor私有仓库搭建 (1)安装docker-compose (2 ...

  2. Docker harbor私有仓库部署与管理

    Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...

  3. dockerfile构建一个(python+flask+html)镜像 + 上传到阿里云私有仓库 + 部署到k8s---全过程

    前言 因为之前根据一些网上的教程一个个部分实践过整个部署流程,但都是根据现有的程序/ymal文件等进行创建部署,未能根据自己特定的项目进行部署.因此,这篇博文,打算完整部署一个自己编写的python+ ...

  4. Docker 私有仓库部署和管理 | Harbor 概述 - 核心组件 - 架构拓扑 | Harbor 构建 Docker 私有仓库实战(理论+实操,超详细!)

    文章目录 一.Docker Harbor 概述 1.Harbor 简介 2.Harbor 的优势 二.Harbor 的核心组件 1.Proxy 2.Registry 3.Core services 4 ...

  5. k8s-kubeadm和Harbor私有仓库部署

    部署k8s-kubeadm 文章目录 环境准备 需求: 环境部署 部署K8S集群 //设定kubectl //所有节点部署网络插件flannel //测试 pod 资源创建 部署 Dashboard ...

  6. Docker Registry部署镜像私有仓库及鉴权认证

    文章目录 一.Docker Registry是什么? 二.Docker Registry部署私有仓库 2.1.Docker Registry安装 2.2.Docker Registry配置 2.3.启 ...

  7. 实战详解Maven部署(deploy)jar到私有仓库Nexus及如何引入私仓jar包

    1 缘起 本来只打算测试jar包部署(deploy)到私仓, 可是,发现部署后与预期有些不一样,就又查了些资料, 实际验证了一下对应的功能, 比如,部署jar包区分快照版和发行版, 部署时需要使用不同 ...

  8. 部署docker-consul群集,Harbor构建Docker私有仓库

    文章目录 部署docker-consul群集,Harbor构建Docker私有仓库 了解Harvor 案例概述 Docker consul服务了解 部署Harbor服务过程 不是本地上传镜像操作 在用 ...

  9. 87: 企业监控系统部署 、 搭建Harbor私有仓库 、 总结和答疑

    Top NSD PROJECT3 DAY04 案例1:部署zabbix监控服务器 案例2:制作Zabbix客户端RPM软件包 案例3.Zabbix自动化监控 案例4.自定义Zabbix监控项目 案例5 ...

最新文章

  1. poj3159(差分约束)
  2. 方法革新:8个宏基因组分析新工具 | 热心肠日报
  3. ace nonblock
  4. php 安全mysql,关于php:我从mysql注入安全吗?
  5. android EditText获取光标位置并安插字符删除字符
  6. “数学不好,干啥都不行!”高级开发:方向不对,努力也白费!
  7. VB从程序中生成Exe文件
  8. vue 打包后本地先自己启动服务 anywhere 非常好用
  9. 2021年朔州市副高考试成绩查询,2021朔州市第二中学校教师成绩查询入口:http://www.shuozhou.gov.cn/ztjs/rlzy/rsks/...
  10. nginx 一般配置实例 静态页面
  11. 数据计算 统计学案例_PSG三维数据采集软件在土方量计算中的应用案例
  12. VPC下访问FTP的问题
  13. [转载]JXTA Platform JAVA参考实现源代码分析系列文章(2)
  14. Qt Design Studio 1.4正式发布
  15. UITextField格式化银行卡号码解决方案
  16. MessageSolution企业邮件归档管理系统EEA信息泄露漏洞(cnvd-2021-10543)
  17. 消除游戏(力扣 390)Java
  18. mydock 怎么卸载_MyDock(桌面dock栏)下载_MyDock(桌面dock栏) 版本:v4.8.8.9官方版_魅蓝下载...
  19. mfc编程 孙鑫_以前的一些mfc的笔记(关于孙鑫的那本书)
  20. JavaWeb前端技术总结

热门文章

  1. No Spring WebApplicationInitializer types detected on classpath
  2. 解读7种水质对咖啡口感的影响
  3. uikit响应式对应屏幕大小
  4. Centos下docker/docker-compose离线安装
  5. python 日志输出为json格式文件_Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)...
  6. 注册表:更改键盘扫描码映射
  7. 咪咕音乐的下载音乐存储路径(MAC)
  8. MarkDown语法详解(Typora编辑器)
  9. Notepad++的第三方插件介绍中文翻译
  10. (翻译)稀缺模式(Scarcity)