孤败 發表於 2023-2-20 08:48:00

NuGet私有服务器ProGet Docker搭建和公司中实战用法

<h1>&nbsp;一、什么时候需要用到NuGet私有服务器</h1>
<p class="md-end-block md-p"><span class="md-plain">  很多公司中架构师会搭建一个统一的项目基础架构模板,然后全部新项目都会拿这个基础架构来开发新的项目,那架构中就会有很多的中间件,比喻公司内部的封装好的Redis中间件,访问数据库的中间件,MQ中间件,小程序中间件等等。</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">  现在很多项目都用这个模板开发了,然后其中一个中间件有问题了或要加功能,那么全部项目都要把这个中间件修改一遍。可能不同项目在不同的组不同的负责人,通知起来也麻烦。这时候就可以把这些中间件做成一个NuGet包了,然后全部项目都可以通过NuGet包安装,有更新就更新NuGet包,各个项目更新NuGet包就行了。但这些NuGet包不能上传到公开的NuGet服务器上,因为这些NugGet包只能公司内部用的,为了安全性考虑,就需要搭建自己的私有NuGet服务了。</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218000841396-932910118.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<h1>&nbsp;二、ProGet搭建</h1>
<p>  Nexus:支持NuGet,有点重。</p>
<p>  MyGet:Nuget云服务,不适合企业内私有部署。</p>
<p>  BaGet:简单易用,但还没有实现身份认证,上传的包谁都能Down下来,界面也不需要登录就能访问,因为安全原因只能放弃。</p>
<p>  ProGet:商业软件,支持nuget、npm、docker等,但它是.NET生态应用,而且还提供了免费版本,身份认证、权限方面控的很好,功能也多。</p>
<p>  这里各种对比下选用ProGet 用Docker方式搭建一个内部的NuGet服务器。</p>
<h2>2.1、ProGet搭建</h2>
<p><strong>创建网络</strong></p>
<p>这里是创建一个和SQL Server共同的网络,如果已经装有SQL Server了,则不需要这步</p>
<div class="cnblogs_code">
<pre>docker network create inedo</pre>
</div>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218002829278-338667371.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>创建一个SQL Server</strong></p>
<p>如果有SQLServer数据库,跳过这一步。文档里只说了需要SQL Server,是否兼容其它数据库还没尝试,旧版本的时候是可以用PgSQL的。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">docker 部署免费版本sqlserver</span>
docker run --name inedo-<span style="color: rgba(0, 0, 0, 1)">sql \
</span>-v /etc/localtime:/etc/<span style="color: rgba(0, 0, 0, 1)">localtime:ro \
</span>-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<span style="color: rgba(0, 0, 0, 1)">sa123456' \
</span>-e 'MSSQL_PID=Express' --net=inedo --restart=unless-<span style="color: rgba(0, 0, 0, 1)">stopped \
</span>-d mcr.microsoft.com/mssql/server:2019-latest</pre>
</div>
<pre>-v /etc/localtime:/etc/<span>localtime:ro:让容器用本机的日期</span></pre>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218003640008-496022986.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>创建一个名叫ProGet的数据库,为了避免问题,请确保将其排序规则指定为SQL_Latin1_General_CP1_CI_as</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">sqlserver 创建一个数据库ProGet</span>
docker exec -it inedo-sql /opt/mssql-tools/bin/<span style="color: rgba(0, 0, 0, 1)">sqlcmd \
</span>-S localhost -U SA -<span style="color: rgba(0, 0, 0, 1)">P 'sa123456' \
</span>-Q 'CREATE DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS'</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218004220180-473793440.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong>&nbsp;启动ProGet容器</strong></p>
<p>先创建一个文件夹挂载上传的包,这里创建在</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建目录挂载上传的包</span>
mkdir -p /home/proget/packages</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218004844219-1436519733.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;启动ProGet容器</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">启动ProGet容器</span>
docker run -d --name=inedo --restart=unless-<span style="color: rgba(0, 0, 0, 1)">stopped \
</span>-v /etc/localtime:/etc/<span style="color: rgba(0, 0, 0, 1)">localtime:ro \
</span>-v /home/proget/packages:/var/proget/packages -p 8180:80 --net=<span style="color: rgba(0, 0, 0, 1)">inedo \
</span>-e SQL_CONNECTION_STRING='Data Source=inedo-sql; Initial Catalog=ProGet; User ID=sa; Password=<span style="color: rgba(0, 0, 0, 1)">sa123456' \
proget.inedo.com</span>/productimages/inedo/proget:latest</pre>
</div>
<pre>SQL_CONNECTION_STRING:SQL Server数据库连接字符串</pre>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218011404096-676587607.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;这时候打开ip:8180端口,就能成功访问NuGet服务器界面了。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218011624024-2015744570.png" alt="" loading="lazy"></p>
<h2>2.2、设置ProGet&nbsp;</h2>
<p>设置ProGet包括创建源,设置用户,设置用户组,设置功能权限。</p>
<p>上面部署好后这里还需要一个license key</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218223301055-369221285.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218223513017-371483944.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218223811062-310392281.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;这时ProGet也会帮把 License Key信息保存到部署的站点里面了,不需要再把key填一次了。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218224153856-56569144.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;然后登录</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218225204152-772091228.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218225417457-83507193.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218225607577-1336656867.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong>&nbsp;修改完密码设置权限</strong></p>
<p><strong><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218230834700-341339363.png" alt="" loading="lazy"></strong></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218230947450-461494213.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218231901957-359522238.png" alt="" loading="lazy"></p>
<p>&nbsp;创建api key</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218235652885-1737543080.png" alt="" loading="lazy"></p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219224217145-1749963544.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>设置权限</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218232221502-1563552547.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218232613324-684843441.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;修改完后,想查看NuGet服务器上的包就需要登录了。</p>
<p><strong>创建源</strong></p>
<p>要上传Nuget包,需要创建一个源,就是Nuget包的源,ProGet能够创建多个源,分别存不同的包</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218232952701-267474437.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>选源的种类为NuGet&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218233010732-269042579.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218233628585-506582233.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230218233811316-657669959.png" alt="" loading="lazy"></p>
<h1>&nbsp;三、Nuget包发布和下载</h1>
<h2>3.1、Nuget包打包和发布</h2>
<p>visual studio 建一个类库,这里为了演示只写一个帮助类。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219225427699-1334286380.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;右键属性填写包的信息</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219225700539-375188936.png" alt="" loading="lazy"></p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230222165719545-857883356.png" alt="" loading="lazy"></p>
<p>&nbsp;项目右键,加包。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219225933074-1337276573.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;打包成功后会在bin/debug下生成一个nuget包</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219230028088-1116646808.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;把NuGet包推送到NuGet服务的源上</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">nuget包推送命令</span>
dotnet nuget push wxl.tool.1.0.0.nupkg --api-key c39bf1f00893dc07123508d281305e9735xxxxxx --source http://1.15.63.120:8180/nuget/mynuget/v3/index.json</pre>
</div>
<p>&nbsp;--api-key:上面创建的用于推送的apikey</p>
<p>--source :上面创建的源feed</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219233435956-1790649658.png" alt="" loading="lazy"></p>
<p>&nbsp;推送完成就可以在NuGet服务器上在到这个包了,这里的时间比服务器少了一个时区8小时,是因为容器时区问题,在启动Docker时加上-v /etc/localtime:/etc/localtime:ro即可解决,前面的启动命令已经加上了。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219234507979-11000712.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<h2>3.2、NuGet包下载使用</h2>
<p>visual studio 另起一个项目,然后右键打开Nuget管理,把NugGet的源添加进去</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219235243669-672325805.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230219235603637-1745907728.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
&nbsp;输入账号信息后就能安装啦。<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230220000224387-1093682027.png" alt="" loading="lazy">
<h2>3.3、(推荐)通过NuGet.config的方式来添加源</h2>
<p>上面3.2的方式能通过vs来添加源和NuGet包了,那有什么问题呢?</p>
<p>1、每个开发人员都要在自己的vs添加一遍这个NuGet源。</p>
<p><span style="color: rgba(255, 0, 0, 1)">2、(重点)发布到服务器之后,服务器识别不到NuGet源,需要在服务器设置一下NuGet源,如果服务器很多的情况,添加修改起来会比较麻烦。</span></p>
<p>这时就可以用NuGet.config的方式来添加源了。</p>
<p>在项目根目录添加NuGet.config文件,内容为</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230220005334475-1253916248.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230220005417737-1398097451.png" alt="" loading="lazy"></p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230220005705253-1700267145.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;这样打开项目后,项目会自动从nuget.config加载nuget的源,就不需要从vs添加了。发布的时候项目也能从nuget.config还原所需的NuGet包,就不需要每个服务器设置NuGet源了。</p>
<p>到这里Nuget私有服务使用就完成了!</p>
<p>&nbsp;</p>
<p>NuGet发布包命令地址:https://learn.microsoft.com/zh-cn/nuget/nuget-org/publish-a-package?source=recommendations</p>
<p>NuGet.confg微软官方文档地址:https://learn.microsoft.com/zh-cn/nuget/reference/nuget-config-file?cid=kerryherger</p>
<p>ProGet官网地址:https://proget.inedo.com/</p><br><br>
来源:https://www.cnblogs.com/wei325/p/17131835.html
頁: [1]
查看完整版本: NuGet私有服务器ProGet Docker搭建和公司中实战用法