创建自己私有的Nuget服务器
引言
一直是用TeamCity来做团队的Nuget私有服务器,效果也不错。最近工作很忙,需要在家干活。不幸的是我们的TeamCity在内网,在家无法访问。当然,我们可以把TeamCity放到公网,但是考虑到TeamCity带有太多机密信息,万一被黑太危险。所以决定做一个独立的Nuget服务放在公网上,TeamCity自动发布私有包到这个公网服务器上。
Nuget本质上是一个文件服务,做一个非常简单。 这里把我搭建Nuget服务的步骤Step By Step描述下来,给有需要的人参考。希望能有所帮助。
搭建Nuget网站
Nuget可以通过共享目录等来管理私有包,但是很不方便,一般还是做一个网站来管理。 步骤如下:
创建一个Asp.Net Web应用程序:

选择空模版

安装Nuget.Server 包,这个包会自动配置好Nuget服务所需要的东西。

可以在程序包管理器控制台运行来安装这个包:Install-Package NuGet.Server
安装好Nuget.Server后,他会自动配置Web.config文件。但是里面有些内容需要修改。如下图红线部分:

注意:c:\storageForNugetPackage 需要手工创建好。
Ok!, 私有Nuget服务器就搭建好了。 简单吗 :==)
验证Nuget服务器
好了,现在需要来验证一下这个服务是否工作正常了, 我写了一个示例程序,包括服务器和测试用包。可以从示例代码获取完整源代码。(有用的话,给打个星呗)。获取源代码后,按照ReadMe.txt的步骤即可验证Nuget私有服务器。
创建一个私有的Nuget包的步骤:

图有点下,我把文字复制在下面
- 启动运行Nuget.Private网站
- 在PackageSample工程目录下,运行Nuget pack PackageSample.nuspec 生成PackageSample.0.0.2.nupkg包
- 在PackageSample工程目录下,运行Nuget push PackageSample.0.0.2.nupkg Please.Change.To.Your.Nuget.Private.Key -Source http://localhost:55545/nuget
- 在c:\StorageForNugetPackage目录可以看到PackageSample已经上传了。也就是你可以引用自己的Nuget服务器来维护私有包了
好经过上面的步骤,我们的PackageSample.0.0.2已经发布好了,现在是开始要用了:
首先我们需要在Visual Studio中添加我们自己的Nuget地址,通过 工具=>选项 打开选项框,找到Nuget包管理器,增加一个新的程序包源如下图: (注意,http://localhost:55545/nuget 是我示例代码上网站的地址,如果你自己创建的网站,端口可能不同。)

见证奇迹的时刻到了,现在可以在nuget中找到刚才上传的包了

注意:需要在程序包源中选择Nuget.Priavte(上一步添加的程序包源),在浏览中就可以看到自己的包了。
申请域名和SSL
好了,万事俱备,只待发布到公网上了。
但是只是一个团队内部用的服务器,我也要去申请ICP备案,是不是有点无聊???
这里有一个办法,在国外申请一个域名,然后用SSL,那么就可以绕过备案需要,阿里或者腾讯不会墙掉你的网站了。关于申请SSL,建议阅读 我写的Let's Encrypt 一个好用的免费SSL
参考内容:
https://docs.microsoft.com/en-us/nuget/hosting-packages/nuget-server