Note/安装环境/安装教程/Nexus3.md

430 lines
16 KiB
Markdown
Raw Normal View History

2024-01-12 10:13:34 +08:00
![img](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704267879.png)
Nexus 3 是一款由 Sonatype 公司开发的仓库管理工具。它是一个用于存储、发布和管理软件组件的集中式仓库,特别适用于 Java 开发人员。Nexus 3 支持 Maven、Gradle 和其他构建工具,并提供了强大的搜索、版本控制和权限管理功能。使用 Nexus 3 可以帮助团队更好地组织和共享代码库,并提高开发效率。
## 1.Nexus 3 的安装
### 1.docker启动命令
或者可以使用Docker-Compose进行编排
linux x86-64
```shell
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
```
aarch64
```shell
docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus klo2k/nexus3
```
### 2.访问 Nexus 3
通过访问 http://localhost:8081 进入Nexus 3 的网站
![image-20231227152301705](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703661782.png)
### 3.获取密码并登录
![image-20231227154319306](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703662999.png)
点击页面右上角的"Sign in",按弹窗提示找到默认密码
- 默认账号admin
- 默认密码:容器内的 "/nexus-data/admin.password"
- 会提示重置密码,改个记得住的密码(或者用默认密码),后面配置需要用到
在命令行中使用下面的命令进行获取密码
```shell
docker exec nexus cat /nexus-data/admin.password
```
### 4.修改密码并设置
![image-20231227152749263](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703662069.png)
默认开启匿名访问
![image-20231227152900691](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703662141.png)
这就基本安装完成
![image-20231227154643340](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703663203.png)
## 2.内容介绍
![](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703663203.png)
右侧分为四个一级菜单分别是 `Welcome` `Search` `Browse` `Upload`
- Welcome
- 欢迎界面,展示仓库的数据
- Total components : 总组件数量
- Unique logins : 登录数量30天内
- Peak requests per minute : 每分钟峰值请求24小时内
- Peak requests per day : 每天的峰值请求30天内
![image-20231227172644727](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703669205.png)
- Search
- 用于在所有仓库中,搜索是否存在某个`jar`包(依赖)
- Group组织如果我们想搜索 Spring Framework 的构件,可以使用 group:org.springframework 进行查询。
- Artifact构件如果我们想搜索 Spring Framework 的 web 模块,可以使用 artifact:spring-web 进行查询。
- Version版本如果我们想搜索 Spring Framework 版本为 5.3.10.RELEASE 的构件,可以使用 version:5.3.10.RELEASE 进行查询。另外,如果想模糊匹配多个版本,可以使用通配符 ,例如 version:5.3. 可以匹配到所有 5.3.x 版本。
- Base Version基本版本如果我们想搜索 Spring Framework 的 SNAPSHOT 版本,可以使用 baseVersion:5.3.11-SNAPSHOT 进行查询。这样就可以忽略掉 SNAPSHOT 部分,只匹配基本版本号为 5.3.11 的构件。
- Classifier分类器如果我们想搜索 Spring Framework 的 Windows 版本构件,可以使用 classifier:windows 进行查询。另外,有些 Maven 项目会为不同的环境打包不同的构件,例如 dev、test、prod 等,可以使用 classifier 进行搜索。
- Extension扩展名如果我们只想搜索 jar 文件,可以使用 extension:jar 进行查询。另外,如果我们想搜索所有类型的构件,可以省略该查询条件,默认会搜索所有扩展名的文件。
![](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703669229.png)
- Browse
- 检查该nexus私服拥有多少私有的仓库
- maven-central 是一个代理仓库,它代表了 Maven 中央仓库,它是默认的 Maven 仓库,包含了大量的开源 Java 类库和框架,可以改成国内代理,如阿里云([https://maven.aliyun.com/repository/public](https://maven.aliyun.com/repository/public))
- maven-public 是一个托管的仓库,它允许将自己的库发布到其中,并使其可供其他人使用。
- maven-releases 是一个托管的仓库,用于发布稳定版本的库。
- maven-snapshots 是一个托管的仓库,用于发布开发中或者测试版的库。
![image-20231227172852084](https://lsky.hhdxw.top/imghub/2023/12/image-202312271703669332.png)
- Upload
- 上传 jar 包到私有仓库
- 点击仓库后可以进行上传 jar 包
![image-20240102150816215](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704247153.png)
## 3. Jar包推送仓库
### 1.修改项目pom.xml文件配置
- 直接改造Maven项目或者新建一个Maven项目
- 执行"mvn package"能打包出jar的项目就行
- 如下在pom.xml添加nexus3地址信息
- 与dependencies/build同级
```xml
<dependencies>...略</dependencies>
<build>...略</build>
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>maven-releases</name>
<url>${这里填写从nexus页面上复制的maven-releases的url}</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>maven-snapshots</name>
<url>${这里填写从nexus页面上复制的maven-snapshots的url}</url>
</snapshotRepository>
</distributionManagement>
```
![image-20240103151816700](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266297.png)
- 推送包
- 执行 "mvn deoloy"
- 此时报错 "...status: 401 Unauthorized",说明项目配置正确
### 2.修改Maven软件配置
- 打开 _${maven根目录}/conf/settings.xml_
- 增加nexus账号密码
- id要和在项目pom.xml中配置的一致
```xml
<servers>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>${密码}</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>${密码}</password>
</server>
</servers>
```
![image-20240103151929256](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266369.png)
- 再次执行"mvn deploy"就不会报错了
- 刷新nexus页面上可以看到上传的包
- 项目版本不带"-SNAPSHOT"在"maven-releases"目录
- 否则在"maven-releases"目录
### 3.使用deploy推送
![image-20240103152221677](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266542.png)
![image-20240103152112596](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266473.png)
![image-20240103152000386](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266400.png)
## 4. 引用jar包
### 1.修改Maven软件配置
- 打开 _${maven根目录}/conf/settings.xml_
- 启用镜像,如果有其他镜像可以注释掉
- 重启IDEpom.xml中像线上的库一样添加dependency即可使用
```xml
<mirror>
<id>nexus-public</id>
<mirrorOf>*</mirrorOf>
<name>私有仓库</name>
<url>${这里填写从nexus页面上复制的maven-public的url}</url>
</mirror>
```
![image-20240103151929256](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266369.png)
### 2.项目引入jar包
```xml
<dependency>
<groupId>com.example</groupId>
<artifactId>mini-demo</artifactId>
<version>0.0.1-20231206.141630-1</version>
</dependency>
```
- 可以看到没有刷新之前是爆红显示在本地找不到该jar包
![image-20240103152406703](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266647.png)
- 刷新Maven后就可以看到成功引入该jar包
![image-20240103152426226](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704266666.png)
## 5.docker镜像拉取
### 1.创建一个存储库
![image-20240103160627759](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704269188.png)
- 选择如下配置
- Type 选择 File 或者 S3自行配置
- Name 可以自行设置(这里默认 docker
- 然后不选择容量提示,点击确认保存
![image-20240103161409621](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704269650.png)
### 2.创建镜像仓库
![image-20240103162040214](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704270040.png)
- 仓库分三种
- Docker (group) 是指在一个集群环境中使用 Docker。在这种情况下多个 Docker 容器被组织成一个群组,共享资源并通过集中的管理方式进行操作。这使得容器之间可以相互通信和协调,并且可以提供高可用性和负载均衡等功能。
- Docker (hosted) 是指在托管环境中使用 Docker。这意味着 Docker 引擎和容器管理系统(如 Docker Swarm 或 Kubernetes被部署在第三方云服务提供商或托管服务上。这样用户可以将自己的应用程序打包为容器并在托管环境中运行而无需关心底层基础设施的维护和管理。
- Docker (proxy) 是指在 Docker 网络中使用代理服务器。代理服务器充当位于容器和外部网络之间的中间人,转发请求和响应。使用代理服务器可以提供额外的安全性、负载均衡和缓存等功能,并允许容器与外部网络进行通信,同时隔离容器内部网络。
#### 1.创建代理仓库 Docker (proxy)
![image-20240103162218913](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704270139.png)
- Docker仓库配置设置
- Name 仓库名称,命名为 docker-registry-163
- Online 是否接受传入,选择勾选接受传入
- HTTP http连接器配置为 http 使用,不配置
- HTTPS https连接器配置为 https 使用,不配置
- HTTP连接器和HTTPS连接器用于配置Docker仓库使用的协议。HTTP连接器使用HTTP协议而HTTPS连接器使用HTTPS协议。
- Allow anonymous docker pull 允许匿名 docker 拉取,默认开启
- Enable Docker V1 APl 启动 Docker V1 API ,默认开启
- Remote storage 远程存储代理仓库设置为163镜像库其他也可
- Docker Index Docker 索引选择为Docker Hub
- Use the Nexus Repository truststore 使用Nexus存储库信任存储默认不开启
- 默认情况下不开启表示是否使用Nexus存储库的信任存储。开启后Nexus会使用自己的存储库来管理信任证书。
- Foreign Layer Caching 外层缓存,默认不启用
- 外层缓存可以提高Docker镜像的下载速度和性能。
- Maximum component age 最大构建年龄默认1440
- 如果一些镜像或组件已经存在于仓库中超过了这个时间,它们将被自动清理掉以释放空间。
- Maximum metadata age 最大元数据年龄默认1440
- 仓库中存储的元数据metadata的最长保留时间。这些元数据包括标签tag、索引index等信息。
- 限制存储空间:通过设置最大构建年龄和最大元数据年龄,可以控制仓库中存储的镜像和相关组件的数量和大小。当镜像或组件的存在时间超过设定的最大年龄时,它们将被自动清理,从而释放存储空间。
- 管理版本控制Docker 镜像和相关组件可能会随着时间的推移多次更新和构建。通过设置最大构建年龄,您可以确保仓库中只保留最新的镜像和组件,这有助于避免过时的版本占用存储空间。
- 提高性能:仓库中存储的元数据(如标签、索引等)也会随着时间的推移不断增长。通过设置最大元数据年龄,可以定期清理过时的元数据,从而提高仓库的性能和响应速度。
- 维护仓库健康:定期清理过时的镜像、组件和元数据有助于保持仓库的健康状态。它可以防止仓库变得杂乱不堪,减少潜在的错误和故障。
- Blob store 存储库,选择前面设置的 docker
- Not found cache enabled 未找到启用的缓存,默认勾选
- 用于启用或禁用 "Not Found Cache" 功能。当启用此功能时,如果某个请求在仓库中未找到所需的内容(例如镜像或组件),仓库将会缓存这个"未找到"的结果。这样,当后续的请求再次发生时,仓库可以更快地响应,而不必重新执行相同的查询
- Not found cache TTL 未找到缓存TTL默认1440
- 指 "Not Found Cache" 功能中缓存的超时时间。一旦某个未找到的结果被缓存起来,在经过一段时间后(即 TTL 时间)将会自动过期并从缓存中清除。
- Cleanup Policies 清理政策,不做更改
- 用于定义清理操作的策略。它允许您指定仓库中过期或不再需要的镜像、组件或其他资源的自动清理规则。可以根据各种条件(例如最后访问时间、构建日期等)来定义清理政策,以确保仓库保持干净和高效。
![image-20240103162453578](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704270293.png)
![image-20240103162505966](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704270306.png)
#### 2.创建主仓库 Docker (group)
- 配置
- Name 为 docker-registry
- HTTP 对外接口为 8082前面创建时候启用8082端口
- 勾选允许匿名拉取
- 勾选 Docker V1 API
- 存储库设置为 docker
- Member repositories 存储库设置为前面创建的 docker-registry-163
![image-20240103165831888](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704272312.png)
#### 3.启用 Docker
![image-20240103170429111](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704272669.png)
#### 4.对应服务器配置镜像仓库
- ip以及配置
- Nexus 3 安装在了本地电脑的 docker 中本地IP 10.211.55.2
- 目标服务器 CentOS Stream 9 aarch64 IP 10.211.55.40
```sh
vim /etc/docker/daemon.json
```
在文件中写入下面的配置
```json
{
"insecure-registries": [
"10.211.55.2:8082"
],
"registry-mirrors": [
"http://10.211.55.2:8082"
]
}
```
重启 Docker
```sh
systemctl daemon-reload
systemctl restart docker
```
## 6.docker镜像推送
#### 1.nexus 3 配置
创建 docker-private 存储库
![image-20240103231907873](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295148.png)
- 创建镜像仓库 docker(hosted)
- HTTP 端口 8083
- 开启匿名拉取
- 开启 Docker V1 API 接口
- 存储库 docker-private
![image-20240103232044665](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295245.png)
docker-registry 仓库中增加存储库 docker-private
![image-20240103232319285](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295399.png)
- 创建角色
- Role ID 角色ID ,设置为 docker-publish
- Role Name 角色名称,设置为 docker-publish
- Role Description 角色描述,设置为 docker-publish
- Privilegs 权限,设置为 nx-repository-admin-docker-docker-private-*
- nx-repository-admin-docker-docker-private-* 代表Docker 仓库中的私有仓库。这个特权表示被赋予的角色将对私有 Docker 仓库具有管理权限,包括创建、删除、推送和拉取镜像等操作。
- Roles 角色,设置为 nx-admin
![image-20240103232509055](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295509.png)
![image-20240103232522379](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295522.png)
- 创建用户
- ID 设置为docker
- Fisrst Name 设置为docker
- Last Name 设置为docker
- Email 设置为docker@gmail
- Password 设置为docker
- status 状态,设置为 Active
- Roles 角色,赋予 docker-publish
![image-20240103233251898](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704295972.png)
#### 2.配置服务器
- ip以及配置
- Nexus 3 安装在了本地电脑的 docker 中本地IP 10.211.55.2
- 目标服务器 CentOS Stream 9 aarch64 IP 10.211.55.40
```sh
vim /etc/docker/daemon.json
```
在文件中写入下面的配置
```json
{
"insecure-registries": [
"10.211.55.2:8082",
"10.211.55.2:8083"
],
"registry-mirrors": [
"http://10.211.55.2:8082"
]
}
```
```sh
//重启 Docker
systemctl daemon-reload
systemctl restart docker
//查看本地镜像
docker images
//打标签
docker tag redis:latest 10.211.55.2:8083/redis:v1.0
//登录仓库
docker login -u docker -p docker 10.211.55.2:8083
//推送打标签的镜像
docker push 10.211.55.2:8083/redis:v1.0
```
![image-20240103234013588](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704296413.png)
在本地仓库就能看到上传的镜像了
![image-20240103234244993](https://lsky.hhdxw.top/imghub/2024/01/image-202401031704296565.png)