在现代软件开发中,私有仓库是企业管理和分发内部依赖的重要工具,能够提高开发效率、加强依赖管理并确保构建的稳定性。Nexus Repository Manager 作为市场上常见的私服解决方案,不仅支持 Maven,还支持 npm、PyPI 等多种格式,为团队提供了统一的制品管理平台。
本文将介绍如何使用 Docker 快速部署 Maven 私服 Nexus3,帮助开发者搭建高效的依赖管理和分发环境,同时减少环境配置的复杂性和维护成本。通过 Docker 部署,您可以轻松实现版本化控制、灵活配置以及跨平台的便捷使用,是中小型团队和企业的理想选择。
文章目录
- 1、背景知识
- 2、环境搭建
- 2.1、步骤一:下载 Nexus3 镜像
- 2.2、步骤二:查看 Nexus3 镜像
- 2.3、步骤三:创建 Nexus3 挂载文件夹
- 2.4、步骤四:启动 Nexus3 容器
- 2.5、步骤五:查看 Nexus3 容器启动状态
- image-20241023102250642
- 3、环境配置
- 3.1、步骤六:打开 Nexus3 页面
- 3.2、步骤七:登陆 Nexus3 用户
- 3.3、步骤八:配置阿里云代理仓库
- 3.4、步骤九:配置仓库组
- 3.5、步骤十:创建用户
- 4、配置本地 Maven 仓库
- 4.1、步骤十一:复制 settings 文件
- 4.2、步骤十二:配置 servers 节点
- 4.3、步骤十三:配置 mirrors 节点
- 4.4、步骤十四:配置profiles节点
- 5、配置项目 pom.xml 文件
1、背景知识
在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套 Maven 私服仓库。
搭建 Maven 私服仓库可以提高项目构建和部署的效率、稳定性和安全性,同时方便管理内部开发的组件和私有库,比较适用于企业内部或者特定场景下的需求。
2、环境搭建
2.1、步骤一:下载 Nexus3 镜像
在服务器命令行输入如下命令,下载 Nexus3 镜像(视网络情况,可能需要耐心等待一会儿):
$ docker pull sonatype/nexus3
2.2、步骤二:查看 Nexus3 镜像
在服务器命令行输入如下命令,查看下载的 Nexus3 镜像。
$ docker images
可以看到,已经成功下载 Nexus3 镜像
2.3、步骤三:创建 Nexus3 挂载文件夹
在服务器命令行输入如下命令,创建 Nexus 的挂载文件夹:
$ mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data
2.4、步骤四:启动 Nexus3 容器
在服务器命令行输入如下命令,启动 Nexus3 容器:
$ docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data --restart=always sonatype/nexus3
可以看到,在上述启动命令中,我们将 Nexus3 容器的 /nexus-data
目录映射到了宿主机的 /usr/local/nexus-data
目录。此时 Nexus3 容器运行过程中,在 /nexus-data
目录产生的文件和日志都会在宿主机的 /usr/local/nexus-data
目录中查看到。
Ps:Nexus3 默认启动需要至少 2G 内存,所以一些环境下为了避免占用过多内,可以采用下面参数限制其内存:
$ docker run -d -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data sonatype/nexus3
2.5、步骤五:查看 Nexus3 容器启动状态
在服务器命令行输入如下命令,查看 Nexus3 容器启动状态:
$ docker ps
可以看到,Nexus3 容器启动成功,监听了 8081 端口。
3、环境配置
搭建完 Nexus3 环境后,我们还需要对其进行配置,具体配置的步骤如下所示。
3.1、步骤六:打开 Nexus3 页面
Nexus3 容器启动时监听的端口和宿主机端口都是 8081,所以,我们在浏览器地址栏输入 http://宿主机IP地址:8081
打开 Nexus3 页面:
3.2、步骤七:登陆 Nexus3 用户
点击 Nexus3 右上角的登录(Sign in
),点击后会弹出如下图所示的提示框:
对于第一次登陆,初始密码的存放位置为 /nexus-data/admin.password
,因为我们在启动 Nexus3 容器时,将 Nexus3 容器的 /nexus-data
目录映射到了宿主机的 /usr/local/nexus-data
目录,所以,我们在宿主机的 /usr/local/nexus-data
目录中也能够查询到 admin.password
文件。
$ cat /usr/local/nexus-data/admin.password
此时,我们就查看到登录 Nexus3 的 admin 账号的密码为 13250a0a-1c02-498a-b15a-0a7aabad1add
将 admin 账号和对应的密码输入到提示框中,即可登录 Nexus3。
Ps:首次登录后会自动弹出完成必要设置的提示框,点击 Next
按钮,设自行置新密码,用于后续登录 Nexus。之后点击 Next
按钮,选择 Enable anonymous access
再次点击 Next
按钮后,点击 Finish
按钮,即可完成设置。
3.3、步骤八:配置阿里云代理仓库
如下图所示,Nexus 默认使用的远程仓库为 maven-central
,从这个远程仓库下载依赖很慢,经常连不上。
鼠标单机 maven-central
仓库,查看 maven-central
仓库配置的远程链接,如下图所示:
可以看到,maven-central
仓库配置的远程链接为 https://repo1.maven.org/maven2/
,从这个远程仓库下载依赖很慢,经常连不上,所有我们需要配置阿里云远程代理仓库。
这里我们回到 Repositories
页面,点击 Create repository
按钮:
点击后进入选择仓库类型的页面,这里我们选择 maven2(proxy)
类型。
点击选则 maven2(proxy)
类型后,进入配置远程代理仓库的页面:
其中,每个配置项如下所示。
-
Name:aliyun-central
-
Version policy:Release
-
Layout policy:Strict
-
Remote storage:http://maven.aliyun.com/nexus/content/groups/public
接下来,拖动页面右侧的滚动条,滑到最下面,点击 Create repository
按钮
点击 Create repository
按钮后,就可以在 Repositories
列表中看到新配置的阿里云代理仓库了
并且 Status 显示的是 Online - Ready to connect
,说明阿里云远程仓库配置成功。
3.4、步骤九:配置仓库组
接下来,需要将 aliyun-central 配置到仓库组,并且将 aliyun-central
排在 maven-central
上面。
在 Repositories
列表中,点击 maven-public
点击进入页面后,下拉页面右侧的滚动条,找到如图所示的配置
将 aliyun-central
移动到右侧,并排在最上面后,点击 Save
按钮保存配置。
3.5、步骤十:创建用户
接下来,创建一个用于上传 Jar 包到仓库的用户,具体步骤如下所示。
点击 Security
菜单下的 Users
菜单,再之后点击 Create local user
按钮
随后,按照下图所示设置用户的基本信息
这里,自行记录用户的密码,将 Status
设置为 Active
来启用账户,并设置账号的角色为 nx-admin,配置好之后,点击底部的 Create local user
按钮即可。
点击后在 Security 菜单下的 Users 菜单的用户列表中,可以查看到新创建的本地用户
至此,Nexus3 配置完毕。
4、配置本地 Maven 仓库
配置完 Nexus 后,接下来,还需要对本地的 Maven 仓库进行配置,主要就是对 Maven 的 settings.xml 文件进行配置
4.1、步骤十一:复制 settings 文件
复制 setting.xml 文件为 setting-lizhengi.xml 文件
4.2、步骤十二:配置 servers 节点
在 settings-lizhengi.xml 文件中,找到 servers 节点,在 servers 节点中,配置在步骤十中创建的用户
<server>
<id>binghe</id>
<username>lizhengi</username>
<password>myPassword</password>
</server>
4.3、步骤十三:配置 mirrors 节点
在 settings-lizhengi.xml 文件中,找到 mirrors 节点,在 mirrors 节点中,配置仓库地址
<mirrors>
<mirror>
<id>lizhengi-nexus</id>
<name>Lizhengi Nexus3</name>
<url>http://tencentcloud:8081/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
4.4、步骤十四:配置profiles节点
在 settings-lizhengi.xml 文件中,找到 profiles 节点,在 profiles 节点中,配置仓库信息:
<profile>
<id>maven-public</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
<repositories>
<repository>
<id>nexus-public</id>
<url>http://tencentcloud:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
至此,Maven私服仓库搭建完毕,并且本地Maven也已经配置完毕。
后续使用 Maven 构建项目时,指定使用 settings-lizhengi.xml 文件即可将依赖的 Jar 文件和生成的 Jar 文件上传到 Maven 私服仓库,如果使用 IDEA 编译项目,也需要在 IDEA 中,将 Maven 的配置文件指定为 settings-lizhengi.xml。
5、配置项目 pom.xml 文件
搭建完 Maven 私服仓库,配置好本地 Maven 仓库后,还需要在项目的 pom.xml 文件中进行相应的配置,具体如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!--发布代码Jar插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!--发布源码插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
<!--此仓库对应的为RELEASE版本的jar-->
<id>lizhengi</id>
<url>http://tencentcloud:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
<!--此仓库对应的为SNAPSHOT版本的jar-->
<id>lizhengi</id>
<url>http://tencentcloud:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>