Linux搭建Nexus私有中心仓库

3,215 阅读4分钟

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客户端,它占用较少的内存,基于简单文件系统而非数据库。

为什么要构建Nexus私服?

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

同时Nexus支持仓库有:AptBowerCocoaPodsCondaDockerGit LFSGoMavenNpmNuGetPyPiRawRubyGemsYum

准备工作

上传已已下载的JDKNexus到服务器,或者直接服务器上下载相应的包

包名 版本 下载地址
jdk-8u231-linux-x64.tar.gz 1.8.0_231 Oracle JDK
nexus-3.19.1-01-unix.tar.gz 3.19.1 3.19.1下载地址
  1. 在服务器上创建/root/nexus_install路径存放Nexus相关部署包,然后上传文件至该路径下
# mkdir /root/nexus_install && cd /root/nexus_install/
  1. 创建部署路径
# mkdir -p /data/repo/{nexus,jdk}
  1. 本地上传相关包到服务器,其中~/Downloads/package为你本地存放相关包的文件路径。
# scp ~/Downloads/package/{jdk-8u231-linux-x64.tar.gz,nexus-3.19.1-01-unix.tar.gz} root@192.168.1.182:/root/nexus_install/

JDK安装

### 获取JDK

配置JDK

解压JDK到指定目录

# tar -zxvf /root/nexus_install/jdk-8u231-linux-x64.tar.gz -C /data/repo/jdk/

仓库搭建

### 获取Nexus

配置Nexus

解压Nexus包到指定目录

# tar -zxvf /root/nexus_install/nexus-3.19.1-01-unix.tar.gz -C /data/repo/nexus/

修改配置文件

指定JDK路径

编辑配置文件,指定启动JDK版本,需要最低版本1.8,最高版本1.8

# vim /data/repo/nexus/nexus-3.19.1-01/bin/nexus

修改如下配置,添加指定JDK版本

...
# Uncomment the following line to override the JVM search sequence
# INSTALL4J_JAVA_HOME_OVERRIDE=
INSTALL4J_JAVA_HOME_OVERRIDE=/data/repo/jdk/jdk1.8.0_231/  # 指定使用JDK的HOME路径
# Uncomment the following line to add additional VM parameters
# INSTALL4J_ADD_VM_PARAMS=


INSTALL4J_JAVA_PREFIX=""
GREP_OPTIONS=""

fill_version_numbers() {
  if [ "$ver_major" = "" ]; then
...

修改默认端口

编辑nexus-default.properties配置文件

# vim /data/repo/nexus/nexus-3.19.1-01/etc/nexus-default.properties

修改application-port值为我们需要的端口(默认端口:8081)

## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=18081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/

# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
 nexus-pro-feature

nexus.hazelcast.discovery.isEnabled=true

启动Nexus

添加到服务

以下提供两种添加开机自启动的方式,按实际情况选择即可

update-rc.d
# ln -s /data/repo/nexus/nexus-3.19.1-01/bin/nexus /etc/init.d/nexus

service nexus start|run|stop|status|restart|force-reload

  • start:在后台启动服务,不在界面上打印任何启动或者运行时信息

  • run:启动服务,但是在界面上打印出启动信息以及运行时信息以及日志信息

  • stop:关闭服务

  • status:查看nexus运行状态

  • restart:重启服务

  • force-reload:强制重载一遍配置文件,然后重启服务

# cd /etc/init.d
# update-rc.d nexus defaults
# service nexus start
systemd

创建服务脚本

# cat > /etc/systemd/system/nexus.service << EOF
> [Unit]
> Description=nexus service
> After=network.target
>
> [Service]
> Type=forking
> LimitNOFILE=65536
> ExecStart=/data/repo/nexus/nexus-3.19.1-01/bin/nexus start
> ExecStop=/data/repo/nexus/nexus-3.19.1-01/bin/nexus stop
> User=nexus
> Restart=on-abort
>
> [Install]
> WantedBy=multi-user.target
> EOF

激活脚本

# systemctl daemon-reload
# systemctl enable nexus.service
# systemctl start nexus.service

启动nexus

如果直接启动nexus会报如下错误

# service nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus

官方不推荐使用root账号来启动,现在我们创建启动用户

# useradd -d /data/repo/nexus/sonatype-work/ nexus
# chown -R nexus.nexus /data/repo/

并修改nexus.rc文件

# echo 'run_as_user="nexus"' > /data/repo/nexus/nexus-3.19.1-01/bin/nexus.rc

如无报错,正常启动后浏览器访问http://ip:18081即可看到nexus主页

初次登陆,admin密码请查看cat /data/repo/nexus/sonatype-work/nexus3/admin.password

错误处理

磁盘空间不足

查看日志:tailf /data/repo/nexus/sonatype-work/nexus3/log/nexus.log

报错如下,磁盘空间需要大于4GB空闲空间