搭建私有 Nuget 服务器教程(2)

上文谈了在本地物理计算机上搭建私有 Nuget 服务器,包括 Nuget 详细配置等。但在云时代,容器化已是趋势,本文将叙述如何在 Docker 上搭建私有 NuGet 服务器,以及如何发布程序包到 Nuget 服务器。

容器环境配置

创建一个名为baget.env的文件来存储 BaGet 的配置:

# The following config is the API Key used to publish packages. 
# You should change this to a secret value to secure your server. 
ApiKey=NUGET-SERVER-API-KEY 
Storage__Type=FileSystem 
Storage__Path=/var/baget/packages 
Database__Type=Sqlite 
Database__ConnectionString=Data Source=/var/baget/baget.db 
Search__Type=Database

有关配置的完整说明,请参阅上文中的配置说明。

PS:baget.env 文件将 BaGet 的配置存储为环境变量。 若要了解这些配置如何工作,请参考 ASP.NET Core 配置文档

运行容器

  1. 在与 baget.env 文件相同的目录中创建一个名为 baget-data 的文件夹。 BaGet 将使用它来保持其状态。
  2. 拉取 BaGet 的最新 docker   镜像:

docker pull loicsharma/baget

您可以现在运行 BaGet:

docker run --rm --name nuget-server -p 5555:80 --env-file baget.env -v "$(pwd)/baget-data:/var/baget" loicsharma/baget:latest

发布程序包

通过以下方式发布您的第一个软件包:

dotnet nuget push -s http://localhost:5555/v3/index.json -k NUGET-SERVER-API-KEY package.1.0.0.nupkg

PS:发布包的 API 密钥默认是 NUGET-SERVER-API-KEY。 您应将此值更改为机密值以保护服务器。 请参阅上文配置。

浏览程序包

您可以通过在浏览器中打开 URL http://localhost:5555/ 来浏览软件包。

还原包(Restore)

您可以使用以下软件包源来还原软件包:http://localhost:5555/v3/index.json

BaGet SDK 

您可以使用 BaGet 的 BaGet.Protocol 包与 NuGet 服务器进行交互。

1、安装 BaGet.Protocol 软件包:

dotnet add package BaGet.Protocol

2、列出软件包版本

例如查找 Newtonsoft.Json 软件包的所有版本:

NuGetClient client = new NuGetClient("https://api.nuget.org/v3/index.json"); 
IReadOnlyList<NuGetVersion>> versions = await client.ListPackageVersionsAsync("Newtonsoft.Json"); 
foreach (NuGetVersion version in versions) 
{ 
   Console.WriteLine($"Found version: {version}"); 
}

3、下载包

NuGetClient client = new NuGetClient("https://api.nuget.org/v3/index.json"); 
string packageId = "Newtonsoft.Json"; 
NuGetVersion packageVersion = new NuGetVersion("12.0.1"); 
using (Stream packageStream = await client.GetPackageStreamAsync(packageId, packageVersion)) 
{ 
   Console.WriteLine($"Downloaded package {packageId} {packageVersion}"); 
}

4、查找包元数据

NuGetClient client = new NuGetClient("https://api.nuget.org/v3/index.json"); 
// Find the metadata for all versions of a package. 
IReadOnlyList<PackageMetadata> items = await client.GetPackageMetadataAsync("Newtonsoft.Json"); 
if (!items.Any()) 
{ 
   Console.WriteLine($"Package 'Newtonsoft.Json' does not exist"); 
   return; 
} 
foreach (var metadata in items) 
{ 
   Console.WriteLine($"Version: {metadata.Version}"); 
   Console.WriteLine($"Listed: {metadata.Listed}"); 
   Console.WriteLine($"Tags: {metadata.Tags}"); 
   Console.WriteLine($"Description: {metadata.Description}"); 
} 
// Or, find the metadata for a single version of a package. 
string packageId = "Newtonsoft.Json" 
NuGetVersion packageVersion = new NuGetVersion("12.0.1"); 
PackageMetadata metadata = await client.GetPackageMetadataAsync(packageId, packageVersion); 
Console.WriteLine($"Listed: {metadata.Listed}"); 
Console.WriteLine($"Tags: {metadata.Tags}"); 
Console.WriteLine($"Description: {metadata.Description}");

5、搜索程序包

NuGetClient client = new NuGetClient("https://api.nuget.org/v3/index.json"); 
IReadOnlyList<SearchResult> results = await client.SearchAsync("json"); 
foreach (SearchResult result in results) 
{ 
   Console.WriteLine($"Found package {result.PackageId} {searchResult.Version}"); 
}

从 NuGet.Server 迁移

NuGet.Server 是轻量级的独立 NuGet 服务器。 如果使用 NuGet.Server,强烈建议您升级到 BaGet。 如果您需要迁移,请随时打开 GitHub 问题(issue)。

确保已安装 nuget.exe。 在PowerShell 中,运行:

$source = "<NuGet.Server package source>" 
$destination = "<BaGet package source>"

如果您已将 BaGet 配置为需要API密钥,请使用 setapikey 命令对其进行设置:

& nuget.exe setapikey "NUGET-SERVER-API-KEY" -Source $destination

现在运行以下 PowerShell 脚本:

if (!(Test-Path "Web.config")) { 
 throw "Please run this script in the same directory as NuGet.Server's Web.config file" 
} 
(& nuget.exe list -AllVersions -Source $source).Split([Environment]::NewLine) | % { 
 $id = $_.Split(" ")[0].Trim() 
 $version = $_.Split(" ")[1].Trim() 
 $path = [IO.Path]::Combine("Packages", $id, $version, "${id}.${version}.nupkg") 
 Write-Host "nuget.exe push -Source $destination ""$path""" 
 & nuget.exe push -Source $destination $path 
}

关于搭建私有 Nuget 服务器教程叙述完毕,本文摘自:https://loic-sharma.github.io/BaGet/

《搭建私有 Nuget 服务器教程(2)》的相关评论

发表评论

必填项已用 * 标记,邮箱地址不会被公开。