王大拿
知道的越多,不知道的也就越多! 只要学不死,就往死里学!!!

Maven私服Nexus3.x环境部署应用

 

1.Maven介绍

Apache Maven是一个创新的软件项目管理和综合工具。
Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。
Maven最强大的功能就是能够自动下载项目依赖库。
Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。

Maven提供了开发人员的方式来管理:
1)Builds
2)Documentation
3)Reporting
4)Dependencies
5)SCMs
6)Releases
7)Distribution
8)mailing list
概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。
Maven增加可重用性并负责建立相关的任务。
Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。
Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。

Maven主要目标是提供给开发人员:
1)项目是可重复使用,易维护,更容易理解的一个综合模型。
2)插件或交互的工具,这种声明性的模式。

2.私服介绍

私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

 

 

3.Nexus介绍

Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。
正常做法是在本地架设一个Maven仓库服务器,即利用Nexus私服可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。
Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证。
Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。

1.为什么要构建Nexus私服

如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

2.本地构建Nexus私服的好处

1)加速构建;
2)节省带宽;
3)节省中央maven仓库的带宽;
4)稳定(应付一旦中央服务器出问题的情况);
5)控制和审计;
6)能够部署第三方构件;
7)可以建立本地内部仓库;
8)可以建立公共仓库
这些优点使得Nexus日趋成为最流行的Maven仓库管理器。

4.maven的安装

下载地址:http://maven.apache.org/download.cgi

提前在服务器上安装jdk环境(参考:https://www.cnblogs.com/qingbaizhinian/p/12201073.html)具体需要什么版本,看我们我们需要安装什么版本的maven.

安装过程

复制代码
[root@test-no ~]# cd /usr/local/src/
[root@test-no src]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
[root@test-no src]# tar -zvxf apache-maven-3.3.9-bin.tar.gz
[root@test-no src]# ll
total 8296
drwxr-xr-x 6 root root      99 May 13 14:10 apache-maven-3.3.9
-rw-r--r-- 1 root root 8491533 Nov 18  2015 apache-maven-3.3.9-bin.tar.gz
[root@test-no src]# mv apache-maven-3.3.9 /usr/local/maven
#接着配置系统环境变量,在/etc/profile文件底部添加如下内容:
[root@test-no java]# vim /etc/profile
。。。。
export JAVA_HOME=/usr/java/default                #java环境变量的配置
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export MAVEN_HOME=/usr/local/maven                #maven环境变量的配置
export PATH=$PATH:$MAVEN_HOME/bin              
[root@test-no java]# source /etc/profile
#最后验证是否安装成功,出现如下信息,说明安装成功
[root@test-no java]# mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_241, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_241-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
复制代码

5.Nexus安装

Nexus的安装有两种实现方式:

1.war包安装方式

下载地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war
直接将war包放在tomcat的根目录下,启动tomcat就可以用了

2.源码安装方式

下载地址:https://www.sonatype.com/download-oss-sonatype           (云盘下载:链接:https://pan.baidu.com/s/1BbKcMODLnciSi6oHVYWm8g
提取码:lb8j)

 

复制代码
[root@test-no ~]# cd /usr/local/src/
[root@test-no src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.12.1-01-unix.tar.gz
[root@test-no src]# tar -zxvf nexus-3.12.1-01-bundle.tar.gz
[root@test-no src]# mv nexus-3.12.1-01 /usr/local/nexus
[root@test-no src]# /usr/local/nexus/bin/nexus 
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
#启动nexus(默认端口是8081)
[root@test-no src]# /usr/local/nexus/bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus
#上面在启动过程中出现告警:不推荐使用root用户启动。这个告警不影响nexus的正常访问和使用。
去掉上面WARNING的办法如下或者切换启动用户
[root@test-no src]# vim /etc/profile
export RUN_AS_USER=root
[root@test-no src]# source /etc/profile
[root@test-no src]# lsof -i:8081      #nexus服务启动成功后,需要稍等一段时间,8081端口才起来
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    18742 root  914u  IPv4 2577829      0t0  TCP *:tproxy (LISTEN
复制代码

 

这个时候一般就可以进行访问了,如果访问出问题,用下面的解决方法

复制代码
在部署机上的iptables里打开8081端口
这里需要注意的是centos7下/etc/sysconfig/目录没有iptables,解决方法如下:
1.不管防火墙关没关,都是用systemctl stop firewalld 关闭防火墙。
2.然后使用yum install iptables-services 安装或者更新服务
3.然后使用systemctl enable iptables 启动iptables
4.最后使用systemctl start iptables 打开iptables
5.输入命令vim /etc/sysconfig/iptables
6.既可以修改iptables文件
[root@test-no src]# vim /etc/sysconfig/iptables
。。。。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
[root@test-no src]# systemctl restart iptables
访问nexus,即http://localhost:8081 (如果出现404,就访问http://localhost:8081/nexus),如果访问还是没反应,多是防火墙的问题,
解决方法可以参考学习一下,防火墙的相关配置,如果上线紧急,可以粗暴点,直接iptables -F先清空防火墙
复制代码

 进入web页面发现上面的提示,解决方法如下

[root@test-no ~]# vim /etc/security/limits.conf   #修改配置文件,加入下面两行
* soft nofile 65536
* hard nofile 65536
[root@test-no ~]# /usr/local/nexus/bin/nexus restart      #重启nexus

 6.Nexus的说明和使用

1.Nexus默认的仓库类型

在界面中点击 配置的图标,点击 Repositorys,就可以看见仓库的列表信息,可以看见仓库有一个字段类型叫Type,如下图所示

 

 

1、hosted(宿主仓库): 主要用于存储无法从中央仓库获取的包(比如数据库的驱动包),以及微服务项目之前依赖的API包(比如商品系统需要调用价格系统的 API)
2、proxy (代理仓库):代理公共的远程仓库(比如,所有的服务器都只能访问内外服务器,而只有这台服务器可以访问外网时,就可以用这台服务器为所有的机器做一层代理)
3、virtual 虚拟仓库:用于适配 Maven 1
4、group (仓库组):仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用依赖项时,无需引用多个仓库了,只需要引用一个类型为group的repository即可,下载时按配置顺序从中依次查找,。

 

2.component name的一些说明:

    1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar ,这个地址在国外,一般我们在这里会把改成国内阿里云的http://maven.aliyun.com/nexus/content/groups/public
    2)maven-releases:私库发行版jar
    3)maven-snapshots:私库快照(调试版本)jar
    4)maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。 

3.Public Repositories下的仓库

1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
3)Central: 用来代理maven中央仓库中发布版本构件的仓库
4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本
所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。

 

 

4.nexus目录和配置文件介绍

 

1.Nexus默认的端口是8081,可以在etc/nexus-default.properties配置中修改。

2.Nexus默认的用户名密码是admin/admin123

3.当遇到奇怪问题时,重启nexus,重启后web界面要1分钟左右后才能访问。

4.Nexus的工作目录是sonatype-work(路径一般在nexus同级目录下)

 

复制代码
[root@test-no nexus]# pwd
/usr/local/nexus
[root@test-no nexus]# ll etc/nexus-default.properties 
-rw-r--r-- 1 nexus nexus 341 Jun  8  2018 etc/nexus-default.properties
[root@test-no nexus]# cd ..
[root@test-no local]# ll sonatype-work/
total 0
drwxr-xr-x 14 nexus nexus 220 May 13 17:54 nexus3
[root@test-no local]# cd sonatype-work/
[root@test-no sonatype-work]# pwd
/usr/local/sonatype-work
[root@nexus1-no iflytek]# cat nexus/bin/nexus.vmoptions        #源码安装的在这里设置了启动参数,这里可以知道数据目录
-Xms1200M
-Xmx1200M
-XX:MaxDirectMemorySize=2G
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput 
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3                       #这里就是指定数据目录
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
复制代码

 

5.仓库的创建和权限的配置

1.仓库的创建

 

 

 

 

 

 2.权限的创建

数据权限:repository权限有两种类型,repository admin和repository view,每种类型又有6种权限标识,分别是:*,add,browse、delete、edit、read,*包含其它5种权限,也可以自定义操作标识,正常系统的生成权限足够使用

  • nx-repository-admin 开头的是针对仓库本身的相关权限
  • nx-repository-view 开头的是针对仓库里jar的相关权限

 

 3.角色的创建

 

 

 

 4.用户的创建

 

 至此nexus仓库的创建和权限指定已演示完毕。接下来演示nexus结合maven进行依赖仓库的使用和依赖组件的上传

6.新建的hosted和proxy库如何加入指定仓库组

具体操作步骤如下图

 

 

 

 7.依赖包上传仓库

1.通过项目层面进行上传

1.在项目的pom.xml配置相关信息

复制代码
<distributionManagement>
   <repository>
      <id>test-release</id>            #这里的name和id名字随便取,但是id要和setting.xml里一样,因为需要指定有上传的用户权限
      <name>test-release</name>
      <url>http://172.31.46.3:8081/repository/test-release/</url>
   </repository>
</distributionManagement>
复制代码

2.在setting.xml配置相关信息

<server>  
    <id>test-release</id>               #这个id随便取,和pom.xml里面的id一致就行。下面写有权限的账号和密码。
    <username>test-release</username>  
    <password>liu342622</password>  
</server>

3.进入项目所在目录下执行

mvn deploy

2.通过web界面直接上传

 

 

 3.通过命令上传

mvn deploy:deploy-file -DgroupId=IME.PyEngine.Test -DartifactId=Client.Make -Dversion=112 \
-Dpackaging=jar -Dfile=D:\AiInput\trunk\code_mix\Target\AiInput_RELEASE.jar 
-Durl=http://maven.iflytek.com:8081/nexus/content/repositories/CTI-3rdParty/ 
-DrepositoryId=thirdparty

 8.nexus跨主机迁移(附带版本升级操作)

nexus跨主机迁移分跨主机同版本迁移和不同版本迁移。

1.跨主机同版本迁移

nexus的跨主机同版本迁移只需把nexus的主目录和nexus的数据目录sonatype-work传到新的服务器上就行,这个比较简单。(这里的同版本的意思是同一个大版本号)

2.同版本升级

这里的同版本升级只是升级小版本号。列如2.10.4版本升级到2.14.8。这里一般我都会在老版本的服务器上直接安装一个新的,然后改一个启动端口号,然后把老sonatype-work

目录里的数据拷到新的数据目录里,然后直接启动就行了,这个时候你会发现系统上运行了两个nexus,只是端口号不一样。进新的nexus里看数据对不对,发现数据完整的迁移过来了。
这个只需把老nexus停掉就行。这样就完成了同版本升级了。

3.跨主机版本迁移(跨版本升级一样)

nexus跨版本主机迁移的话,这个比较麻烦,列如从2.10.4版本的nexus迁移到3.12.1,这里迁移之前还需要把2.10.4版本升级到2.14.8或者更新的2.几版本,这样才能进行跨版本迁移,
不然你直接迁移的话,就会报版本不支持的提示,提示里会告诉你老机器需要是什么版本nexux才能迁移到新的nexus里

如果不升级成2.14.8,下面的迁移动作会报下面的提示,为了不做重复工,我们提前升级成2.14.8

 

 

准备工作做好后,执行下面操作进行跨版本迁移。

 首先在老版本机器上配置Upgrade:Agent,Upgrade:Agent的配置比较简单,如下

 

 上图中的Access Token非常重要,进行迁移的时候要用这个值,你可以设一个自己容易记得值,我这里设成qingbai123下图就是我们设置好的Upgrade:Agent

 

然后我们到新版本nexus上执行下面操作,首先开启Upgrade功能,如下

 

 

 

 

 

 接着在新nexus上执行迁移操作,nexus迁移操作是在web界面完成的,具体操作如下

 

 

 上图中的url填写的是老nexus的web访问地址,Access Token是老nexus的Upgrade:Agent中配置的是qingbai123。

下面基本就可以一路next就行了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 上图说明已经仓库已经迁移完毕,下面我们可以通过web界面和du -sh验证这老新两个仓库的完整性。

 

posted on 2021-10-26 11:59  DevOps_SRE  阅读(273)  评论(0编辑  收藏  举报