1分鐘極速搭建基於BaGet的輕量級私有Nuget程式包伺服器

RECTOR發表於2022-01-06

本文首發於碼友網--《1分鐘極速搭建基於BaGet的輕量級私有Nuget程式包伺服器》

概述

大家好,我是專注.NET開發的碼友網建立者Rector

在上一篇《NuGet是什麼?為什麼.NET專案中會有NuGet?如何使用NuGet程式包?》文章中,我們瞭解了:

  • NuGet是什麼?
  • 為什麼.NET專案中會有NuGet?
  • 如何使用NuGet程式包?

特別的,文中學習瞭如何安裝基於微軟官方託管(nuget.org)的共享NuGet包。

那現在有人可能會問了:“我的程式集是個人或公司內部的,如果以都發布到nuget.org託管,那麼不是所有都能下載和引用了嗎?有沒有可能把個人或公司內部的程式集上傳到一個私有的NuGet伺服器,只讓部分開發者可以訪問呢?”

答案是肯定的,你想到的別人也同樣遇到了,並且也有一些不錯的解決方案,其中之一即是搭建自己的NuGet程式包託管服務。可選的應用元件主要有:NuGet.ServerLiGet等,這裡列出的兩個NuGet包伺服器應用元件均是開源的,可以免費下載和使用。

本文主要為大家分享如何使用BaGet極速搭建屬於自己的私有NuGet包伺服器,如何釋出、更新私有NuGet包到BaGet伺服器,如何在Visual Studio中的NuGet包管理器的程式包源配置中新增BaGet源等技術。

BaGet極速搭建NuGet包服務

BaGet簡介

如上文所述,BaGet是一個開源的、輕量級的NuGet包伺服器應用元件。BaGet原始碼託管地址為:https://github.com/loic-sharm...

BaGet是基於.NET Core開發的NuGet包伺服器應用元件,因此需要執行環境安裝.NET Core SDK,BaGet具有以下特性:

  • 極速部署
  • 支援跨平臺
  • 支援docker容器化部署
  • 支援雲端儲存
  • 支援離線快取
  • 支援包硬刪除
  • 配置持久化支援多種資料庫型別

BaGet安裝

注:以下安裝在Windows作業系統中演示。

在文中已多次提到極速安裝這個動作,那麼BaGet的安裝到底有那極速呢?讓我們一起來體驗一下吧!

  1. 安裝.NET Core SDK
  2. 下載BaGet程式壓縮包,點選這裡
  3. 解壓剛下載的BaGet程式壓縮包,開啟命令列,定位到BaGet程式根目錄,執行命令dotnet BaGet.dll
  4. 在瀏覽器中開啟地址:http://localhost:5000/

怎麼樣,是不是超級簡單、超級快捷呢!!!

執行命令示意圖:

瀏覽器中看到的效果如圖:

從圖中可以看到,BaGet預設監聽了5000埠,如果你需要修改埠,則開啟appsettings.json配置檔案,將kestrel配置選項的註釋去掉,然後修改埠號為自己需要的即可,如下:

// Uncomment this to configure BaGet to listen to port 8080.
// See: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps
"kestrel": {
  "endpoints": {
    "http": {
      "url": "http://localhost:5555"
    }
  }
}

特別注意:以上以dotnet BaGet.dll方式執行的BaGet包服務還沒有設定API金鑰,也就是說任何知道BaGet地址的人都是可以對其進行操作,如釋出包,更新包,刪除包等。所以,為了安全起見,建議為你的私有BaGet包服務配置一個API金鑰。配置方式也非常簡單,還是開啟appsettings.json配置檔案,修改選項,如下:

{
  "ApiKey": "NUGET-SERVER-API-KEY", // 這裡修改成你的金鑰即可(任意字串)
  //...
}

更多BaGet的配置,請見BaGet官網配置說明

釋出程式包到BaGet服務

如下圖所示:

首先,點選圖中①所示的Upload按鈕,介面將切換到上傳NuGet包介面,這裡展示了幾個重要的資訊:

  • BaGet包服務索引的地址為圖中②標註的地址
  • 使用4種不同的命令列(分別為:.NET CLI, NuGet CLI, Paket CLI, PowerShellGet)釋出NuGet包

注:如果你不喜歡命令列的方式釋出NuGet包,推薦使用NuGet Package Explorer釋出、更新NuGet包,可以在Windows 10的應用商店下載、安裝NuGet Package Explorer

使用命令列釋出NuGet包的命令如標記③所示。

為了演示如何將自制NuGet包釋出、更新到BaGet服務,我們先來建立一個演示用的C#(.NET 5)類庫,並在這個類庫中建立一個微信支付類(WeChatPay.cs)及演示支付方法,如圖:

再右鍵單擊專案WeChatPay -> 打包,如圖:

打包結果如圖:

在.nupkg所在目錄開啟命令提示符工具,執行NuGet包的釋出命令,如下:

注:本示例並未設定API金鑰,如果你設定了BaGet的API金鑰,請在釋出命令中附加API金鑰的引數(-k),如:
dotnet nuget push -s http://localhost:5000/v3/index.json -k NUGET-SERVER-API-KEY WeChatPay.1.0.0.nupkg

看到圖中所示的“Your package was pushed.”表示NuGet包成功釋出到了剛才用BaGet搭建的私有NuGet包伺服器。

重新整理瀏覽器地址:http://localhost:5000/ ,NuGet包列表中出現了WeChatPay這個NuGet包,如圖:

安裝私有NuGet包

將NuGet包成功上傳到BaGet搭建的私有伺服器之後,便可下載安裝和使用了,接下來我們來配置Visual Studio的Nuget包源以新增私有BaGet包源地址。開啟Visual Studio的選項 -> NuGet包管理器 -> 程式包源,依次完成下圖中的操作:

步驟2:點選+號,新增一個程式包源項
步驟3:選中步驟2中新增的項,在3處的廣西框中填入程式包源的名稱(可任意取名)
步驟4:填入私有NuGet包的服務索引地址
步驟5:點選更新按鈕,以更新程式包源的資訊
步驟6:點選確定按鈕,以儲存新增的程式包源資訊

好了,現在回到Visual Studio的主介面,將上面建立的WeChatPay類庫專案刪除,只保留ConsoleApp1這個演示用的控制檯專案,如圖:

右鍵單擊ConsoleApp1專案的依賴項 -> 管理NuGet程式包,如圖:

在開啟介面的右上角可以看到程式包源的下拉框,下拉選單中會列出上面新增的私有NuGet程式包源的選項,點選選中此項,NuGet列表會自動重新整理,之後將看到我們上傳的自制程式包WeChatPay,如圖:

選中WeChatPay包,點選右側的安裝按鈕,以在當前專案中安裝此程式包,如圖:

再次回到Visual Studio編輯器主介面,現在我們便可以呼叫WeChatPay這個包中可訪問的資源了,如圖:

執行結果如圖:

更新NuGet包

更新NuGet包其實就一釋出一個新版本的NuGet包,這裡不再贅述。

後話

筆者認為,本文非常詳盡地描述和分享了BaGet搭建私有NuGet服務的全過程。與題目相反,雖然用BaGet搭建私有NuGet服務最少可能只需要1分鐘,但寫這篇文章可不至啊。

文章從資料整理、內容撰寫、示例測試到最後的稿件審閱、釋出,花了Rector不少於完整的5個小時(寫這類技術文章是真的磨人啊-_-)。

如有什麼問題,歡迎評論區留言反饋。

如果你覺得本文有價值,請來個三連(點贊,收藏,評論)吧,謝謝。

相關文章