本文適用範圍:用戶規模不大,不須要考慮maven倉庫負載均衡的羣體。html
爲什麼部署nexus3git
以前因爲懶某些緣由,全部開發人員本身定義.m2的settings,大多使用ali提供的maven倉庫,可是最近發現這樣作有必定的問題:docker
一、有幾天aliyun的服務不大穩定,不論是maven倉庫仍是alidns都連不上;windows
二、若是換回maven central下載jar包會偏慢;bash
三、即便aliyun服務穩定,可是有些jar包沒有,若是單純把本地central改成aliyun服務會致使有些pom文件中的依賴下載不了;服務器
固然,上述3點其實也還好,畢竟換回central只是慢了點而已- -雖然是每一個人都慢了點。負載均衡
可是最近有個需求還挺明顯的:咱們這有一些本身編寫本身用的基礎庫,這類基礎庫還會常常更新,如今有個工程須要引用這些包。把jar包加到新工程並用git同步的話每次更新都要打jar包而且拷到新工程下,很差區分jar包版本,其次是若是使用windows的eclipse開發工程,更新jar包會出問題,eclipse打開時會把依賴的jar打開,此時更新jar包會失敗。並且失敗後有時會出現奇怪的git問題。eclipse
因此決定部署nexus3,優勢很明顯,經過統一的本地服務器下載jar包,多人開發不會重複下載,一是下降central壓力二是節約下載jar包時間;服務穩定,本身的服務器總不能說連不上就連不上了,就算外網崩了只要服務器上有jar包maven服務就依舊可用;能夠自定義jar包了!不用每次還得把本身的基礎庫pom文件內容拷貝到新工程了,引用本身的基礎庫dependencies裏就會把依賴的全部jar包都加進來,並且不用擔憂windows用eclipse開發git同步代碼時報錯。maven
超快速部署nexus3性能
emmmmm.....思考了一下,直接拉docker鏡像顯而易見是最簡單的部署方式,性能足夠,不會修改本地環境,而且這樣作還有一個好處是若是之後須要進行負載均衡能夠較爲方便的遷移到k8s上。那麼開始:
dockerhub官方鏡像:https://hub.docker.com/r/sonatype/nexus3/
拉取命令:
見http://www.javashuo.com/article/p-osluwdxb-kp.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>