NuGet私有伺服器ProGet Docker搭建和公司中實戰用法

包子wxl發表於2023-02-20

 一、什麼時候需要用到NuGet私有伺服器

  很多公司中架構師會搭建一個統一的專案基礎架構模板,然後全部新專案都會拿這個基礎架構來開發新的專案,那架構中就會有很多的中介軟體,比喻公司內部的封裝好的Redis中介軟體,訪問資料庫的中介軟體,MQ中介軟體,小程式中介軟體等等。

  現在很多專案都用這個模板開發了,然後其中一箇中介軟體有問題了或要加功能,那麼全部專案都要把這個中介軟體修改一遍。可能不同專案在不同的組不同的負責人,通知起來也麻煩。這時候就可以把這些中介軟體做成一個NuGet包了,然後全部專案都可以透過NuGet包安裝,有更新就更新NuGet包,各個專案更新NuGet包就行了。但這些NuGet包不能上傳到公開的NuGet伺服器上,因為這些NugGet包只能公司內部用的,為了安全性考慮,就需要搭建自己的私有NuGet服務了。

 

 二、ProGet搭建

  Nexus:支援NuGet,有點重。

  MyGet:Nuget雲服務,不適合企業內私有部署。

  BaGet:簡單易用,但還沒有實現身份認證,上傳的包誰都能Down下來,介面也不需要登入就能訪問,因為安全原因只能放棄。

  ProGet:商業軟體,支援nuget、npm、docker等,但它是.NET生態應用,而且還提供了免費版本,身份認證、許可權方面控的很好,功能也多。

  這裡各種對比下選用ProGet 用Docker方式搭建一個內部的NuGet伺服器。

2.1、ProGet搭建

建立網路

這裡是建立一個和SQL Server共同的網路,如果已經裝有SQL Server了,則不需要這步

docker network create inedo

 

 

 

建立一個SQL Server

如果有SQLServer資料庫,跳過這一步。文件裡只說了需要SQL Server,是否相容其它資料庫還沒嘗試,舊版本的時候是可以用PgSQL的。

#docker 部署免費版本sqlserver
docker run --name inedo-sql \
  -v /etc/localtime:/etc/localtime:ro \
  -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=sa123456' \
  -e 'MSSQL_PID=Express' --net=inedo --restart=unless-stopped \
  -d mcr.microsoft.com/mssql/server:2019-latest
-v /etc/localtime:/etc/localtime:ro:讓容器用本機的日期

 

建立一個名叫ProGet的資料庫,為了避免問題,請確保將其排序規則指定為SQL_Latin1_General_CP1_CI_as

#sqlserver 建立一個資料庫ProGet
docker exec -it inedo-sql /opt/mssql-tools/bin/sqlcmd \
  -S localhost -U SA -P 'sa123456' \
  -Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'

 

 啟動ProGet容器

先建立一個資料夾掛載上傳的包,這裡建立在

#建立目錄掛載上傳的包
mkdir -p /home/proget/packages

 

 啟動ProGet容器

  #啟動ProGet容器
docker run -d --name=inedo --restart=unless-stopped \
  -v /etc/localtime:/etc/localtime:ro \
  -v /home/proget/packages:/var/proget/packages -p 8180:80 --net=inedo \
  -e SQL_CONNECTION_STRING='Data Source=inedo-sql; Initial Catalog=ProGet; User ID=sa; Password=sa123456' \
  proget.inedo.com/productimages/inedo/proget:latest
SQL_CONNECTION_STRING:SQL Server資料庫連線字串

 

 

 這時候開啟ip:8180埠,就能成功訪問NuGet伺服器介面了。

2.2、設定ProGet 

設定ProGet包括建立源,設定使用者,設定使用者組,設定功能許可權。

上面部署好後這裡還需要一個license key

 

 

 

 

 

 這時ProGet也會幫把 License Key資訊儲存到部署的站點裡面了,不需要再把key填一次了。

 

 然後登入

 

 

 

 

 

 修改完密碼設定許可權

 

 

 

 建立api key

 

設定許可權

 

 

 

 修改完後,想檢視NuGet伺服器上的包就需要登入了。

建立源

要上傳Nuget包,需要建立一個源,就是Nuget包的源,ProGet能夠建立多個源,分別存不同的包

 

選源的種類為NuGet 

 

 

 

 

 三、Nuget包釋出和下載

3.1、Nuget包打包和釋出

visual studio 建一個類庫,這裡為了演示只寫一個幫助類。

 

 右鍵屬性填寫包的資訊

 

 專案右鍵,加包。

 

 打包成功後會在bin/debug下生成一個nuget包

 

 把NuGet包推送到NuGet服務的源上

#nuget包推送命令
dotnet nuget push wxl.tool.1.0.0.nupkg --api-key c39bf1f00893dc07123508d281305e9735xxxxxx --source http://1.15.63.120:8180/nuget/mynuget/v3/index.json

 --api-key:上面建立的用於推送的apikey

--source :上面建立的源feed

 推送完成就可以在NuGet伺服器上在到這個包了,這裡的時間比伺服器少了一個時區8小時,是因為容器時區問題,在啟動Docker時加上-v /etc/localtime:/etc/localtime:ro即可解決,前面的啟動命令已經加上了。

 

3.2、NuGet包下載使用

visual studio 另起一個專案,然後右鍵開啟Nuget管理,把NugGet的源新增進去

 

 

 

 輸入賬號資訊後就能安裝啦。

3.3、(推薦)透過NuGet.config的方式來新增源

上面3.2的方式能透過vs來新增源和NuGet包了,那有什麼問題呢?

1、每個開發人員都要在自己的vs新增一遍這個NuGet源。

2、(重點)釋出到伺服器之後,伺服器識別不到NuGet源,需要在伺服器設定一下NuGet源,如果伺服器很多的情況,新增修改起來會比較麻煩。

這時就可以用NuGet.config的方式來新增源了。

在專案根目錄新增NuGet.config檔案,內容為

 

 

 

 

 這樣開啟專案後,專案會自動從nuget.config載入nuget的源,就不需要從vs新增了。釋出的時候專案也能從nuget.config還原所需的NuGet包,就不需要每個伺服器設定NuGet源了。

到這裡Nuget私有服務使用就完成了!

 

NuGet釋出包命令地址:https://learn.microsoft.com/zh-cn/nuget/nuget-org/publish-a-package?source=recommendations

NuGet.confg微軟官方文件地址:https://learn.microsoft.com/zh-cn/nuget/reference/nuget-config-file?cid=kerryherger

ProGet官網地址:https://proget.inedo.com/

相關文章