nexus部署maven私服
生产环境,多数主机不可出外网,maven编译起来不太方便,随着生产环境主机数量增多,考虑需要配置一个专门的maven仓库,存储maven所需的依赖,所以就想到了nexus这个东西,特此记录!可以参考nexus官方文档!
一、nexus简介
Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。
Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库。
本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库是maven默认的远程仓库。
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
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 ,如下:
查看admin密码
$ cat /data/nexus/sonatype-work/nexus3/admin.password 8d47dd29-9cbf-472e-806e-7dbde49bbe4f
更新密码
开启匿名用户访问
三、配置maven代理
3.1 查看默认仓库类型
从图中就可以看出默认的仓库类型分为三种(其实有四种,不过最后一种不一定会用到):
- group(仓库组类型):又叫组仓库,用于方便开发人员,自己设定的仓库;
- hosted(宿主类型):内部项目的发布仓库(内部开发人员发布上去存放的仓库);
- proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径);
- virtual(虚拟类型):虚拟仓库(这个基本上用不到);
3.2 开启release的重复发版权限
3.3 设置代理仓库(采用阿里云maven仓库)
阿里云仓库的URL: https://maven.aliyun.com/nexus/content/groups/public/
查看刚才配置的仓库的URL地址
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页面查看
本次博文搭建的nexus仅仅是为了帮助内网主机可以正常使用maven,如果需要上传打包好的项目,可以参考:https://blog.51cto.com/14157628/2472382#h10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律