-
Docker – 使用 Nexus3 搭設私有 NuGet 倉庫
-
Nexus 預設帳號
-
Repositories
-
上傳元件包(Package)
-
Repositories 說明
-
準備 Package
-
上傳 Package
-
使用 Package
-
拉取 Nexus 映象
-
執行 Nexus
-
NuGet
-
Nexus 私有倉庫
-
前言
-
說明
-
安裝
-
Nexus NuGet 倉庫簡單使用
-
總結
前言
NuGet
Nuget 是免費、開源的包管理工具,專註於在 .Net
、.Net Core
平臺應用開發過程中第三方元件庫的管理,相對於傳統單純的 dll 取用要方便、科學得多。
其中 nuget.org
是最著名的 NuGet 公開庫,但是企業內部開發的(業務)公共元件因為私密性或商業機密不能上傳到公共庫中,所以企業內部需要搭建一個私有的 NuGet 倉庫【私服】來支援。雖然微軟有提供的 NugetServer,但 NugetServer 用起來並不那麼方便。
而且企業有可能不止使用 C#
一種語言,可能其他的語言元件也需要管理,比如:Java
、Docker 映象
等,NugetServer 就捉襟見肘,本文我給大家帶來一款全能型的私服軟體 Nexus
。
Nexus 私有倉庫
Nexus 是一個強大的工具倉庫管理器,它極大地簡化了本地內部倉庫的維護和外部倉庫的訪問。
Nexus 支援管理 Bower 、Docker、Maven、npm、NuGet、Yum、PyPI 等工具包。最新版本的 Nexus3.x 全面支援 Docker 的私有映象儲存。
Nexus 官網:www.sonatype.com
說明
本文主要介紹怎麼在 Linux
(CentOS
) 系統上使用 Docker
來部署 Nexus ,本文使用的是 Nexus v3.15.3
版本進行操作的。
為什麼使用 Docker 來部署 Nexus,是因為作者公司現在的基礎設施為了方便維護全部使用 Docker 來部署。如果你不想使用 Dokcer 或者不想在 Linux 部署請前往官方網站下載對應安裝包。
註意:本文是在 CentOS 系統下進行操作的。
安裝
下麵介紹的安裝步驟是作者在 Linux 系統已經安裝了 Docker 為前提條件。
拉取 Nexus 映象
從 Docker Hub
拉取 Nexus 的映象到本地,我這裡拉取是最新版本的。你也可以拉取相對應版本的映象。
$ docker pull sonatype/nexus3:latest
latest: Pulling from sonatype/nexus3
a02a4930cb5d: Pull complete
2c6aa0f814dc: Pull complete
ce7b7501fc94: Pull complete
Digest: sha256:00ede0830e375c8a9758ea5d98dd020425850bbeccc822da68e7bad7ae92dbfa
Status: Downloaded newer image for sonatype/nexus3:latest
映象詳細說明:https://hub.docker.com/r/sonatype/nexus3
執行 Nexus
在執行之前先建立一個目錄用來存放 Nexus 持久化資料。
$ mkdir -p /data/nexus
使用 Docker 命令執行 Nexus 。
$ docker run -d -p 8081:8081 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3:latest
c90c62f4bd5d3f09d3f0d562e5fe41401954898729ed9f7407ed71296f372883
Docker 傳回容器的的 Hash ID,代表容器已經啟動,透過 http://serverip:8081 就能訪問Nexus了。
但是請求的時候拒絕我的請求,這個地方困擾了我很久。我第一步先排除是否是防火牆的問題。
$ firewall-cmd --state
not running
使用命令檢視防火牆沒有執行,第二步檢視容器當前狀態。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
c90c62f4bd5d sonatype/nexus3:latest "sh -c ${SONATYPE_DI…" 27 minutes ago Exited
發現這個容器的狀態變成 Exited
已經退出,找到問題所在可能是什麼原因導致 nexus 沒有啟動起來。現在使用容器日誌查一下掛掉的原因。
$ docker container logs c90c
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory
Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning: Forcing option -XX:LogFile=/tmp/jvm.log
Unable to update instance pid: Unable to create directory /nexus-data/instances
/nexus-data/log/karaf.log (No such file or directory)
Unable to update instance pid: Unable to create directory /nexus-data/instances
從日誌發現是因為 Nexus 在建立檔案夾的時候沒有許可權。這個應該是上面在建立檔案夾的時候沒有分配許可權導致的。下麵我們給這個 /data/nexus
檔案夾分配許可權。
$ chown -R 200 /data/nexus
$ docker container start c90c62f4bd5d
c90c62f4bd5d
重新啟動容器後,再次訪問一下 Nexus,下圖顯示可以開啟 Nexus 。
我們現在發現 Nexus 可以支援很多倉庫格式。我們現在已經安裝完成了,下麵我們來講怎麼簡單使用 Nexus。
Nexus NuGet 倉庫簡單使用
下麵將只會介紹一下怎麼使用 NuGet
,至於使用 Nexus 其他倉庫請前往官方檢視詳情檔案。
Nexus 預設帳號
Nexus 的預設管理員賬號 admin
,密碼 admin123
。可以在 Nexus 管理介面右上角 Signin 按鈕可以登入Nexus。登入完成之後可以點選下麵圖片齒輪圖示,進行管理 Nexus 。
Repositories
點選右選單的 Repositories
按鈕可以看到 Nexus 內建的預設倉庫:
Repositories 說明
Nexus 預設已經建立好了 Nuget 以及其他的倉庫,並且是建立了3個不同型別的倉庫:nuget-group
、nuget-hosted
、nuget.org-proxy
。
nuget.org-proxy:型別是 proxy,表示代理倉庫。我們向它請求包(package)的時候,如果本地有,它就從本地提供,如果本地沒有,它會從 nuget.org
下載到本地,然後給我提供這個包。
nuget-hosted:型別是 hosted,表示託管倉庫。我們一般把自己開發的包上傳到該倉庫中。
nuget-group:型別是 group,表示倉庫組,它結合了 nuget.org-proxy 和 nuget-hosted ,能對外提供上述兩者中的包。
小結: nuget-hosted
負責包上傳,nuget.org-proxy
負責代理從 nuget.org
下載包到 Nexus 快取中,nuget-group
負責提供包。一般使用 nuget-group
提供的 URL 就可以了,它可以把私服和公共庫進行合併。
上傳元件包(Package)
準備 Package
-
先使用
Visual Studio
建立一個類庫專案
命名為NexusTest
。 -
在
解決方案資源管理器
選中 NexusTest 專案右擊點選屬性。進入專案設定頁選擇打包
選項卡。勾選在版本中勝出NuGet包
。 -
在
解決方案資源管理器
選中 NexusTest 專案右擊點選生成
。生成成功之後在本專案的bin\Debug
目錄下找到NexusTest.1.0.0.nupkg
Nuget 檔案,代表 Package 已經準備完成。
上傳 Package
-
新增
Nuget Realms
,因為 Nexus 認證 Nuget 是透過Realms
來認證,因此要新增 Nuget Realms。 -
在
Upload
選中nuget-hosted
點選進入,為什麼要選中 nuget-hosted 上面已經說明。 -
把上面準備好的
NexusTest.1.0.0.nupkg
Nuget 檔案上傳到 Nexus。 -
第三步上傳成功,在
Browse
選中nuget-hosted
點選進入。可以檢視到已經上傳成功。
使用 Package
-
獲取 Nuget 程式包源地址,在 Nexus 的 Browse 找到
nuget-group
獲取到地址。 -
在
Visual Studio
的Nuget 管理器
,點選齒輪進行設定 Nexus 地址。 -
新增 Nexus 私有 Nuget 倉庫地址。
-
透過
Nuget 管理器
查詢一下剛剛我們上傳的NexusTest
包。
總結
Nexus 基本可以滿足企業的私服需求,而且還有一個視覺化工具進行管理,降低企業管理成本。
取用:
Nexus 映象詳細說明:https://hub.docker.com/r/sonatype/nexus3/
使用 Nexus 搭建私有 Nuget 倉庫:http://www.cnblogs.com/Erik_Xu/p/9211471.html
Linux的許可權:https://www.cnblogs.com/lhm166/articles/6605059.html
關閉防火牆:https://blog.csdn.net/ytangdigl/article/details/79796961
如果喜歡作者的文章,請關註“magiccodes”訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
QQ群:
程式設計交流群<85318032>
產品交流群<897857351>
長沙線下技術社群已經建立,有興趣者可以透過客服加群。接下來,我們會定期組織一些線下技術交流分享會,以饗大家。
原文連結:
https://www.cnblogs.com/lfzm/p/10606524.html