對於 .NET 開發者來說,nuget 是必不可少的程式包管理工具。相應地,大部分開發團隊都需要在內部搭建 Nuget 伺服器,以管理私有 nupkg 包。本文所使用的 Nuget 伺服器,不是微軟官方的,而是 Baget。 ...
本文摘自PZY,原文鏈接:https://pzy.io/archives/2020/3/baget-tutorial-1.html
對於 .NET 開發者來說,nuget 是必不可少的程式包管理工具。相應地,大部分開發團隊都需要在內部搭建 Nuget 伺服器,以管理私有 nupkg 包。本教程所使用的 Nuget 伺服器,不是微軟官方的,而是 BaGet。BaGet 是一款基於 .NET 開發的輕量級的 NuGet 伺服器,它是開源、跨平臺和雲原生的。
Nuget 伺服器
Baget - Nuget 伺服器
BaGet 可以運行的平臺有:本地電腦、Docker、AWS、Azure、Google Cloud 和阿裡雲。本文只談在本地電腦上運行 BaGet。
運行(Run)
由於 BaGet 是基於 .NET 開發的,首先需要下載並安裝 .NET Core SDK,然後下載並提取 BaGet 最新版本,再用 dotnet BaGet.dll 啟動服務,最後在瀏覽器中瀏覽http://localhost:5000/。
運行 Baget 成功後,可通過編輯 appsettings.json文件來修改 BaGet 的配置。 有關配置的完整列表,請參閱下文的 BaGet 配置。
配置(Configure)
您可以通過編輯 appsettings.json 文件來修改 BaGet 的配置。
需要API密鑰
您可以要求用戶提供密碼(稱為API密鑰)來發佈程式包。 為此,您可以在 ApiKey 欄位中設置所需的 API 密鑰。
{
"ApiKey": "NUGET-SERVER-API-KEY",
...
}
用戶現在必須提供 API 密鑰來推送軟體包:
dotnet nuget push -s http://localhost:5000/v3/index.json -k NUGET-SERVER-API-KEY package.1.0.0.nupkg
啟用直通緩存
直通緩存可以從上游源索引軟體包,使用直通緩存需要執行以下操作:
如果從 nuget.org 還原的速度很慢,則可以加快構建速度
在離線情況下啟用程式包還原
以下鏡像設置將 BaGet 配置為從 nuget.org 索引包:
{
... "Mirror": { "Enabled": true, "PackageSource": "https://api.nuget.org/v3/index.json" },
...
}
註意:PackageSource 是 NuGet 服務索引值。
啟用包硬刪除
為了防止出現“左鍵盤(left pad)”問題,BaGet的預設配置不允許刪除程式包。 每當 BaGet 收到軟體包刪除請求時,它都會“取消列出”軟體包。 未列出的軟體包是無法發現的,但如果您知道該軟體包的 ID 和版本,仍可以下載。 您可以通過設置 PackageDeletionBehavior 來覆蓋此行為:
{
...
"PackageDeletionBehavior": "HardDelete",
...
}
啟用包覆蓋
通常,如果已經獲取 ID 和版本,BaGet 將拒絕軟體包上傳。 您可以通過設置AllowPackageOverwrites將 BaGet 配置為覆蓋現有的軟體包:
{
...
"AllowPackageOverwrites": true,
... }
資料庫配置
BaGet 支持多個資料庫引擎來存儲軟體包信息,支持的資料庫有:MySQL、SQLite、SQLServer、PostgreSQL、AzureTable。每個資料庫引擎都需要一個連接字元串來配置連接。 請訪問 ConnectionStrings.com,以瞭解如何為每個資料庫引擎創建正確的連接字元串。
您可以使用環境變數或通過編輯appsettings.json文件來配置所選的資料庫引擎。
環境變數
有兩個與資料庫配置有關的環境變數。 它們是:
Database__Type: 要使用的資料庫引擎,它應是上面列出的資料庫之一,例如 PostgreSql 或 Sqlite 。
Database__ConnectionString:資料庫引擎的連接字元串。
appsettings.json
資料庫設置位於 appsettings.json 配置文件中的 Database 鍵下:
{
...
"Database": {
"Type": "Sqlite",
"ConnectionString": "Data Source=baget.db"
},
...
}
有兩個與資料庫配置有關的設置:
類型:要使用的資料庫引擎,它應是上面列出的資料庫之一,例如 PostgreSql 或 Sqlite。
ConnectionString:資料庫引擎的連接字元串。
由於時間關係,本文暫時寫到這裡,下文將敘述搭建私有 Nuget 伺服器教程後續內容,比如 Docker 部署,包推送等等。