本文適用范圍:用戶規模不大,不需要考慮maven倉庫負載均衡的群體。
為何部署nexus3
之前由於懶某些原因,所有開發人員自己定義.m2的settings,大多使用ali提供的maven倉庫,但是最近發現這樣做有一定的問題:
1、有幾天aliyun的服務不大穩定,不管是maven倉庫還是alidns都連不上;
2、如果換回maven central下載jar包會偏慢;
3、即使aliyun服務穩定,但是有些jar包沒有,如果單純把本地central改為aliyun服務會導致有些pom文件中的依賴下載不了;
當然,上述3點其實也還好,畢竟換回central只是慢了點而已- -雖然是每個人都慢了點。
但是最近有個需求還挺明顯的:我們這有一些自己編寫自己用的基礎庫,這類基礎庫還會經常更新,現在有個工程需要引用這些包。把jar包加到新工程並用git同步的話每次更新都要打jar包並且拷到新工程下,不好區分jar包版本,其次是如果使用windows的eclipse開發工程,更新jar包會出問題,eclipse打開時會把依賴的jar打開,此時更新jar包會失敗。而且失敗后有時會出現奇怪的git問題。
所以決定部署nexus3,優點很明顯,通過統一的本地服務器下載jar包,多人開發不會重復下載,一是降低central壓力二是節約下載jar包時間;服務穩定,自己的服務器總不能說連不上就連不上了,就算外網崩了只要服務器上有jar包maven服務就依舊可用;可以自定義jar包了!不用每次還得把自己的基礎庫pom文件內容拷貝到新工程了,引用自己的基礎庫dependencies里就會把依賴的所有jar包都加進來,而且不用擔心windows用eclipse開發git同步代碼時報錯。
超快速部署nexus3
emmmmm.....思考了一下,直接拉docker鏡像顯而易見是最簡單的部署方式,性能足夠,不會修改本地環境,並且這樣做還有一個好處是如果以后需要進行負載均衡可以較為方便的遷移到k8s上。那么開始:
dockerhub官方鏡像:https://hub.docker.com/r/sonatype/nexus3/
拉取命令:
見https://www.cnblogs.com/gaoze/p/10784961.html,此鏡像在我這里被植入了挖礦程序,本人從來未exec -it或者使用其他命令修改此鏡像創建的container,只是從mvn repositories中加入了熱門的倉庫站,並添加了個用戶,這樣還出問題很難相信不是image的問題。現在建議通過本博客提供的自建image方式自己創建maven倉庫。
執行命令:
$ docker volume create --name nexus-data $ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data my-nexus3
等待10分鍾,部署完成!
事實證明,通過官方下載的tar包部署的nexus3私服根本不需要這么久時間進行部署,僅僅需要約半分鍾即可部署完成,系統啟動狀態可以通過docker logs containerID來查看,官方提供的版本約半分鍾即可started。
解釋與說明
上面確實是部署完成了,但是總要說一下注意事項和為什么這樣就部署完成了:
首先拉個鏡像回來,然后我們創建了一個volume,這個相當於底層存儲,這樣做的好處是即使我們的nexus container某些原因壞掉了,但是我們的的底層數據:如曾經下過的jar包和pom文件,nexus組件升級補丁啥都都還在。重新用image創建一個container繼續掛載在此文件夾下就ok了。
然后說為啥要等個10分鍾,這是有原因的,nexus啟動后會檢測nexus component版本,然后進行升級,在升級過程中如果被打斷會出bug,例如我自己部署的時候習慣先不加-d(總覺得並不能一次部署成功),等了幾分鍾看差不多時ctrl+c打斷掉再創建一個-d的container正式運行,但是由於我們存儲掛載在volume上的,未完成的升級也在那個文件夾下,所以部署的時候還是會報錯,找了好久問題發現應該刪掉volume重新建一個空白的,加載空白volume就一切正常了。
nexus3配置
這步其實還挺重要的,我們一點一點來看,首先登陸系統界面:IP:8081,點擊上面的設置按鈕(那個齒輪)
點擊repositories
可以看到這是我的一個倉庫頁面,里面除了一些默認的倉庫以外,額外添加了許多新倉庫:
先說本地倉庫:
maven-releases:管理本地jar包的東西,release版,需要上傳自己的jar包時release上傳到這個倉庫。
maven-snapshots:管理本地jar包的東西,snapshot版,需要上傳自己的jar包時snapshot上傳到這個倉庫。
maven-public:可以用來整合多個倉庫源,在.m2/中的settings可以把central源設置成這個玩意。
maven-central:看起來是central其實並不是我們常用的那個central,所以我又加了一個central源代表真正的central。
知道這幾個默認倉庫有啥用了並不能真正進行使用,我們還需要加入其他源,不然有些jar包找不到,照着下面設置就行,version policy不知道選啥就用release,需要用snapshot選mixed:
至於加入哪些源,建議把如下都加上,如果覺得再加個國內的那就再加個ali的:
然后選擇maven-public,在里面的group項內把創建好的所有源都拖到group里,然后看心情調整一下順序就可以了。訪問時在.m2/文件中把central源改為public這個即可,如:
<mirrors> <mirror> <id>nexus</id> <name>private maven</name> <url>http://192.168.xxx.xxx:18081/repository/maven-public/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors>