群暉DS218+做maven私服(nexus3)

程序員欣宸 發佈 2020-02-01T18:18:55+00:00

略為麻煩群暉DS218+家裡有一台群暉DS218+,很久以來始終24小時開機為全家服務,如果能把私服裝到這裡,似乎前面的糾結就沒有了;下圖是DS218+剛買來的樣子,兩塊NAS硬碟,一直穩定服務中:下圖是網購的內存條,現在一共2+8=10G內存,內存充足才是敢折騰maven私服的

背景

本人是個Java工程師,在家裡擼代碼時台式機、筆記本、虛擬機都可能用來編譯構建maven項目,此時如果家裡有個maven私服,對構建速度的提升效果是明顯的;

糾結

準備一台電腦部署好私服後,是24小時開機麼?似乎有些浪費,那麼用的時候開啟,用完關機?略為麻煩(您想罵我懶麼?您罵得對...)

群暉DS218+

家裡有一台群暉DS218+,很久以來始終24小時開機為全家服務,如果能把私服裝到這裡,似乎前面的糾結就沒有了;

  • 下圖是DS218+剛買來的樣子,兩塊NAS硬碟,一直穩定服務中:
  • 下圖是網購的內存條,現在一共2+8=10G內存,內存充足才是敢折騰maven私服的底氣:

思路

其實操作很簡單:群暉帶有docker服務,用docker來部署nexus即可,所以,本文其實也就是群暉docker的基本操作記錄,以下幾處是要注意的地方:

  1. 容器埠
  2. 容器數據卷
  3. 文件權限
  4. 登錄容器操作

環境信息

  • 群暉系統: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私服的實戰就完成了,今後在家擼代碼算是有了穩定的私服,無需打理,隨時可用。

歡迎關注我的公眾號:程式設計師欣宸


關鍵字: