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

大家好,我是冰河~~

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

4.2 登录Nexus3

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

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

根据提示得知,初始密码的存放位置为/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所示。

输入如下命令查看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所示。

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

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

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

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

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

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

4.3 配置阿里云代理仓库

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

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

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

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

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

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

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

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

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

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

4.4 配置仓库组

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

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

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

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

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

点击Save按钮保存配置。

4.5 创建用户

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

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

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

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

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

至此,Nexus3配置完毕。

五、配置本地Maven仓库

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

5.1 复制settings文件

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

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私服仓库了。

七、写在最后

这些真实场景的项目设计与落地实现,在冰河的知识星球除了分布式IM即时通讯系统外,还有其他5个项目,这些项目的需求、方案、架构、落地等均来自互联网真实业务场景,让你真正学到互联网大厂的业务与技术落地方案,并将其有效转化为自己的知识储备

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

研发提效必备技能:手把手教你基于Docker搭建Maven私服仓库的更多相关文章

  1. 手把手教你使用gogs搭建git私有仓库

    本来想在 Github 上建一个私仓,但是发现只能设置 3 个贡献者. 国内的码云也只能设置 5 个. 无意间看到了使用 gogs 可以搭建私服,正好手头有空闲的服务器,于是开干! https://g ...

  2. 手把手教你基于CentOS8搭建微信订阅号后台服务(一)

    一.准备域名并完成解析 关于域名,我买的是阿里的一个1元/年的廉价域名,同时国内域名都需要备案,当时在这里耽搁了挺久的. 域名解析的话,在阿里云官方帮助文档里有.传送门:https://help.al ...

  3. 沉淀,再出发——手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群

    手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群 一.准备,再出发 在项目启动之前,让我们看一下前面所做的工作.首先我们掌握了一些Linux的基本命令和重要的文件,其次我们学会 ...

  4. 手把手教你认识并搭建Nginx

    手把手教你认识并搭建Nginx Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor ...

  5. 手把手教你用vue-cli搭建vue项目

    手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...

  6. 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)

    开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...

  7. 手把手教你使用 VuePress 搭建个人博客

    手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...

  8. Delphi - 手把手教你基于D7+Access常用管理系统架构的设计与实现 (更新中)

    前言 从事软件开发工作好多年了,学的越深入越觉得自己无知,所以还是要对知识保持敬畏之心,活到老,学到老! 健身和代码一样都不能少,身体是革命的本钱,特别是我们这种高危工种,所以小伙伴们运动起来!有没有 ...

  9. 手把手教你用Python搭建自己的量化回测框架【均值回归策略】

    手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...

  10. SpringCloud学习之手把手教你用IDEA搭建入门项目(三)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(二)>,不清楚的请到我的博客空间查看后再看本篇博客,上面两篇博客成功创建了一个简单的SpringCloud项目 ...

随机推荐

  1. Python基础语法--课程笔记

    Smiling & Weeping ----我的心是旷野的鸟,在你的眼睛里找到了它的天空 定义和使用类: 1.声明类: class类名: 成员变量,成员函数 2.定义类的对象: 对象名 = 类 ...

  2. Linux服务器搭建环境复盘

    Linux服务器搭建环境复盘 Linux服务器上是没有开发环境的,需要自己配置,在获得了服务器账号后,通过WinSCP登录可以传文件. 下载anaconda 官网下载Anaconda Linux版本 ...

  3. 单元测验4:人格知识大比武2mooc

    单元测验4:人格知识大比武2 返回 本次得分为:10.00/10.00, 本次测试的提交时间为:2020-09-06, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(2分) 关于M ...

  4. vue 甘特图(三):甘特图右侧内容拖动展示

    vue3 甘特图(三):甘特图右侧内容拖动展示内容 解决因多个项目周期跨度不同,在一页屏幕里展示不完全,需要通过拖动甘特图下方的滚动条,去查看对应时间段内的内容 拖拽滚动视图,展示对应时间甘特图 构思 ...

  5. Linux 中如何安全地抹去磁盘数据?

    哈喽大家好,我是咸鱼 离过职的小伙伴都知道,离职的时候需要上交公司电脑,但是电脑里面有许多我们的个人信息(聊天记录.浏览记录等等) 所以我们就需要先把这些信息都删除,确保无法恢复之后才上交 即有些情况 ...

  6. 区间检测(range)

    区间检测(range) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给定一个长度为n的序列,进行m次检测,每次检测某个区间中,是否有重复的数. 输入 第一行,两个整数n和m,表示序列 ...

  7. webwork学习

    学习了H5中的webworker 主机 > 程序 > 进程 > 线程 > 纤程 多进程(重) 多线程(轻) 开销 创建.销毁开销大 创建.销毁开销小 安全性 进程之间是隔离 线 ...

  8. ansible 命令行模

    ansible 命令行模 ansible命令格式 命令格式:ansible <组名> -m <模块> -a <参数列表> 查看已安装的模块 ansible-doc ...

  9. Java表达式引擎选型调研分析

    1 简介 我们项目组主要负责面向企业客户的业务系统,企业的需求往往是多样化且复杂的,对接不同企业时会有不同的定制化的业务模型和流程.我们在业务系统中使用表达式引擎,集中配置管理业务规则,并实现实时决策 ...

  10. Ubuntu 20.04 挂载 NTFS 硬盘 / 格式化并挂载 EXT4 硬盘

    创建挂载目录 mkdir /mnt/hdd 此目录在最后一步中用得到. 确定要挂载的硬盘 fdisk -l 由于我们要挂载的是 NTFS 硬盘,根据上面的信息,可以确定 /dev/sda1 是我们要挂 ...