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私服的好處有:
1)加速構建;
2)節省帶寬;
3)節省中央 maven 倉庫的帶寬;
4)穩定(應付一旦中央服務器出問題的情況);
5)控制和審計;
6)能夠部署第三方構件;
7)可以建立本地內部倉庫;
8)可以建立公共倉庫
這些優點使得 Nexus 日趨成為最流行的 Maven 倉庫管理器。
2,版本選擇及下載
關於版本選擇
以前公司使用的版本一直是用的一個2.x的版本,舊的版本各種陳舊,在這種陳舊的情況下,許多地方已經破破爛爛了,比如最重要的功能之一,自動同步遠程倉庫的依賴,就已經無法使用,看到版本已經更新到3.x,因此就想着搭一個高版本的來體驗一下。
關於下載
官網地址:https://www.sonatype.com/
下載地址:https://download.sonatype.com/nexus/3/latest-unix.tar.gz (下載需要FQ)
接下來開始整個安裝的流程介紹,我們先來介紹普通方式的安裝。
3,安裝jdk-1.8
nexus的安裝依賴jdk環境。最好安裝1.8版本的,否則可能會遇到其他不可知問題。
安裝步驟可以參考:https://www.cnblogs.com/sanduzxcvbnm/p/12522735.html
4,部署nexus
1,解壓。
tar -zxv -f nexus-3.24.0-02-unix.tar.gz -C /usr/local/
下載到指定目錄並解壓,我們可以看到解壓后有通常兩個文件。
nexus-3.24.0-02 | Nexus運行所需要的文件,如運行腳本,依賴jar包等 |
---|---|
sonatype-work | 該目錄包含Nexus生成的配置文件、日志文件、倉庫文件等 |
2,啟動。
cd /usr/local/nexus-3.24.0-02
./bin/nexus run &
大概等待一分鍾左右,如果在日志輸出當中看到如下顯示,則說明啟動成功。
-------------------------------------------------
Started Sonatype Nexus OSS 3.24.0-02
-------------------------------------------------
3,訪問。
默認監聽端口為8081
,默認用戶名為admin
,密碼需要查看:/usr/local/sonatype-work/nexus3/admin.password,因此可以訪問以下首頁並登陸。
這里直接訪問了,一般內部使用,就不開啟防火牆神馬的了。
首次登陸后修改密碼:
5,配置存儲及日志位置。
cd /usr/local/nexus-3.24.0-02/bin
cat 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
# 一般都不做修改,使用默認即可,這里列出是為了了解這個點。
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-Dkaraf.data=../sonatype-work/nexus3
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
配置完畢之后,重啟一下服務。
6,啟動之后,解決一個小問題
注意左上角會有一個告警,這個告警的意思是系統默認的最大文件句柄太小了。
linux 系統修改打開文件數限制:
vim /etc/security/limits.conf
nexus - nofile 65536
然后再次重啟服務即可。
先殺死進程,然后再啟動:/usr/local/nexus-3.24.0-02/bin/nexus run &
6,docker方式安裝
最后介紹一些使用docker的方式如何安裝。
如果想使用docker來啟動,那么可以參考:官方鏡像介紹
或用下邊方式直接啟動。
mkdir /opt/nexus-data
docker run -d -p 8081:8081 --name nexus -v --ulimit nofile=65536:65536 /opt/nexus-data:/nexus-data sonatype/nexus3