歡迎光臨
每天分享高質量文章

使用 Nexus3鏡像搭設私有倉庫(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)

  • 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# 一種語言,可能其他的語言組件也需要管理,比如:JavaDocker 鏡像 等,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 的鏡像到本地,我這裡拉取是最新版本的。你也可以拉取相對應版本的鏡像。

  1. $ docker pull sonatype/nexus3:latest

  2. latest: Pulling from sonatype/nexus3

  3. a02a4930cb5d: Pull complete

  4. 2c6aa0f814dc: Pull complete

  5. ce7b7501fc94: Pull complete

  6. Digest: sha256:00ede0830e375c8a9758ea5d98dd020425850bbeccc822da68e7bad7ae92dbfa

  7. Status: Downloaded newer image for sonatype/nexus3:latest

鏡像詳細說明:https://hub.docker.com/r/sonatype/nexus3

運行 Nexus

在運行之前先創建一個目錄用來存放 Nexus 持久化資料。

  1. $ mkdir -p /data/nexus

使用 Docker 命令運行 Nexus 。

  1. $ docker run -d -p 8081:8081 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3:latest

  2. c90c62f4bd5d3f09d3f0d562e5fe41401954898729ed9f7407ed71296f372883

Docker 傳回容器的的 Hash ID,代表容器已經啟動,通過 http://serverip:8081 就能訪問Nexus了。

但是請求的時候拒絕我的請求,這個地方困擾了我很久。我第一步先排除是否是防火牆的問題。

  1. $ firewall-cmd --state

  2. not running

使用命令查看防火牆沒有運行,第二步查看容器當前狀態。

  1. $ docker container ls -a

  2. CONTAINER ID IMAGE COMMAND CREATED STATUS

  3. c90c62f4bd5d sonatype/nexus3:latest "sh -c ${SONATYPE_DI…" 27 minutes ago Exited

發現這個容器的狀態變成 Exited 已經退出,找到問題所在可能是什麼原因導致 nexus 沒有啟動起來。現在使用容器日誌查一下掛掉的原因。

  1. $ docker container logs c90c

  2. mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied

  3. mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied

  4. OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory


  5. Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log

  6. Warning: Forcing option -XX:LogFile=/tmp/jvm.log

  7. Unable to update instance pid: Unable to create directory /nexus-data/instances

  8. /nexus-data/log/karaf.log (No such file or directory)

  9. Unable to update instance pid: Unable to create directory /nexus-data/instances

從日誌發現是因為 Nexus 在創建檔案夾的時候沒有權限。這個應該是上面在創建檔案夾的時候沒有分配權限導致的。下麵我們給這個 /data/nexus 檔案夾分配權限。

  1. $ chown -R 200 /data/nexus

  2. $ docker container start c90c62f4bd5d

  3. 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-groupnuget-hostednuget.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

  1. 先使用 Visual Studio 創建一個 類庫專案 命名為 NexusTest 。

  2. 在 解決方案資源管理器 選中 NexusTest 專案右擊點擊屬性。進入專案設置頁選擇 打包 選項卡。勾選 在版本中勝出NuGet包 。

  3. 在 解決方案資源管理器 選中 NexusTest 專案右擊點擊 生成。生成成功之後在本專案的 bin\Debug 目錄下找到 NexusTest.1.0.0.nupkg Nuget 檔案,代表 Package 已經準備完成。

上傳 Package

  1. 添加 Nuget Realms,因為 Nexus 認證 Nuget 是通過 Realms 來認證,因此要添加 Nuget Realms。

  2. 在 Upload 選中 nuget-hosted 點擊進入,為什麼要選中 nuget-hosted 上面已經說明。

  3. 把上面準備好的 NexusTest.1.0.0.nupkg Nuget 檔案上傳到 Nexus。

  4. 第三步上傳成功,在 Browse 選中 nuget-hosted 點擊進入。可以查看到已經上傳成功。

使用 Package

  1. 獲取 Nuget 程式包源地址,在 Nexus 的 Browse 找到 nuget-group 獲取到地址。

  2. 在 Visual Studio 的 Nuget 管理器,點擊齒輪進行設置 Nexus 地址。

  3. 添加 Nexus 私有 Nuget 倉庫地址。

  4. 通過 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