研发提效必备技能:手把手教你基于Docker搭建Maven私服仓库

简介: 在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套Maven私服仓库。

沉淀,成长,突破,帮助他人,成就自我。

大家好,我是冰河~~

在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套Maven私服仓库。

一、背景知识

搭建Maven私服仓库可以提高项目构建和部署的效率、稳定性和安全性,同时方便管理内部开发的组件和私有库,比较适用于企业内部或者特定场景下的需求。

就拿我们星球的分布式IM即时通讯系统来说,对于后端服务,我们将其划分成了 多系统共用模型与工具、即时通讯后端服务、大后端平台、即时通讯SDK、OpenAI大模型接入服务 等。

其中,多系统共用模型与工具会被其他服务依赖,即时通讯SDK和OpenAI大模型接入服务也会被其他服务依赖,并且多系统共用模型与工具、即时通讯SDK和OpenAI大模型接入服务都是我们开发分布式IM即时通讯系统时的私有库和组件,所以,在设计和研发分布式IM即时通讯系统的过程中,我们也需要搭建一套自己的Maven私服来统一管理这些私有库和组件。

好了,那接下来,我们就一起搭建Maven私服仓库吧。

二、环境说明

  • 服务器版本:CentOS7
  • 主机名:binghe102
  • IP地址:192.168.106.102
  • Maven私服镜像:sonatype/nexus3

三、环境搭建

基于Docker搭建Maven私服的步骤如下所示。

3.1下载Nexus3镜像

在服务器命令行输入如下命令,下载Nexus3镜像。

docker pull sonatype/nexus3

这里,视网络情况,可能需要耐心等待一会儿。

3.2 查看Nexus3镜像

在服务器命令行输入如下命令,查看下载的Nexus3镜像。

[root@binghe102 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
sonatype/nexus3   latest    589f7296a4a2   23 months ago   655MB

可以看到,已经成功下载Nexus3镜像。

3.3 创建Nexus3挂载文件夹

在服务器命令行输入如下命令,创建nexus的挂载文件夹。

mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data

3.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目录中查看到。

3.5 查看Nexus3容器启动状态

在服务器命令行输入如下命令,查看Nexus3容器启动状态。

[root@binghe102 ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                       NAMES
59e27830bbaa   sonatype/nexus3   "sh -c ${SONATYPE_DI…"   2 minutes ago   Up 2 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   nexus

可以看到,Nexus3容器启动成功,监听了8081端口。

四、Nexus3配置

搭建完Nexus3环境后,我们还需要对其进行配置,具体配置的步骤如下所示。

4.1 打开Nexus3页面

Nexus3容器启动时监听的端口和宿主机端口都是8081,所以,我们在浏览器地址栏输入http://192.168.106.102:8081打开Nexus3页面,如图1所示。

1de386f7535f4e058bfed12fa270d9cb.png

4.2 登录Nexus3

点击Nexus3右上角的登录,如图2所示。

26e6a3772d5847a4b55acbcb0f84aecc.png

点击后会弹出如图3所示的提示框。

4984fdcccb3843e5b848c09049734ad9.png

根据提示得知,初始密码的存放位置为/nexus-data/admin.password,因为我们在启动Nexus3容器时,将Nexus3容器的/nexus-data目录映射到了宿主机的/usr/local/nexus-data目录,所以,我们在宿主机的/usr/local/nexus-data目录中也能够查询到admin.password文件。

所以,在宿主机中输入如下命令即可查看到admin.password文件。

ll /usr/local/nexus-data

具体如图4所示。

3c4358f0668d434c8429de73684a43d9.png

输入如下命令查看admin.password文件的内容。

[root@binghe102 ~]# cat /usr/local/nexus-data/admin.password 
517842df-1a2d-49c9-b4c3-b9ad4cf0fe00

此时,我们就查看到登录Nexus3的admin账号的密码为517842df-1a2d-49c9-b4c3-b9ad4cf0fe00,将admin账号和对应的密码输入到图3所示的提示框中,即可登录Nexus3,如图5所示。

2b3d54a2321f4727a84e06debdd83932.png

登录后的界面如图6所示。

a6a87dedda764a469ad3c543eb6dec6d.png

可以看到,首次登录后会自动弹出完成必要设置的提示框,点击Next按钮,设置新密码,如图7所示。

b18386dee8484a11ad2c3ff73711134d.png

这里,自行记录新设置的密码,用于后续登录Nexus。

点击Next按钮,选择nable anonymous access,如图8所示。

02ca22a65f96415685882eaf87768757.png

点击Next按钮,如图9所示。

d22b7dfd520a472fa0124c0e7c48c714.png

点击Finish按钮,即可完成设置。

4.3 配置阿里云代理仓库

Nexus默认使用的远程仓库为maven-central,从这个远程仓库下载依赖很慢,经常连不上,如图10所示。

9f6e9c739b0a4966ba009d3cb236f03a.png

鼠标单机maven-central仓库,查看maven-central仓库配置的远程链接,如图11所示。

41d795d9b6e040d8942c54c2482d38db.png

可以看到,maven-central仓库配置的远程链接为https://repo1.maven.org/maven2/,从这个远程仓库下载依赖很慢,经常连不上,所有我们需要配置阿里云远程代理仓库。

回到图10所示的页面,点击Create repository按钮,如图12所示。

20fdb1587cfb4f49822dabeb599f66ca.png

点击后进入选择仓库类型的页面,这里我们选择maven2(proxy)类型,如图13所示。

9c719f3ffea84c61b0450dca30df50cf.png

点击选则maven2(proxy)类型后,进入配置远程代理仓库的页面,如图14所示。

6742338bbe4741a1a0bf5d77a328e35e.png

其中,每个配置项如下所示。

接下来,拖动3-14页面右侧的滚动条,滑到最下面,点击Create repository按钮,如图15所示。

321b8de9157c45de923d39949f1531f5.png

点击Create repository按钮后,就可以在Repositories列表中看到新配置的阿里云代理仓库了,如图16所示。

6fc61667dc3445c3b225df0e276a2383.png

并且Status显示的是Online - Ready to connect,说明阿里云远程仓库配置成功。

4.4 配置仓库组

接下来,需要将aliyun-central配置到仓库组,并且将aliyun-central排在maven-central上面。具体步骤如下所示。

在Repositories列表中,点击maven-public,如图17所示。

fcddb943237a4b13a7fb6dd6373fe148.png

点击后进入如图18所示的页面。

8342b295c18f4616bb77c8e2102fb07f.png

下拉页面右侧的滚动条,找到如图19所示的配置。

6385ef23c6a14ac6b4003979e49794f4.png

将aliyun-central移动到右侧,并排在最上面,如图20所示。

9a441b8a21624bbfbf2b154716dd9e8c.png

点击Save按钮保存配置。

4.5 创建用户

接下来,创建一个用于上传Jar包到仓库的用户,具体步骤如下所示。

点击Security菜单下的Users菜单,如图21所示。

b8a0a484ecd547318f3af680617b3118.png

点击Users菜单后,点击Create local user按钮,如图22所示。

e05cce587db044749f9717f868ba0404.png

随后,按照图23所示设置用户的基本信息。

94e74f84f08548d2bb949068b8cb8abc.png

这里,自行记录用户的密码,用于后续上传jar文件使用,配置好之后,点击底部的Create local user按钮即可。点击后在Security菜单下的Users菜单的用户列表中,可以查看到新创建的本地用户,如图24所示。

391e232a6bf941cba29281f228538c86.png

至此,Nexus3配置完毕。

五、配置本地Maven仓库

配置完Nexus后,接下来,还需要对本地的Maven仓库进行配置,主要就是对Maven的的settings.xml文件进行配置。

5.1 复制settings文件

复制setting.xml文件为setting-binghe.xml文件,如图25所示。

81011daea32641898017897b4dbad4bf.png

5.2 配置servers节点

在settings-binghe.xml文件中,找到servers节点,在servers节点中,配置5.5节创建的用户,如下所示。

<server>
    <id>binghe</id>
    <username>binghe</username>
    <password>binghe123</password>
</server>

5.3 配置mirrors节点

在settings-binghe.xml文件中,找到mirrors节点,在mirrors节点中,配置仓库地址,如下所示。

<!--本地私服仓库地址-->
<mirror>
    <id>central</id>
    <name>Local Repository</name>
    <url>http://192.168.106.102:8081/repository/maven-public</url>
    <mirrorOf>*</mirrorOf>
</mirror>
<!--阿里云仓库地址-->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

5.4 配置profiles节点

在settings-binghe.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://192.168.106.102: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构建项目时,指定使用binghe-settings.xml文件即可将依赖的Jar文件和生成的Jar文件上传到Maven私服仓库,如果使用IDEA编译项目,也需要在IDEA中,将Maven的配置文件指定为settings-binghe.xml。

注意:我已经将settings-binghe.xml文件上传到本节对应源码分支的environment/maven目录下,大家自行获取即可。

六、项目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>binghe</id>
        <url>http://192.168.106.102:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
        <!--此仓库对应的为SNAPSHOT版本的jar-->
        <id>binghe</id>
        <url>http://192.168.106.102:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

是不是很简单?你照着文章一步步实操,就可以基于Docker搭建属于自己的Maven私服仓库了。

好了,今天就到这儿吧,我是冰河,我们下期见~~

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
目录
相关文章
|
7天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
Java Linux Maven
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
|
2月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
3月前
|
Java Maven 数据安全/隐私保护
弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异
弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异
509 1
|
2天前
|
存储 安全 Java
maven仓库的版本列举
这段代码是Java程序,用于分析本地Maven项目的依赖版本。它遍历指定路径下的文件,提取groupId和version信息,并存储到HashSet中。最终,这些信息被写入到一个Excel文档。主要类`test`包含一个静态内部类`Version`来封装groupId和version字段。通过递归方法`func`处理文件夹结构,获取Maven坐标信息。
12 3
|
4月前
|
Java Maven 数据安全/隐私保护
Nexus【应用 01】上传jar包到私有Maven仓库的两种方法:手动 Upload 和 mvn deploy 命令(配置+操作流程)
Nexus【应用 01】上传jar包到私有Maven仓库的两种方法:手动 Upload 和 mvn deploy 命令(配置+操作流程)
368 0
|
1月前
|
网络协议 网络安全 Docker
docker离线搭建仓库
docker离线搭建仓库
40 4
|
1月前
|
存储 Java Maven
|
2月前
|
Java 测试技术 Maven
云效问题之构建docker镜像从容器仓库拉取镜像报错如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
68 0
|
3月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
130 0