群暉DS218+做maven私服(nexus3)
阿新 • • 發佈:2020-10-26
### 歡迎訪問我的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