Nexus!最受欢迎的仓库管理软件

背景

有时候项目有保密要求,开发环境不能联网,不能从外部下载需要的包;或者团队自己开发了各种包仅内部使用,需要放在私有仓库里。这时需要一个私有的包管理工具及仓库,方案有很多种。但是Nexus3部署最简单,功能也强大。

前提:安装和启动Nexus3

官网下载nexus3,解压,CMD窗口进入安装目录,
cd H:\work\nexus-3.28.1-01-win64\nexus-3.28.1-01\bin
nexus.exe /run

等待启动完,然后浏览器进入:localhost:80

默认端口是80,可以修改IP和端口。

docker安装参考:

docker run -d --user root -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -v /opt/nexus-data:/nexus-data --name nexus3 sonatype/nexus3:3.14.0

#映射端口对应的用途:

8081:可以通过http访问nexus应用

8082:docker(hosted)私有仓库,可以pull和push

8083:docker(proxy)代理远程仓库,只能pull

8084:docker(group)私有仓库和代理的组,只能pull

#使用参数 -v 建立宿主机与Docker目录映射关系,/nexus-data:docker里存nexus数据目录,所以将数据目录存放到宿主机/opt/nexus-data

一、Nexus介绍

Sonatype Nexus Repository 通常被称作为Nexus, 是由 Sonatype 出品的目前世界上最流行的仓库管理软件。它在仓库管理方面的地位,和Git在源代码管理的地位是类似的。

仓库管理的主要的目的,是存储源代码编译之后的成果物,并对其进行版本管理,以便为开发提供稳定的依赖来源。”

很多第三方会提供官方仓库,不过大部分的公司都会选择自建仓库。主要是为了解决以下开发痛点:

  1. 需要存储和管理私有包
  2. 官方仓库访问缓慢且占用外部带宽
  3. 官方仓库的包可能随着官方升级和维护
  4. 而删除或更换地址

Nexus目前提供两个版本,Nexus2和Nexus3。
Nexus2主要只用来管理maven,而Nexus3默认支持了maven、docker、npm、yum、apt等多种仓库的配置。
今天我们主要以Nexus3为例介绍。

官方文档:https://help.sonatype.com/docs

二、仓库类型

仓库按照类型区分,可以分为三种:代理仓库(Proxy)、本地仓库(Hosted)、仓库组(Group)。

项目具体说明
hosted本地存储。像官方仓库一样提供本地私库功能。用户可以 deploy 到 hosted 中,也可以手工上传构件到 hosted 里,在 central repository 是获取不到的,就需要手工上传到hosted里。
proxy提供代理其它仓库的类型。远程仓库的代理,当用户向这个仓库请求一个 artifact,他会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户。
group组类型,能够组合多个仓库为一个地址提供服务。仓库组,将上述多个仓库聚合,对用户暴露统一的地址。

2.1 代理仓库(Proxy)

当PC访问中央仓库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。

这样的就可以大大节约外部宽带,只要其中一个人从中央仓库下来了,以后大家都是从Nexus仓库上进行下载。

2.2 本地仓库(Hosted)

用于将第三方的包或者我们自己的包,放到自己的Nexus仓库上。

2.3 仓库组(Group)

能把多个仓库合成一个仓库来使用。把上几步创建的代理仓库和本地仓库都加入到同一仓库组中,这样可以让仓库同时支持代理和自己上传。

三、Nexus的存储:Blob Stores

3.1 Blob Stores属性

blob stores可以被一个或者多个仓库组使用。默认的Blob stores是基于文件系统的。可以简单的理解为一个文件夹。Blob Stores参数如下:

  • Name:Blob Store的名称,唯一。
    the name of the blob store as displayed in the repository administration
  • Type:类型,一般为File
    the type of the blob store backend; currently only File is available representing a file system-based storage
  • Blob count:Blob数目
    the number of blobs currently stored
  • Total size:现有文件夹的大小
    the size of the blob store
  • Available space:可用空间
    the overall space available for the blob store

3.2 新建Blob Store

Type默认File、Name唯一、Path选择已有的文件夹。如果需要存储到指定的路径,请新建目录。

四、配置Docker仓库

4.1 创建一个hosted类型的docker仓库

点击Repository下面的 Repositories – Create repository – docker(hosted)

  • Name:定义一个名称docker-local
  • Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。
  • Repository Connectors:包含HTTP和HTTPS两种类型的port。这里需要注意的是,此处的HTTP端口(此处的值为8082)很重要,后续拉取和推送进行是使用此端口进行的,而不是nexus本身对外暴露的端口。
  • Allow anonymous docker pull: 不勾选。这样的话就不允许匿名访问了,执行docker pull或 docker push之前,都要先登录:docker login
  • Docker Registry API Support: Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。
  • Storage: Blob存储/工作空间,用来存储上传到私服的等资源。 在Repository>Blob Stores新建一个。

4.2 验证使用

4.2.1 安装docker

准备一台的主机,安装好docker。

4.2.2 修改docker配置

在/etc/docker/daemon.json文件中添加下面的内容:
命令参考:cat /etc/docker/daemon.json。 如果文件不存在则创建一个:vim /etc/docker/daemon.json

注意:这里的xxx.xxx.xxx.xxx:xxxx指的是nexus平台的IP:docker私有仓库配置的HTTP host, 例如:192.168.100.129:8083


{

    "insecure-registries":["xxx.xxx.xxx.xxx:xxxx"]

}

重载配置文件以及重启docker,使得配置生效。

systemctl daemon-reload
systemctl restart docker

4.2.3 登录仓库

docker login -u 用户名 -p 密码 xxx.xxx.xxx.xxx:xxxx
# 注意这里的端口是配置仓库时选择的端口号, 我配置仓库时HTTP端口是8082。

注意:登录时,需要提供用户名和密码。认证的信息会被保存在~/.docker/config.json文件,在后续与私有镜像仓库交互时就可以被重用,而不需要每次都进行登录认证。

4.2.4 上传镜像

这里是将本地的镜像上传到私有仓库。可以使用命令:docker images查看本地拥有的镜像及镜像标签。

# 注意这里的端口是配置仓库时选择的端口号, 我配置仓库时HTTP端口是8082。
docker tag 本地镜像名称:镜像标签 xxx.xxx.xxx.xxx:xxxx/推送到私服的镜像名称:镜像标签
docker push xxx.xxx.xxx.xxx:xxxx/推送到私服的镜像名称:镜像标签

4.2.5 拉取镜像

# 注意这里的端口是配置仓库时选择的端口号, 我配置仓库时HTTP端口是8082。
docker pull xxx.xxx.xxx.xxx:xxxx/私服的镜像名称:镜像标签 

4.2.6 搜索镜像
# 注意这里的端口是配置仓库时选择的端口号, 我配置仓库时HTTP端口是8082。
docker search xxx.xxx.xxx.xxx:xxxx/镜像名称关键字

五、配置Python仓库

5.1 创建一个hosted类型的python仓库

点击Repository下面的 Repositories – Create repository – pypi(hosted)

  • Name:定义一个名称local-pypi
  • Storage: Blob存储/工作空间,用来存储上传到私服的等资源。 在Repository>Blob Stores新建一个。
  • Hosted: 部署策略。可选:允许重新部署、禁用重新部署、只读

5.2 验证使用

5.2.1 指定配置

1)新建一台环境干净的主机,安装好Python的pip环境。

2)然后通过命令行随便安装一个包,安装的时候,将代理指向我们的私服来。这个地方遇到了两个坑,这里用两个注意来进行提醒。

注意:在指定刚刚配置的私服时,需要在统一对外的地址最后加上一个simple。例如复制的本地仓库地址是:http://xxx.xxx.xxx.xxx:xxxx/repository/test-pypi/, 我们在实际使用的时候需要用:http://xxx.xxx.xxx.xxx:xxxx/repository/test-pypi/simple

注意: 在第一次进行安装测试的时候,一定要指定测试包的版本,否则可能会报如下错误:

ERROR: Could not find a version that satisfies the requirement execnet>=1.1 (from pytest-xdist) (from versions: none)
ERROR: No matching distribution found for execnet>=1.1

3)下载包
参考命令:pip install --trusted-host xxx.xxx.xxx.xxx -i http://xxx.xxx.xxx.xxx:xxxx/repository/test-pypi/simple pytest-xdist

5.2.2 全局配置

通过添加全局配置,就不需要每次执行编译的时候指定私服地址了:

  • windows系统
    1) 找到 pip 的配置文件,一般在 C:\Users\你的用户名\AppData\Roaming\pip\pip.ini(如果没有则新建一个文件夹 pip,并在其中新建一个文件 pip.ini)。

2) 打开 pip.ini 文件,在文件中添加如下内容:

[global]
index-url = http://xxx.xxx.xxx.xxx:xxxx/repository/local-pypi/simple   # nexus私有仓库的地址
[install]
trusted-host=xxx.xxx.xxx.xxx

3) 保存文件并退出。

  • linux系统
    1)新建一个.pip目录:mkdir ~/.pip
    2) 新建一个pip.conf文件,并且写入内容保存
cat > ~/.pip/pip.conf << EOF
[global]
timeout = 60
trusted-host = xxx.xxx.xxx.xxx
index-url = http://xxx.xxx.xxx.xxx:xxxx/repository/local-pypi/simple   # nexus私有仓库的地址
EOF

保存之后,就可以直接使用pip命令安装,不需要指定pip源。例如:pip install pytest-xdist

六、配置npm仓库

6.1 创建一个hosted类型的npm仓库

点击Repository下面的 Repositories – Create repository – npm(hosted)

  • Name:定义一个名npm-pypi
  • Storage: Blob存储/工作空间,用来存储上传到私服的等资源。 在Repository>Blob Stores新建一个。
  • Hosted: 部署策略。可选:允许重新部署、禁用重新部署、只读

6.2 验证使用

6.2.1 安装好node环境

准备好一台主机,在node官网下载node.js进行安装。

如下图所示是已经安装成功了:

6.2.2 创建项目

在指定目录下执行命令:npm init -y
如果本地已经有项目了,可以跳过该步骤。

6.2.3 安装依赖

注意:如果已经有依赖包文件,可以跳过该步骤。

我们可以使用如下命令安装依赖:npm install 依赖包名称, 例如:npm install chart.js

将package.json 中的依赖 chart.js 进行下载。

  • 打开 package-lock.json 文件,找到 dependencies 属性,将其下的所有依赖包依赖包,进行下载。
  • 复制每个插件 resolved 属性后的链接到浏览器进行下载。
6.2.4 上传依赖

将上述下载的.tgz 包,在nexus上传,上传后如下图所示:

6.2.5 测试npm install

我们已经将npm依赖包上传到私库了, 我们需要测试一下是否能够成功安装。

  • 删除测试项目的 node_modules。

  • 创建 .npmrc 文件,指定下载路径。(这个仅在当前目录下生效,不更改全局的npm源)
    注意:这里的register地址就是nexus对应私有仓库的地址。

  • 打开终端,执行 npm install,成功!
    注意:该命令会安装npm源里面的所有依赖。

6.2.6 安装指定依赖包

npm install 依赖包名称

6.2.6.7 推送本地包到私有仓库

前提条件:nexus需要做如下配置

假如我们有一个项目想推送到nexus私有仓库,我们需要在package.json文件配置如下:

{
  ......,
  "publishConfig": {
    "registry": "http://xxx.xxx.xxx.xxx:xxxx/repository/node_local/"  # 注意:这里的register地址就是nexus对应私有仓库的地址。
  }
}

之后,我们可以登录,然后发布项目。

# 配置npm源地址,配置为nexus私有仓库地址
npm config set registry http://xxx.xxx.xxx.xxx:xxxx/repository/xxxx/

# 向npm注册表添加用户, 用户名和密码是nexus的登录的用户名和密码,邮箱可以随意填写
npm adduser

# 推送本地包到私有仓库
npm publish

七、配置maven仓库

7.1 创建一个hosted类型的maven2仓库

点击Repository下面的 Repositories – Create repository – maven2(hosted)

  • Name:定义一个名mavel-local
  • Online: 勾选。这个开关可以设置这个maven repo是在线还是离线。
  • Maven2:这里有三种方式,Releases、Snapshot、Mixed。Releases: 一般是已经发布的Jar包。Snapshot: 未发布的版本。Mixed:混合的。
  • Storage: Blob存储/工作空间,用来存储上传到私服的等资源。 在Repository>Blob Stores新建一个。
  • Hosted: 部署策略。可选:允许重新部署、禁用重新部署、只读

7.2 验证使用

使用起来其实非常简单,就是在测试机器上安装maven工具,然后再其配置当中,将地址指向我们的私服地址,然后编译项目,这个时候就会通过私服来拉取jar包了,以后再编译的时候,就可以直接从本地私服拉取了。

7.2.1 测试主机安装jdk

7.2.2 测试主机安装maven

以下以windows系统为例:
1)maven下载地址:https://maven.apache.org/download.cgi。 选择对应系统的maven版本进行下载。

2)解压maven安装包

maven安装包下载之后,对其进行解压。

3)配置环境变量
我们使用的很多开发工具,比如jdk、tomcat等,都是需要配置环境变量的,maven也不例外。
我们在系统环境变量中,新建一个MAVEN_HOME的系统变量名称,值是maven文件夹路径。

path系统变量中引用MAVEN_HOME变量,指向MAVEN_HOME中的bin目录。

4)测试maven是否配置完毕
输入mvn -v命令,如果出现maven版本号,就表明安装成功。

5)配置本地仓库路径
更改maven/conf/settings.xmllocalRepository

7.2.3 更改maven的配置

更改maven/conf/settings.xml, 将项目编译依赖地址指向改成私服的配置。

    <!--私服配置-->
	<mirror>  
        <id>nexus</id>  
        <name>nexus repository</name>  
        <url>http://xxx.xxx.xxx.xxx:xxxx/repository/maven2_local/</url>  
        <mirrorOf>external:local-nexus3</mirrorOf>  
 </mirror>  

    <!--nexus3-->	
	<profile>
	
		<id>nexus3</id>
		<repositories>
			<repository>
				<id>local-nexus3</id>
				<url>http://xxx.xxx.xxx.xxx:xxxx/repository/maven2_local/</url> 
			</repository>
		</repositories>
	
	</profile>

    <activeProfiles>
        <activeProfile>nexus3</activeProfile>
    </activeProfiles>

7.2.4 准备一个jar包

如果没有jar包,我们可以去这个地址:https://mvnrepository.com/ 下载一个。

首先搜索想要下载的jar,选择一个想要的版本

点击 view all,下载对应的jar,如下

7.2.4 上传jar包到私服

如下图所示已经上传成功了

7.2.5 在项目中实际使用

如果我们需要一个测试项目,可以在如下地址下载一个:https://start.spring.io/

在nexus私有仓库中,找到maven的jar包,复制其maven坐标

将复制的maven坐标,粘贴到pom.xml文件中。

进入项目,在项目下输入命令:mvn install -e即可构建项目并安装项目依赖。

八、配置raw仓库

raw 可以理解为普通类型的文件存储,就相对于一块存储,可以往里面传入任何的文件包。

8.1 创建一个hosted类型的raw仓库

点击Repository下面的 Repositories – Create repository – raw(hosted)

  • Name:定义一个名raw-local
  • Online: 勾选。这个开关可以设置这个repo是在线还是离线。
  • Storage: Blob存储/工作空间,用来存储上传到私服的等资源。 在Repository>Blob Stores新建一个。
  • Hosted: 部署策略。可选:允许重新部署、禁用重新部署、只读

8.2 验证使用

我们可以直接复制nexus的raw私有仓库的地址,拼接上传的路径,下载对应的包。

如下所示已经下载成功了。

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nexus-aliyun是指云计算服务提供商阿里云(Alibaba Cloud)的Nexus产品。Nexus是阿里云在云原生开发环境下提供的一套可靠、高效的软件仓库管理服务。Nexus-aliyun可以帮助开发者存储和管理软件包,提供私有仓库托管,使开发人员能够更方便地进行包管理和部署操作。 Nexus-aliyun具有以下几个主要的优势: 1. 可靠性:Nexus-aliyun基于阿里云的可靠、稳定的云计算基础设施提供服务,具备高可用性和数据可靠性,能够满足各种规模的企业应用需求。 2. 强大的安全性:Nexus-aliyun支持用户自定义访问控制策略,可以对软件仓库进行权限管理和访问控制,确保软件包的安全性和私密性。 3. 灵活的部署方式:Nexus-aliyun可以灵活部署在公共云、私有云或混合云环境中,适用于各种应用场景。同时,Nexus-aliyun还提供了丰富的API接口,可以与其他开发工具和CI/CD流水线进行集成,实现自动化的软件包管理和部署。 4. 丰富的功能:Nexus-aliyun提供了丰富的软件仓库管理功能,包括仓库托管、包上传、下载、搜索等功能,还支持多种软件包管理格式,例如Maven、Docker等,满足不同开发语言和应用类型的需求。 总之,Nexus-aliyun是阿里云提供的一款可靠、安全、灵活的软件仓库管理服务,能够帮助开发者更高效地管理和部署软件包,提升开发效率和应用可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值