zoukankan      html  css  js  c++  java
  • CentOS8.1中搭建Nexus3服务器

      今天做Java开发的同学应该都用过Maven,知道Maven中有仓库这个角色的存在,比如Maven官方中央仓库(http://repo1.maven.org/maven2)、国内阿里云中央仓库(http://maven.aliyun.com/nexus/content/groups/public),日常开发也经常从这些国内外的中央仓库中下载jar包(国外的仓库由于网络原因一般都非常慢,所以国内的一些公司提供了国际库的镜像仓库)。有些公司也会搭一个自己公司的私有仓库,一来可以统一管理全公司的jar包获取与下发,二来也方便自己公司开发的jar包的内部分发。今天就来讲一下Maven仓库管理器服务的搭建!Maven仓库管理器有很多,接下来要讲的就是这众多仓库管理器中的独秀——Nexus Repository Manager。如果你认真看过刚刚阿里云中央仓库的地址,你会发现其中也有一个nexus!没有错,阿里云中央仓库就是使用Nexus搭建的(新地址:https://maven.aliyun.com/repository/public)!

      Nexus是Sonatype公司的一个产品,我们试着去打开它的官网首页发现很难打开的,但是它的官方帮助文档首页却能打开,里面有Nexus的产品帮助文档和与下载链接:

      通读一遍官方帮助文档后,我们得到以下重要信息:

    1. 部署Nexus的服务器至少要有4个CPU(一个四核的CPU也可以)和至少8G的物理内存;
    2. 如果是Unix/Linux版本的Nexus包是不含JDK的,需要自行安装并配置好相应版本的JDK;
    3. Nexus在Unix/Linux上表现最佳;
    4. 在Unix/Linux上为了安全起见,不要使用root账号运行Nexus服务;

      官方都建议将Nexus部署在Unix/Linux上,那我们就来在Linux上部署一下!

      第一步:新建并配置好一台4核、8G内存和60G硬盘的CentOS8.1虚拟机(CentOS8.1的基本安装和配置);

      第二步:安装JDK,可以使用包管理工具安装(例如yum包管理器),也可以使用二进制包手工安装:

    • 通过yum包管理器安装JDK

      可以先通过 # yum list java* 命令查看一下系统yum源识别到的JDK有哪些:

    # yum list java*
    Last metadata expiration check: 0:59:24 ago on Mon 08 Jun 2020 09:44:52 PM CST.
    Available Packages
    java-1.8.0-openjdk.x86_64               1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-accessibility.x86_64 1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-demo.x86_64          1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-devel.x86_64         1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-headless.x86_64      1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-javadoc.noarch       1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-javadoc-zip.noarch   1:1.8.0.252.b09-2.el8_1             AppStream
    java-1.8.0-openjdk-src.x86_64           1:1.8.0.252.b09-2.el8_1             AppStream
    java-11-openjdk.x86_64                  1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-demo.x86_64             1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-devel.x86_64            1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-headless.x86_64         1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-javadoc.x86_64          1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-javadoc-zip.x86_64      1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-jmods.x86_64            1:11.0.7.10-1.el8_1                 AppStream
    java-11-openjdk-src.x86_64              1:11.0.7.10-1.el8_1                 AppStream
    java-atk-wrapper.x86_64                 0.33.2-6.el8                        AppStream
    javapackages-filesystem.noarch          5.3.0-1.module_el8.0.0+11+5b8c10bd  AppStream
    javapackages-tools.noarch               5.3.0-1.module_el8.0.0+11+5b8c10bd  AppStream

      发现都是openjdk系列的版本,因为openjdk开源免费,而Oracle JDK在jdk-8u201之后的版本就开始收费了~

      如果确认使用openjdk的话(其实功能上与Oracle JDK相应的版本没啥区别),只要使用命令# yum -y install XXX 安装相应的版本就可以了:

    # yum -y install java-1.8.0-openjdk.x86_64 

      由yum包管理工具会将JDK直接安装到 /usr/lib/jvm 目录下,并在/usr/bin目录中创建java可执行程序的软链接, 而/usr/bin目录是操作系统PATH变量中预设的值,所以装完之后就不需要再做环境变量配置就能使用了!

      装完即可通过 # java -version查看一下是否安装成功:

    # java -version
    openjdk version "1.8.0_252"
    OpenJDK Runtime Environment (build 1.8.0_252-b09)
    OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

      可以看到,已经装好了!yum包管理工具安装JDK简单方便,但它是需要服务器能联网来下载JDK包的,如果服务器不能联网,那就得用事先下载好的离线二进制JDK包进行手工安装了!

      一会我们再演示一下手工通过离线二进制包来安装JDK的方法,先将前面yum包管理工具安装的JDK卸载(参数最后的*号是匹配所有的):

    # yum -y remove java-1.8.0-openjdk*

      同样,卸载完后你也可以 # java -version查看一下是否真的卸载完成了:

    # java -version
    -bash: /usr/bin/java: No such file or directory
    • 手工通过离线二进制包来安装JDK

      这次我们使用Oracle最后一个免费版的JDK(jdk-8u201)来做安装演示,先在服务器的 /usr/local 目录下创java目录:

    # mkdir /usr/local/java

      然后上传下载好的JDK包(jdk-8u201-linux-x64.tar.gz)到服务器的 /usr/local/java目录下,并使用 tar 命令解压:

    # tar -vxf /usr/local/java/jdk-8u201-linux-x64.tar.gz -C /usr/local/java

      解压完后,用vi或vim打开 /etc/profile 文件配置系统环境变量,在文件的最后新加三行:

    export JAVA_HOME=/usr/local/java/jdk1.8.0_201
    export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
    export PATH=$PATH:$JAVA_HOME/bin

      保存并退 /etc/profile 文件,接着使用 source 命令使配置生效:

    # source /etc/profile

      最后,同样可通过 # java -version查看一下是否安装完成:

    # java -version
    java version "1.8.0_201"
    Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

      第三步:将下载好的Linux版本的Nexus安装包(latest-unix.tar.gz)上传到服务器的 /opt 目录下(Linux服务器文件上传与下载Linux系统目录说明);

      第四步:使用 tar 命令解压 latest-unix.tar.gz ,得到 nexus-3.23.0-03和sonatype-work两个目录,前者为Nexus软件本身,后者为Nexus工作目录:

    # tar -vxf /opt/latest-unix.tar.gz 

      第五步:新建nexus用户组和nexus用户,并授以其第四步中解压出来的Nexus相关目录的权限:

    # groupadd nexus
    # useradd nexus -d /home/nexus -s /bin/sh -g nexus
    
    # chown -R nexus:nexus /opt/nexus-3.23.0-03
    # chmod -R 750 /opt/nexus-3.23.0-03/
    
    # chown -R nexus:nexus /opt/sonatype-work/
    # chmod -R 750 /opt/sonatype-work/

      第六步:配置Nexus以新建的nexus用户来运行服务(否则将以root账号运行),编辑Nexus的解压安装目录下的 bin/nexus.rc 运行配置文件,指明运行Nexus服务的用户:

    # vim /opt/nexus-3.23.0-03/bin/nexus.rc 
    run_as_user="nexus"

      第七步:配置Nexus使用的JDK或JRE路径,该配置项的参数名为 INSTALL4J_JAVA_HOME_OVERRIDE ,它就在Nexus的可执行文件bin/nexus中 ,该文件非常大,不方便直接用vi或vim编辑目标参数项,所以先用grep命令筛选一下

    # grep -i "INSTALL4J_JAVA_HOME_OVERRIDE" /opt/nexus-3.23.0-03/bin/nexus
    # INSTALL4J_JAVA_HOME_OVERRIDE=
      test_jvm "$INSTALL4J_JAVA_HOME_OVERRIDE"

      从结果中可以看出就是被注释掉的那行 # INSTALL4J_JAVA_HOME_OVERRIDE= ,我们将其替换成去掉注释并带上参数值便可,但替换前我们得先备份一下(养成高风险操作前备份的习惯):

    # cp /opt/nexus-3.23.0-03/bin/nexus /opt/nexus-3.23.0-03/bin/nexus.bak

      确认备份好后,接着用sed命令以替换字符串的方式改变配置(sed参数字符串表达式里的分隔符有多种,比如%、#,要视情况用),并重新过滤INSTALL4J_JAVA_HOME_OVERRIDE参数相关内容,发现已经替换好了:

    # sed -i "s%# INSTALL4J_JAVA_HOME_OVERRIDE=%INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/java/jdk1.8.0_201%g" /opt/nexus-3.23.0-03/bin/nexus
    #
    grep -i "INSTALL4J_JAVA_HOME_OVERRIDE" /opt/nexus-3.23.0-03/bin/nexus INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/java/jdk1.8.0_201 test_jvm "$INSTALL4J_JAVA_HOME_OVERRIDE"

      第八步:将Nexus服务配置为操作系统systemd类的服务:

            使用命令 # vim /etc/systemd/system/nexus.service 创建Nexus服务单元配置文件,并填入以下配置信息,注意ExecStart和ExecStop的值是你自己的nexus可执行程序路径:

    [Unit]
    Description=nexus service
    After=network.target
    
    [Service]
    Type=forking
    LimitNOFILE=65536
    ExecStart=/opt/nexus-3.23.0-03/bin/nexus start
    ExecStop=/opt/nexus-3.23.0-03/bin/nexus stop
    User=nexus
    Restart=on-abort
    TimeoutSec=600
    
    [Install]
    WantedBy=multi-user.target

      第九步:重新载入 systemctl 控制器并启用nexus.service服务单元,最后尝试启动nexus.service服务(注意Nexus服务启动很花时间,要多等等):

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

      如果发现启动命令瞬间完成,也没有任何输出,可以到 /opt/sonatype-work/nexus3/log/ 目录看看是否有nexus.log日志文件生成,如果没有,那么可能是Nexus服务的PID文件无法写入的原因,Nexus服务的PID文件生成在系统的 /tmp 目录中,文件名的格式是下面的形式:

      文件名前缀:"i4jdaemon_"

      文件名后缀:是nexus可执行程序完整路径将斜杠替换为下划线形成的字符串,例如:opt_nexus_nexus-3.14.0-04_bin_nexus

      最后形成的Nexus服务的PID文件名可能是这形式的 i4jdaemon__opt_nexus-3.23.0-03_bin_nexus

      将该文件删除,再使用命令 # systemctl start nexus.service 重新尝试启动!

      再次查看 /opt/sonatype-work/nexus3/log/ 中是否有nexus.log日志文件生成,如果有,那么查看下该文件的末尾(注意Nexus服务启动很花时间,要多等等):

    # tail -f /opt/sonatype-work/nexus3/log/nexus.log

    -------------------------------------------------

    Started Sonatype Nexus OSS 3.23.0-03

    -------------------------------------------------

      如果能看到 “Started Sonatype Nexus OSS”字样(日常启动时也可能看到“state change RUNNING -> WAITING (OK)”),则表示Nexus服务启动成功了!默认的访问端口是8081!不要忘了将你使用的端口在防火墙中开放:

    # firewall-cmd --add-port=8081/tcp --permanent 
    success
    # firewall-cmd --reload

      现在可以从外部宿主机访问一下我们的Nexus仓库管理器了:

      首次访问会在登录框上面提示我们admin用户的密码保存的位置,该密码是系统生成的初始密码,后面用其登录后会立即要求修改密码,我们打开密码保存文件看看:

    # cat /opt/sonatype-work/nexus3/admin.password 
    0901b086-a97f-4039-bc6d-0d6d561e7895

      使用该密码登录,按着向导修改初始密码就可以了!

      Nexus服务的默认访问端口由数据目录下的nexus属性配置文件($data-dir/etc/nexus.properties)的 application-port 配置项配置,而数据目录又由Nexus服务的JVM配置文件($install-dir/bin/nexus.vmoptions)中的-Dkaraf.data参数指定

    # ls /opt/nexus-3.23.0-03/bin/
    contrib  nexus  nexus.bak  nexus.rc  nexus.vmoptions
    
    # cat /opt/nexus-3.23.0-03/bin/nexus.vmoptions 
    
    -Xms2703m
    -Xmx2703m
    -XX:MaxDirectMemorySize=2703m
    -XX:+UnlockDiagnosticVMOptions
    -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
    -Dkaraf.log=../sonatype-work/nexus3/log
    -Djava.io.tmpdir=../sonatype-work/nexus3/tmp
    -Dkaraf.startLocalConsole=false
    #
    # additional vmoptions needed for Java9+
    #
    # --add-reads=java.xml=java.logging
    # --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED
    # --patch-module=java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.6.jar
    # --patch-module=java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.6.jar
    # --add-opens=java.base/java.security=ALL-UNNAMED
    # --add-opens=java.base/java.net=ALL-UNNAMED
    # --add-opens=java.base/java.lang=ALL-UNNAMED
    # --add-opens=java.base/java.util=ALL-UNNAMED
    # --add-opens=java.naming/javax.naming.spi=ALL-UNNAMED
    # --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED
    # --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
    # --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED
    # --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED
    #
    # comment out this vmoption when using Java9+
    #
    -Djava.endorsed.dirs=lib/endorsed
    # ls /opt/sonatype-work/nexus3/etc/
    logback  nexus.properties
    
    # cat /opt/sonatype-work/nexus3/etc/nexus.properties 
    # Jetty section
    # application-port=8081
    # 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

       $install-dir/bin/nexus.vmoptions配置文件和$data-dir/etc/nexus.properties配置文件是Nexus服务的主要配置文件,是调节Nexus服务功能和性能的地方,各参数的配置方式和作用请自行参考官方文档。

  • 相关阅读:
    怎么往mac中finder个人收藏里添加文件夹
    UIView 动画
    添加.pch文件
    声明属性的关键字
    创建app前的环境配置/AppIcon/启动图片
    修改动画的旋转支点
    实现自定义xib和storyboard的加载,
    Quartz2D绘图 及实例:下载进度
    帧动画
    在职研究生第一单元第二单元第三单元第四单元是什么?
  • 原文地址:https://www.cnblogs.com/xuruiming/p/13069967.html
Copyright © 2011-2022 走看看