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服務功能和性能的地方,各參數的配置方式和作用請自行參考官方文檔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM