使用 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#?一種語言,可能其他的語言組件也需要管理,比如: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
總結
以上是生活随笔為你收集整理的使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NET Core微服务之路:再谈分布式系
- 下一篇: Kubernetes架构为什么是这样的?