使用 Docker 安装 Maven 私服 Nexus3_docker安装nexus3
在现代软件开发中,私有仓库是企业管理和分发内部依赖的重要工具,能够提高开发效率、加强依赖管理并确保构建的稳定性。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> <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>lizhengi</id> <url>http://tencentcloud:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>lizhengi</id> <url>http://tencentcloud:8081/repository/maven-snapshots/</url> </snapshotRepository></distributionManagement>