nexus安装
# 1. nexus介绍
# nexus是什么?
Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
不仅如此,他还可以用来创建yum、pypi、npm、docker、nuget、rubygems 等各种私有仓库。
如果使用了公共的 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 客户端,它占用较少的内存,基于简单文件系统而非数据库
# 为什么要构建 Nexus 私服?
如果没有 Nexus 私服,我们所需的所有构件都需要通过 maven 的中央仓库和第三方的 Maven 仓库下载到本地,而一个团队中的所有人都重复的从 maven 仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到 maven 仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的 maven 私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
总之,在本地构建 nexus私服的好处有:
- 加速构建
- 节省带宽
- 节省中央 maven 仓库的带宽
- 稳定(应付一旦中央服务器出问题的情况)
- 控制和审计
- 能够部署第三方构件
- 可以建立本地内部仓库
- 可以建立公共仓库
这些优点使得 Nexus 日趋成为最流行的 Maven 仓库管理器
# 2.版本选择及下载
# 关于版本选择
以前公司使用的版本一直是用的一个2.x的版本,旧的版本各种陈旧,在这种陈旧的情况下,许多地方已经破破烂烂了,比如最重要的功能之一,自动同步远程仓库的依赖,就已经无法使用,看到版本已经更新到3.x,因此就想着搭一个高版本的来体验一下。
这么一体验,发现这个东东,真真的是一个特别好的利器,神器。
# 关于下载
官网地址:https://www.sonatype.com/
- 可以直接通过下边链接下载
最新版本
:https://www.sonatype.com/oss-thank-you-tar.gz - 可以通过后边的这个链接选择
历史版本
:https://help.sonatype.com/repomanager3/download/download-archives—repository-manager-3(opens new window) (opens new window)
可能一般网络下在浏览器里边下载比较慢,那么可以复制链接用迅雷下载,就会好一些。
接下来开始整个安装的流程介绍,我们先来介绍普通方式的安装。
# 3.安装jdk-1.8
nexus的安装依赖jdk环境。最好安装1.8版本的,否则可能会遇到其他不可知问题。此安装不再赘述。
# 4.部署nexus
[root@nexus mnt]$tar xf nexus-3.12.1-01-unix.tar.gz
[root@nexus mnt]$ls
nexus-3.12.1-01 nexus-3.12.1-01-unix.tar.gz sonatype-work
2
3
# 2.启动
cd /mnt/nexus-3.12.1-01/bin
./nexus run &
2
大概等待一分钟左右,如果在日志输出当中看到如下显示,则说明启动成功。
Started Sonatype Nexus OSS 3.12.1-01
# 3.访问
默认监听端口为8081
,默认用户名密码为admin/admin123
,因此可以访问以下首页并登陆。
# 4.优化配置
# 1.设置开机启动
ln -s /mnt/nexus-3.12.1-01/bin/nexus /etc/init.d/nexus3
chkconfig --add nexus3
chkconfig nexus3 on
2
3
# 2.配置运行用户
这个地方可以使用root运行,不过官方文档里边也不建议使用root来运行,因此使用普通用户来运行。
[root@nexus ~]$useradd nexus
[root@nexus bin]$vim nexus.rc
run_as_user="nexus"
配置之后记得更改目录权限,否则下次启动会没有权限。
[root@nexus mnt]$chown -R nexus.nexus /mnt/nexus-3.12.1-01
[root@nexus mnt]$chown -R nexus.nexus /mnt/sonatype-work
2
3
4
5
6
7
8
9
# 3.配置jdk
如果这里不配置,一般会使用默认的JAVA_HOME的变量,如果系统中有多个,那么可以进行配置。
[root@nexus bin]$vim nexus
修改第14行:
INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/jdk1.8.0_144
2
3
4
# 4.修改端口
一般使用默认的,如果需要修改,则更改/mnt/nexus-3.12.1-01/etc/nexus-default.properties
里边的配置。
这里不做修改了。
# 5.配置存储及日志位置
[root@nexus bin]$vim /mnt/nexus-3.12.1-01/bin/nexus.vmoptions
一般都不做修改,使用默认即可,这里列出是为了了解这个点。
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-Dkaraf.data=../sonatype-work/nexus3
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
2
3
4
5
6
7
# 6.配置完毕之后,重启一下服务。
注意左上角会有一个告警,这个告警的意思是系统默认的最大文件句柄太小了。
解决办法官网也已经给出了:解决文件句柄限制。 (opens new window)
因此我们照官方解决办法来做:
echo "nexus - nofile 65536" >> /etc/security/limits.conf
然后再次重启服务即可。
# 7.解决nexus下载依赖过多报错问题
执行nexus私库地址,并且npm login完成后,进行npm i下载依赖时,当依赖过多或者执行时间过长时,出现错误提示
重点是 java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 30001/30000 ms,
由此可知,错误原因是网络连接超时。分析应该是因为第三方依赖过多,导致下载依赖的时间超过了http请求的默认等待时间30000ms导致下载请求被掐断了。
知道原因就好解决了。
通过错误提示发现nexus是采用了 jetty,所以进入nexus根目录\etc\jetty,找到jetty-http.xml和jetty-https.xml
打开xml搜索Set name="idleTimeout"
将后面的default=30000改成1200000
重启服务(一定要重启服务)
再次执行npm i指令。
下载正常,问题解决。
# 5.docker方式安装
最后介绍一些使用docker的方式如何安装。
如果想使用docker来启动,那么可以参考:官方镜像介绍。(opens new window) (opens new window)
或用下边方式直接启动。
mkdir /mnt/nexus-data
docker run -d -p 8081:8081 --name nexus -v --ulimit nofile=65536:65536 /mnt/nexus-data:/nexus-data sonatype/nexus3
2