1. 程式人生 > >群暉DS218+做maven私服(nexus3)

群暉DS218+做maven私服(nexus3)

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 背景 本人是個Java工程師,在家裡擼程式碼時桌上型電腦、筆記本、虛擬機器都可能用來編譯構建maven專案,此時如果家裡有個maven私服,對構建速度的提升效果是明顯的; ### 糾結 準備一臺電腦部署好私服後,是24小時開機麼?似乎有些浪費,那麼用的時候開啟,用完關機?略為麻煩(您想罵我懶麼?您罵得對...) ### 群暉DS218+ 家裡有一臺群暉DS218+,很久以來始終24小時開機為全家服務,如果能把私服裝到這裡,似乎前面的糾結就沒有了; 1. 下圖是DS218+剛買來的樣子,兩塊NAS硬碟,一直穩定服務中: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075826788-2029382086.png) 2. 下圖是網購的記憶體條,現在一共2+8=10G記憶體,記憶體充足才是敢折騰maven私服的底氣: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075827677-415075283.png) ### 思路 其實操作很簡單:群暉帶有docker服務,用docker來部署nexus即可,所以,本文其實也就是群暉docker的基本操作記錄,以下幾處是要注意的地方: 1. 容器埠 2. 容器資料卷 3. 檔案許可權 4. 登入容器操作 ### 環境資訊 1. 群暉系統:DSM 6.2.2-24922 Update 4 2. 部署nexus之前群暉的資源情況: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075828659-1583488414.png) 3. 開啟Docker,在登錄檔頁面搜尋nexus,找到sonatype/nexus3,選擇標籤3.19.1,如下圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075829120-1496941792.png) 4. 映象下載完畢後,在映像頁面選中該映象,點選啟動按鈕: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075829609-504234120.png) 5. 在啟動頁面點選高階設定: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075829887-1356080682.png) 6. 允許容器自動重啟,建立桌面快捷方式: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075830101-1000555255.png) 7. 資料卷對映,按照下圖操作,在宿主機新建一個資料夾,名為nexus3: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075830395-1314439894.png) 8. 再將容器的/nexus-data目錄對映到宿主機的nexus3,這樣容器的所有資料都能儲存下來了: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075830749-432096460.png) 9. 埠對映,如果宿主機的8081埠沒有被佔用,就直接對映到8081吧,否則換一個沒佔用的: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075831062-674732794.png) 10. 設定完成,勾選嚮導完成後執行此容器,再點選應用即可建立nexus3容器: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075831442-1756012711.png) 11. 本以為這樣就完成了,沒想到彈出很多報錯的訊息: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075831699-475879620.png) 12. 如下圖,檢視容器日誌: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075832201-932146291.png) 13. 很快就查到了問題:宿主機對映給容器的目錄,容器的程序因為許可權問題寫操作失敗了: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075832679-2042818600.png) 14. 想想也是,為了安全起見,宿主機的nexus3目錄,容器是不能隨意操作的,這裡我們就給把這個目錄的寫許可權放開吧,如下圖,用File Station來設定這個目錄: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075833075-154936214.png) 15. 增加寫入許可權: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075833418-543277893.png) 16. 上述操作完畢後開始等待,因為容器每次意外退出後會自動重啟,終於,看到了啟動成功的日誌: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075833778-1396423116.png) ### 操作nexus3 1. 我這裡群暉的內網IP是192.168.50.42,因此瀏覽器訪問地址:http://192.168.50.42:8081,熟悉的頁面出來了: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075834061-1384863026.png) 2. 接下來要面對的問題是如何取得登入密碼,nexus的預設密碼儲存在容器的/nexus-data/admin.password檔案中,所以有以下兩種方法取得,您任選一種吧; 3. 容器的/nexus-data目錄已經對映到宿主機的docker/nexus3目錄,所以用File Statiion開啟該目錄,下載admin.password檔案,再用文字編輯器開啟即可: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075834467-533447834.png) 4. 另一種方法是進入容器檢視該檔案,操作如下,選中容器增加一個命令: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075834895-638316912.png) 5. 在彈出的輸入框中輸入/bin/bash,這樣就在該容器的namespace下新建了bash程序,該程序可見同一個namespace下的所有檔案,包括/nexus-data/admin.password,再用cat命令檢視檔案內容即可: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075835227-894168976.png) 6. 拿到密碼後就能在頁面上登入nexus了,賬號是admin: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075835539-819415065.png) 7. 登入成功後,按照提示設定新密碼: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075835908-1773449182.png) 8. 接下來就是nexus的常規操作了,這裡不再多說,挑重點說吧,新建一個管理員許可權的賬號bolingcavalry,設定密碼為123456: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075836253-956664765.png) 9. 取得私服的中央倉庫地址: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075836583-2132200477.png) 10. 至此,部署成功,接下來驗證一下這個私服好不好用。 ### 準備兩臺電腦驗證Nexus服務 下圖是部署私服後的架構圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075836950-681803234.png) 準備兩臺電腦,分別是A電腦和B電腦,用來驗證剛剛部署的Nexus3可以快取中央倉庫的jar包(您也可以用虛擬機器建立兩臺電腦); 1. A、B兩臺電腦都已經裝好了JDK8和Maven3; 2. A、B兩臺電腦上的maven目錄下的conf/settings.xml檔案都要做以下修改; 3. 找到servers節點,增加以下內容: ```xml ``` 4. 找到mirrors節點,增加以下內容,其中url的內容就是前面得到的maven-central倉庫地址: ```xml ``` ### 在A電腦上編譯構建專案(應該很慢) 在A電腦上編譯開源專案spring-cloud-alibaba,此時Nexus上沒有快取任何jar包,所以編譯速度會很慢,因為所有依賴jar都要從中央倉庫下載,我們來試試: 1. 登入A電腦,下載spring-cloud-alibaba的2.1.1.RELEASE歸檔包: ```shell wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz ``` 2. 解壓下載的檔案: ```shell tar -zxvf v2.1.1.RELEASE.tar.gz ``` 3. 進入解壓後的目錄: ```shell cd spring-cloud-alibaba-2.1.1.RELEASE/ ``` 4. 編譯: ```shell mvn clean compile -U -DskipTests ``` 5. 編譯完成,如下圖紅框所示,本次編譯耗時7分32秒: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075837551-501717984.png) 6. 去Nexus網頁上看看,如下圖,此時已經快取了不少jar: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075837965-1889346542.png) ### 在B電腦上編譯構建專案(應該很快) 1. 在B電腦做同樣的操作,此時Nexus上已快取了編譯所需的jar包,編譯過程明顯變快,最終操作結果如下圖,僅用1分零8秒: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075838492-1806119986.png) 2. 看看nexus服務佔用的資源,記憶體用了不少,如果沒加記憶體條,用自帶的2G記憶體估計會拖垮整個群暉,雖然容器可以限制記憶體,但是也會導致nexus程序頻繁的GC,依舊很卡,所以保障記憶體充足是很有必要的: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202010/485422-20201026075838796-1245247688.png) 至此,群暉DS218+部署maven私服的實戰就完成了,今後在家擼程式碼算是有了穩定的私服,無需打理,隨時可用。 ### 歡迎關注公眾號:程式設計師欣宸 > 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界... [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo