BaGet服务之基础搭建


Baget-logo

A lightweight NuGet and Symbol server.

一个轻量级 NugetSymbol 服务器。

一、环境

.Net Core SDK-个人本地是 .Net Core 3.1+

Windows10

Nuget.exe

二、下载和安装

下载链接,根据需要下载对应版本的压缩包。

BaGet-Install

选择合适目录,解压文件,解压目录如下:

BaGet-DirTree

三、修改配置

修改目录下的配置文件appsettings.json,根据官方文档,按需进行调整。

{
  "ApiKey": "",//系统作为nuget推送时,用于验证的apikey,默认为空,为保证保密性,可自行添加
  //"Urls": "http://*:5000",//对外公开的rest访问地址
  "PackageDeletionBehavior": "Unlist",//包删除行为,默认为不在列表中显示,为软删除
  "AllowPackageOverwrites": false,//是否允许覆盖原有包,默认为不允许

  "Database": {//数据库配置默认为sqlite
    "Type": "Sqlite",
    "ConnectionString": "Data Source=baget.db"
  },

  "Storage": {//文件持久化路径
    "Type": "FileSystem",
    "Path": ""//文件夹路径,建议绝对路径使用/做路径分隔,默认为解压目录的packages文件夹
  },

  "Search": {
    "Type": "Database"
  },

  "Mirror": {
    "Enabled": true,//是否开启上游镜像,默认为不启用false
    "PackageSource": "https://api.nuget.org/v3/index.json"
  },

  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Microsoft.Hosting.Lifetime": "Information",
        "Default": "Warning"
      }
    }
  }
}

配置完成以后,切换到,解压路径下,执行启动指令。

dotnet Baget.dll

输出如下,默认运行端口为 5000

>dotnet BaGet.dll
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: 解压目录绝对路径

浏览器中访问http://localhost:5000,出现如下页面表示服务启动成功。

BaGet-Server

四、配置Nuget

查看对应的上传页签时,可以看到对应的服务镜像源访问地址为 http://localhost:5000/v3/index.json,接下来就可以进行 vs 的包源配置了。

Baget-Source

1、添加推送秘钥凭证

配置上述配置文档appsettings.json中的 ApiKey,此处设置为 ggcyadmin@@,用于演示操作。

{
    "ApiKey":"ggcyadmin@@"
}

2、生成nuget

创建一个项目 NugetTool,并切换到项目目录下,通过执行指令dotnet pack生成库对应的Nuget包。

>dotnet pack
用于 .NET 的 Microsoft (R) 生成引擎版本 17.0.0+c9eb9dd64
版权所有(C) Microsoft Corporation。保留所有权利。

  正在确定要还原的项目…
  所有项目均是最新的,无法还原。
  已成功创建包“物理路径\NugetTool\bin\Debug\NugetTool.1.0.0.nupkg”。

该路径下生成对应版本的nuget包。

NugetTool.1.0.0.nupkg

3、发布nuget

不带apikey配置时,执行如下指令

>dotnet nuget push -s http://localhost:5000/v3/index.json NugetTool.1.0.0.nupkg

输出:

>dotnet nuget push -s http://localhost:5000/v3/index.json NugetTool.1.0.0.nupkg
warn : 未提供 API 密钥,找不到 'http://localhost:5000/api/v2/package' 的 API 密钥。要保存源的 API 密钥,请使用 "setApiKey" 密钥。
正在将 NugetTool.1.0.0.nupkg 推送到 'http://localhost:5000/api/v2/package'...
  PUT http://localhost:5000/api/v2/package/
  Unauthorized http://localhost:5000/api/v2/package/ 322 毫秒
error: Response status code does not indicate success: 401 (Unauthorized).

apikey配置时,需要携带apikey进行发布

>dotnet nuget push -s http://localhost:5000/v3/index.json NugetTool.1.0.0.nupkg -k "ggcyadmin@@"

输出:

>dotnet nuget push -s http://localhost:5000/v3/index.json NugetTool.1.0.0.nupkg -k "ggcyadmin@@"
正在将 NugetTool.1.0.0.nupkg 推送到 'http://localhost:5000/api/v2/package'...
  PUT http://localhost:5000/api/v2/package/
  Created http://localhost:5000/api/v2/package/ 460 毫秒
已推送包。

5、查看发布结果

发布成功后,刷新页面出现如下结果:

Baget-AddNuget

Vs中配置Nuget包源,包源地址,为Baget对应地址http://localhost:5000/v3/index.json

http://localhost:5000/v3/index.json

相关配置如下:

Baget-Settings

配置后,打开任意解决方案,查看Vs中顶部菜单中的【工具】-【Nuget包管理器】-【管理解决方案的Nuget包】,切换数据源,可以看到当前Baget对应的包,代表服务搭建成功

Baget-Search

五、删除特定包

卸载默认情况下,不会直接删除对应版本的包,只是在Nuget列表中不显示,实际的包文件还存在,同样,删除也分为未配置apikey和配置apikey两类,此处仅仅演示配置 apikey 之后的操作。

未携带apikey

dotnet nuget delete -s http://localhost:5000/v3/index.json NugetTool 1.0.0

输出:

>dotnet nuget delete -s http://localhost:5000/v3/index.json NugetTool 1.0.0
warn : 未提供 API 密钥,找不到 'http://localhost:5000/api/v2/package' 的 API 密钥。要保存源的 API 密钥,请使用 "setApiKey" 密钥。
NugetTool 将从 'http://localhost:5000/api/v2/package' 删除 1.0.0。是否继续? (y/N)
y
warn : 正在从 'http://localhost:5000/api/v2/package' 删除 NugetTool 1.0.0。
  DELETE http://localhost:5000/api/v2/package/NugetTool/1.0.0
  Unauthorized http://localhost:5000/api/v2/package/NugetTool/1.0.0 81 毫秒
error: Response status code does not indicate success: 401 (Unauthorized).

携带apikey

>dotnet nuget delete -s http://localhost:5000/v3/index.json NugetTool 1.0.0 -k "ggcyadmin@@"

输出:

>dotnet nuget delete -s http://localhost:5000/v3/index.json NugetTool 1.0.0 -k "ggcyadmin@@"
NugetTool 将从 'http://localhost:5000/api/v2/package' 删除 1.0.0。是否继续? (y/N)
y
warn : 正在从 'http://localhost:5000/api/v2/package' 删除 NugetTool 1.0.0。
  DELETE http://localhost:5000/api/v2/package/NugetTool/1.0.0
  NoContent http://localhost:5000/api/v2/package/NugetTool/1.0.0 101 毫秒
NugetTool 已成功删除 1.0.0。

查看服务端,对应已经没有该版本包显示

Baget-Delete

如果需要彻底清除该版本,删除本地数据库中,对应历史记录以及,默认的nuget包文件服务端存储文件,也可以采用修改配置文件,允许包文件版本覆盖操作,用于更新同版本包,默认服务对应的 Nuget 包存储路径为解压路径的根目录packages

六、常见问题

删除 nuget 包后,同版本号 nuget 包无法进行安装。

>dotnet nuget push -s http://localhost:5000/v3/index.json NugetTool.1.0.0.nupkg -k "ggcyadmin@@"
正在将 NugetTool.1.0.0.nupkg 推送到 'http://localhost:5000/api/v2/package'...
  PUT http://localhost:5000/api/v2/package/
  Conflict http://localhost:5000/api/v2/package/ 400 毫秒
要跳过已发布的包,请使用 --skip-duplicate 选项
error: Response status code does not indicate success: 409 (Conflict).

对应 nuget 默认目录中 packages,文件仍然存在。

Enable package hard deletions

To prevent the “left pad” problem, BaGet’s default configuration doesn’t allow package deletions. Whenever BaGet receives a package deletion request, it will instead “unlist” the package. An unlisted package is undiscoverable but can still be downloaded if you know the package’s id and version. You can override this behavior by setting the PackageDeletionBehavior

{
    "PackageDeletionBehavior": "HardDelete",
}

Enable package overwrites

Normally, BaGet will reject a package upload if the id and version are already taken. You can configure BaGet to overwrite the already existing package by setting AllowPackageOverwrites

{
    "AllowPackageOverwrites": true,
}

重启服务后,再次进行上传操作,提示成功。

七、参考链接

[1]基础配置:https://loic-sharma.github.io/BaGet/configuration/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值