背景
本人是個Java工程師,在家裡擼代碼時台式機、筆記本、虛擬機都可能用來編譯構建maven項目,此時如果家裡有個maven私服,對構建速度的提升效果是明顯的;
糾結
準備一台電腦部署好私服後,是24小時開機麼?似乎有些浪費,那麼用的時候開啟,用完關機?略為麻煩(您想罵我懶麼?您罵得對...)
群暉DS218+
家裡有一台群暉DS218+,很久以來始終24小時開機為全家服務,如果能把私服裝到這裡,似乎前面的糾結就沒有了;
- 下圖是DS218+剛買來的樣子,兩塊NAS硬碟,一直穩定服務中:
- 下圖是網購的內存條,現在一共2+8=10G內存,內存充足才是敢折騰maven私服的底氣:
思路
其實操作很簡單:群暉帶有docker服務,用docker來部署nexus即可,所以,本文其實也就是群暉docker的基本操作記錄,以下幾處是要注意的地方:
- 容器埠
- 容器數據卷
- 文件權限
- 登錄容器操作
環境信息
- 群暉系統:DSM 6.2.2-24922 Update 4
- Nexus:3.19.1
接下來開始折騰吧;
操作
- 瀏覽器進入群暉;
- 部署nexus之前群暉的資源情況:
- 打開Docker,在註冊表頁面搜索nexus,找到sonatype/nexus3,選擇標籤3.19.1,如下圖:
- 鏡像下載完畢後,在映像頁面選中該鏡像,點擊啟動按鈕:
- 在啟動頁面點擊高級設置:
- 允許容器自動重啟,創建桌面快捷方式:
- 數據卷映射,按照下圖操作,在宿主機新建一個文件夾,名為nexus3:
- 再將容器的/nexus-data目錄映射到宿主機的nexus3,這樣容器的所有數據都能保存下來了:
- 埠映射,如果宿主機的8081埠沒有被占用,就直接映射到8081吧,否則換一個沒占用的:
- 設置完成,勾選嚮導完成後運行此容器,再點擊應用即可創建nexus3容器:
- 本以為這樣就完成了,沒想到彈出很多報錯的消息:
- 如下圖,查看容器日誌:
- 很快就查到了問題:宿主機映射給容器的目錄,容器的進程因為權限問題寫操作失敗了:
- 想想也是,為了安全起見,宿主機的nexus3目錄,容器是不能隨意操作的,這裡我們就給把這個目錄的寫權限放開吧,如下圖,用File Station來設置這個目錄:
- 增加寫入權限:
- 上述操作完畢後開始等待,因為容器每次意外退出後會自動重啟,終於,看到了啟動成功的日誌:
操作nexus3
- 我這裡群暉的內網IP是192.168.50.42,因此瀏覽器訪問地址:http://192.168.50.42:8081,熟悉的頁面出來了:
- 接下來要面對的問題是如何取得登錄密碼,nexus的默認密碼保存在容器的/nexus-data/admin.password文件中,所以有以下兩種方法取得,您任選一種吧;
- 容器的/nexus-data目錄已經映射到宿主機的docker/nexus3目錄,所以用File Statiion打開該目錄,下載admin.password文件,再用文本編輯器打開即可:
- 另一種方法是進入容器查看該文件,操作如下,選中容器增加一個命令:
- 在彈出的輸入框中輸入/bin/bash,這樣就在該容器的namespace下新建了bash進程,該進程可見同一個namespace下的所有文件,包括/nexus-data/admin.password,再用cat命令查看文件內容即可:
- 拿到密碼後就能在頁面上登錄nexus了,帳號是admin:
- 登錄成功後,按照提示設置新密碼:
- 接下來就是nexus的常規操作了,這裡不再多說,挑重點說吧,新建一個管理員權限的帳號bolingcavalry,設置密碼為123456:
- 取得私服的中央倉庫地址:
至此,部署成功,接下來驗證一下這個私服好不好用。
準備兩台電腦驗證Nexus服務
下圖是部署私服後的架構圖:
準備兩台電腦,分別是A電腦和B電腦,用來驗證剛剛部署的Nexus3可以緩存中央倉庫的jar包(您也可以用虛擬機創建兩台電腦);
- A、B兩台電腦都已經裝好了JDK8和Maven3;
- A、B兩台電腦上的maven目錄下的conf/settings.xml文件都要做以下修改:
- 找到servers節點,增加以下內容:
<server>
<id>maven-central</id>
<username>bolingcavalry</username>
<password>123456</password>
</server>
- 找到mirrors節點,增加以下內容,其中url的內容就是前面得到的maven-central倉庫地址:
<mirror>
<id>maven-central</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.50.42:8081/repository/maven-central/</url>
</mirror>
在A電腦上編譯構建項目(應該很慢)
在A電腦上編譯開源項目spring-cloud-alibaba,此時Nexus上沒有緩存任何jar包,所以編譯速度會很慢,因為所有依賴jar都要從中央倉庫下載,我們來試試:
- 登錄A電腦,下載spring-cloud-alibaba的2.1.1.RELEASE歸檔包:
wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz
- 解壓下載的文件:
tar -zxvf v2.1.1.RELEASE.tar.gz
- 進入解壓後的目錄:
cd spring-cloud-alibaba-2.1.1.RELEASE/
- 編譯:
mvn clean compile -U -DskipTests
- 編譯完成,如下圖紅框所示,本次編譯耗時7分32秒:
- 去Nexus網頁上看看,如下圖,此時已經緩存了不少jar:
在B電腦上編譯構建項目(應該很快)
在B電腦做同樣的操作,此時Nexus上已緩存了編譯所需的jar包,編譯過程明顯變快,最終操作結果如下圖,僅用1分零8秒:
- 看看nexus服務占用的資源,內存用了不少,如果沒加內存條,用自帶的2G內存估計會拖垮整個群暉,雖然容器可以限制內存,但是也會導致nexus進程頻繁的GC,依舊很卡,所以保障內存充足是很有必要的:
至此,群暉DS218+部署maven私服的實戰就完成了,今後在家擼代碼算是有了穩定的私服,無需打理,隨時可用。