Nexus 部署使用
*Welcome:**欢迎界面**Search:**搜索界面,可以根据自己的需求搜索想要的构件是否存在**Browse:**浏览界面,列表展示配置的所有仓库,点击某一仓库记录的时候,可以浏览该仓库中拥有的构建。**Upload:**上传界面,主要用来将自己的 jar包 上传到私服上的 Maven 仓库,也可以将 nuget 构件上传到私服上的 nuget 库。
1. 简介
Nexus是Maven仓库管理器,也可以叫Maven的私服,是私服的一种。
Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库。
中央仓库是maven默认的远程仓库。
本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。
为什么我们要安装Nexus呢?
从项目实际开发来看:
- 一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。
- 为了节省带宽和时间。在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库及第三方构件。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,即使暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。
参考文档:
https://blog.csdn.net/liusong0605/article/details/25654811
2. 部署安装
2.1 docker-compose部署
2.1.1 设置文件目录
在 /opt/ 下创建 docker-Nexus 目录。
并在 docker-Nexus 创建 nexus-data 目录,并赋权 chmod 777 nexus-data
2.1.2 编写 docker-compose.yml文件
vim docker-compose.yml
version: "3" #版本号
services: #启动的服务
nexus:
restart: always #重启策略
image: sonatype/nexus3 #镜像版本
container_name: nexus #定义容器名
privileged: true #定义容器特权
user: root
ports: #定义端口
- 8081:8081
volumes: #定义数据持久化挂载
- /opt/docker-Nexus/nexus-data:/nexus-data
2.2.3 启动
docker-compoes up -d
启动成功
2.2.4 登录浏览器查看
浏览器输入 ip+8081
2.2.5 登录并设置
进入到容器中,查看登录的初始密码docker exec -it -u root nexus /bin/bash
find / -name "admin.password"
cat /nexus-data/admin.password
在右上角点击登录,输入用户名 admin 和初始密码,即可登录成功。
登录后按系统要求重新设置密码。
设置其他账户登录权限:选择禁用匿名访问。
至此可以正常使用 nexus。
2.2 安装包部署
部署环境准备:
提前安装好 JDK 和 Maven。sudo apt install openjdk-8-jdk
sudo apt install maven
在 /opt 下创建 nexus目录,并将下载好的安装包放进来。
2.2.1 解压安装包
解压tar -xvf nexus-2.11.4-01-bundle.tar.gz
解压后会得到两个目录nexus-2.11.4-01/
:用于实现 nexus 功能sonatype-work/
:nexus 运行时数据(如日志,pid等)存储目录
2.2.2 修改配置文件
为避免与其他服务端口冲突,修改nexus的运行端口为:18080
cd 到 /opt/nexus/nexus-2.11.4-01/conf/ 目录下vim nexus.properties
将端口改为18080。
cd 到 /opt/nexus/nexus-2.11.4-01/bin 目录下vim nexus
将 user 改为 root。
2.2.3 启动
cd 到 nexus-2.11.4-01目录
- 后台(守护进程)启动
./bin/nexus start
- 前台启动
./bin/nexus run
2.2.4 登录浏览器查看
ip+18080/nexus/
注意:一定要在端口号后加上 /nexus/,否则会出现 HTTP ERROR: 404 Not Found 报错
登录
用户名 admin,默认密码 admin123
3. 基础使用(nexus3版本)
3.1 Nexus常用命令如下:
命令 | 描述 |
---|---|
run | 前台启动Nexus服务 |
start | 后台(守护进程)启动Nexus服务 |
restart | 重启Nexus服务 |
stop | 停止Nexus服务 |
force-reload | 重新加载配置文件 |
status | 查看Nexus状态 |
3.2 理解名词及概念
在学习使用之前,先理解一下 nexus 仓库的一些概念。
在仓库列表中,每个仓库都具有一系列属性:Type
:仓库的类型,Nexus 中有 4 种仓库类型:group(仓库组)、hosted(宿主仓库)、proxy(代理仓库)以及 virtual(虚拟仓库)。Format
:仓库的格式。Policy
:仓库的策略,表示该仓库是发布(Release)版本仓库还是快照(Snapshot)版本仓库。Repository Status
:仓库的状态。Repository Path
:仓库的路径。
Nexus 仓库按照类型(Type)区分,主要分为以下 3 个类型:
- 代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。
- 宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。
- 仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
Maven 可以直接从宿主仓库中下载构件。
Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。
3.3 界面介绍
主界面
**Welcome:**欢迎界面
**Search:**搜索界面,可以根据自己的需求搜索想要的构件是否存在
**Browse:**浏览界面,列表展示配置的所有仓库,点击某一仓库记录的时候,可以浏览该仓库中拥有的构建。
**Upload:**上传界面,主要用来将自己的 jar包 上传到私服上的 Maven 仓库,也可以将 nuget 构件上传到私服上的 nuget 库。
仓库管理界面
**Repository:**提供仓库管理功能
**Repositories:**提供仓库的配置功能
**Blob Stores:**提供仓库中构件的存储,简单来说就是仓库中所有的构件就存放在这里,支持几种类型的存储
**Cleanup Policies:**提供仓库中构件的清理策略,配置清理策略并应用于仓库,那么仓库中的构件将会定期基于该策略进行清理。支持按时间顺序、使用频率等方式清理。
权限管理
**Security:**提供权限管理功能
**Privileges:**提供 Nexus 的权限管理功能,是比较细力度的权限定义。
**Roles:**提供 Nexus 的角色管理功能,角色可以理解为一组权限的集合。
- nx-admin,管理员角色,拥有系统的所有权限
- nx-anonymous,游客角色,仅拥有读写和搜索的权限
**User:**提供 Nexus 的用户管理功能,如果某些仓库仅想对某些人员开放,而不是对所有人开放,可以通过设置凭据访问来限制用户访问仓库,最简单的一种就是用户名密码凭据访问。
3.4 创建代码仓库
group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库,能把多个仓库合成一个仓库来使用。
hosted(宿主类型):是宿主机的意思,内部项目的发布仓库(一般分为releases发布版以及snapshots快照)。
proxy(代理类型):proxy就是代理的意思,代理中央Maven仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。
virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)。
3.4.1 点击设置的小齿轮按钮
3.4.2 点击创建存储卡
3.4.3 选择创建的仓库类型
3.4.4 选择其他的相关设置
填好后,拉到最下方,点击 Create repository,即可创建成功
可以看到新创建的仓库。
3.5 上传本地jar包
3.5.1 命令行上传
mvn deploy:deploy-file -DgroupId=com.zmf -DartifactId=kingUtils -Dversion=2.0.0 -Dpackaging=jar -Dfile=./kingUtils-2.0.0-SNAPSHOT.jar -Durl=http://localhost:10086/repository/myself_hosted/ -DrepositoryId=nexus
-DgroupId=com.zmf # jar包的组名,自定义
-DartifactId=kingUtils # jar包名称,自定义
-Dversion=2.0.0 # jar包版本,三个自定义,构成pom.xml文件中的坐标
-Dpackaging=jar # 打包方式,上传的类型是jar类型
-Dfile=./kingUtils-2.0.0-SNAPSHOT.jar # jar包的本地磁盘位置
-Durl=http://localhost:10086/repository/myself_hosted/ # 远程库服务器地址
-DrepositoryId=nexus # setting.xml文件中配置的ID
-DrepositoryId #远程库服务器ID
3.5.2 web页面上传
选择 Upload --> maven-releases
选择文件,输入对应信息,点击上传即可。
查看,上传成功。
3.6 下载 jar
把第三方的 jar(aliyun-sdk-oss-3.1.0.jar) 保存到本地。
mvn install:install-file -Dfile=./aliyun-sdk-oss-3.1.0.jar -DgroupId=com.zmf -DartifactId=aliyun-oss -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar
3.7 在maven中配置私服
在maven中配置私服,编辑setting.xml。文件路径:/etc/maven/settings.xml
settings.xml有什么用?
从 settings.xml 的文件名就可以看出,它是用来设置 maven 参数的配置文件。并且,settings.xml 是 maven 的全局配置文件。而 pom.xml 文件是所在项目的局部配置。
Settings.xml 中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
需要注意的是:局部配置优先于全局配置。
配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
<servers>
<server>
<!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
<id>nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<!--为仓库列表配置的下载镜像列表。 -->
<mirrors>
<mirror>
<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>nexus</id>
<!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->
<mirrorOf>*</mirrorOf>
<name>central repository</name>
<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://127.0.0.1:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。 -->
<repositories>
<!--发布版本仓库-->
<repository>
<id>nexus</id>
<!--地址是nexus中repository(Releases/Snapshots)中对应的地址-->
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!--激活配置-->
<activeProfiles>
<!--profile下的id-->
<activeProfile>nexus</activeProfile>
</activeProfiles>
在项目中配置私服,pom.xml中添加。
<!--上传到nexus仓库中,配合mvn deploy:deploy-->
<distributionManagement>
<repository>
<id>nexus</id>
<name>Nexus snapshots Repository</name>
<!--snapshots仓库 -->
<url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
</repository>
</distributionManagement>
Nexus和Maven有什么区别
Nexus和Maven是经常需要一起工作的两个软件,Nexus提供了一个存储库,而Maven使用一个存储库来构建软件。
可以简单理解为———Nexus是用来管理存储库,而Maven是访问该存储库。
参考文档:
https://www.cnblogs.com/breeze-zZ/p/11049743.html
https://blog.csdn.net/m18336132361/article/details/123580428
https://www.cnblogs.com/lqmblog/p/15655241.html
4. FAQ
常见问题:
启动 Nexus时,如果系统的文件空间不足4096MB,会启动失败,此时,可以增加硬盘容量或者调整存储上限:storage.diskCache.diskFreeSpaceLimit
;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)