nexus部署maven私服

生产环境,多数主机不可出外网,maven编译起来不太方便,随着生产环境主机数量增多,考虑需要配置一个专门的maven仓库,存储maven所需的依赖,所以就想到了nexus这个东西,特此记录!可以参考nexus官方文档

一、nexus简介

Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库。

e3d005486e9ac84357ea30a9f655c826

本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库是maven默认的远程仓库。

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

d9d29eeefddd4bc45fe85c283882a251

1.1 Nexus的功能:

1、节省外网带宽。大量对于外部仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以消除对外的重复构件下载,降低带宽的压力;

2、加速Maven构建。加速Maven构建。不停地连接请求外部仓库十分的耗时,Maven在执行构建的时候不停地检查远程仓库的数据。利用私服,Maven只检查局域网的数据,提高构建的速度;

3、部署第三方构件。部署第三方构件。当某个构件无法从任何一个外部远程仓库获得。建立私服之后,便可以将这些构件部署到私服,供内部的Maven项目使用。

4、提高稳定性,增强控制。提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当网络不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。私服缓存了大量构建,即使暂时没有网络,Maven也可以正常的运行;

5、降低中央仓库的负荷。降低中央仓库的负荷。使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力。

二、安装Nexus

2.1 环境准备

OS hostname IP role 是否可出网
CentOS 7.6 nexus 10.4.7.101 nexus服务端
CentOS 7.6 client 10.4.7.102 maven客户端

2.2 系统默认参数优化

$ cat > /etc/security/limits.conf << EOF
*                -       nofile          655360
*                -       memlock         unlimited
*                -       stack           655360
*                -       nproc           unlimited
EOF


$ cat > /etc/sysctl.conf << EOF
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
fs.file-max=655360
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.pid_max = 655360
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_max_orphans = 655360
net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216

net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.route.gc_timeout = 100
# 禁止icmp重定向报文
net.ipv4.conf.all.accept_redirects = 0
# 禁止icmp源路由
net.ipv4.conf.all.accept_source_route = 0

net.core.somaxconn = 65535
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144

vm.swappiness = 10
vm.overcommit_memory = 1
vm.max_map_count = 262144
EOF

2.3 安装java环境

下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件;

$ mkdir /usr/local/java/
$ tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/java/
$ vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
$ source /etc/profile
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.4 安装nexus

nexus的二进制包不好从官方下,如果你们有什么国内的下载地址,可以评论里分享下,我这里费尽周折下载了一个最新版本(2020-12-12日下载),提取链接:百度网盘( 提取码:ylpw )。

2.4.1 解压安装
$ wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.0-02-unix.tar.gz
# 官方下载链接(如已下载我网盘的包,可不执行wget,大概率下载不下来)

$ mkdir /data
$ tar zxvf nexus-3.29.0-02-unix.tar.gz -C /data/
$ cd /data
$ mv sonatype-work/ nexus-3.29.0-02/
$ ln -sf nexus-3.29.0-02/ nexus
2.4.2 修改监听地址及端口(可不做修改)
$ vim /data/nexus/etc/nexus-default.properties
application-port=8081
application-host=0.0.0.0
2.4.3 修改jvm参数、日志等存储路径
$ vim /data/nexus/bin/nexus.vmoptions
-Xms4096m        # 最小可用内存
-Xmx4096m        # 最大可用内存(建议与最小可用内存保持一致)
-XX:MaxDirectMemorySize=4096m
-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
-XX:LogFile=/data/nexus/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=/data/nexus/sonatype-work/nexus3
-Dkaraf.log=/data/nexus/sonatype-work/nexus3/log
-Djava.io.tmpdir=/data/nexus/sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
-Djava.endorsed.dirs=lib/endorsed
# 将上面的路径都修改为绝对路径
2.4.4 启动nexus

注:root用户启动可能会有问题,所以需要创建nexus用户用于启动nexus服务!

$ useradd nexus
$ chown -R nexus /data
$ ln -sf /data/nexus/bin/nexus /usr/local/bin/

$ su -s /bin/bash -c "nexus run" nexus      
# 前台启动nexus(可以看到日志信息,避免配置错误还在傻等着)
$ su -s /bin/bash -c "nexus start" nexus 
# 后台启动nexus

$ ss -lnptu | grep 8081      
# 等待片刻后,确认8081端口在监听(8081端口启动较慢,多点耐心)
tcp    LISTEN     0      50        *:8081                  *:*                   users:(("java",pid=7587,fd=788))

2.5 初始化nexus

访问nexus的web管理页,URL:http://nexus_ip:8081 ,如下:

20210309222825

查看admin密码

$ cat /data/nexus/sonatype-work/nexus3/admin.password
8d47dd29-9cbf-472e-806e-7dbde49bbe4f

20210309222915

更新密码

20210309223042

开启匿名用户访问

20210309223106

三、配置maven代理

3.1 查看默认仓库类型

2021-03-10_140256

从图中就可以看出默认的仓库类型分为三种(其实有四种,不过最后一种不一定会用到):

  • group(仓库组类型):又叫组仓库,用于方便开发人员,自己设定的仓库;
  • hosted(宿主类型):内部项目的发布仓库(内部开发人员发布上去存放的仓库);
  • proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径);
  • virtual(虚拟类型):虚拟仓库(这个基本上用不到);

3.2 开启release的重复发版权限

2021-03-10_140735
2021-03-10_141127

3.3 设置代理仓库(采用阿里云maven仓库)

2021-03-10_141342
2021-03-10_141407

阿里云仓库的URL: https://maven.aliyun.com/nexus/content/groups/public/

2021-03-10_141606

查看刚才配置的仓库的URL地址

2021-03-10_141958
2021-03-10_142006

3.4 修改客户端的maven主配置文件

$ vim /usr/local/maven/conf/settings.xml
…………………………   #省略部分内容  
167     <mirror>
168       <id>nexus-testconf</id>
169       <mirrorOf>*</mirrorOf>
170       <name>nexus testconf</name>
171       <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
          <!-- 刚才配置nexus仓库的URL地址 -->   
172     </mirror>
173   </mirrors>
…………………………   #省略部分内容 
196   <profiles>
      <!-- 需要写在这个标签下面 --> 
261        <id>testconf</id>
262 
263       <repositories>
264          <repository>
265            <id>nexus</id>
266            <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
267            <releases>
268              <enable>true</enable>
269            </releases>
270            <snapshots>
271              <enable>true</enable>
272            </snapshots>
273         </repository>
274        </repositories>
275 
276       <pluginRepositories>
277         <pluginRepository>
278           <id>nexus</id>
279           <url>http://10.4.7.101:8081/repository/maven-aliyun/</url>
280            <releases>
281             <enable>true</enable>
282           </releases>
283           <snapshots>
284              <enable>true</enable>
285           </snapshots>
286         </pluginRepository>
287       </pluginRepositories>
288   </profiles>
      <!-- 需要写在这个标签上面 --> 
298   <activeProfiles>
299     <activeProfile>testconf</activeProfile>
         <!-- 这里的值一定要和上面profile的ID对应,才可以激活 -->
300   </activeProfiles>
301 </settings>
    <!-- 需要写在这个标签上面 --> 

3.5 客户端测试

$ rm -rf ~/.m2/
$ mvn archetype:generate -DgroupId=cn.ljz.ljzweb -DartifactId=lzjweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
# 构建项目,可以看到在构建的过程中使用的是nexus私服地址
$ cd lzjweb/
$ mvn package    # 打包测试(产生target目录则表示正常)

nexus web页面查看

2021-03-10_144054

本次博文搭建的nexus仅仅是为了帮助内网主机可以正常使用maven,如果需要上传打包好的项目,可以参考:https://blog.51cto.com/14157628/2472382#h10

posted @ 2021-03-10 14:47  吕振江  阅读(808)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end