一、什么时候需要用到NuGet私有服务器

  很多公司中架构师会搭建一个统一的项目基础架构模板,然后全部新项目都会拿这个基础架构来开发新的项目,那架构中就会有很多的中间件,比喻公司内部的封装好的Redis中间件,访问数据库的中间件,MQ中间件,小程序中间件等等。

  现在很多项目都用这个模板开发了,然后其中一个中间件有问题了或要加功能,那么全部项目都要把这个中间件修改一遍。可能不同项目在不同的组不同的负责人,通知起来也麻烦。这时候就可以把这些中间件做成一个NuGet包了,然后全部项目都可以通过NuGet包安装,有更新就更新NuGet包,各个项目更新NuGet包就行了。但这些NuGet包不能上传到公开的NuGet服务器上,因为这些NugGet包只能公司内部用的,为了安全性考虑,就需要搭建自己的私有NuGet服务了。

二、ProGet搭建

  Nexus:支持NuGet,有点重。

  MyGet:Nuget云服务,不适合企业内私有部署。

  BaGet:简单易用,但还没有实现身份认证,上传的包谁都能Down下来,界面也不需要登录就能访问,因为安全原因只能放弃。

  ProGet:商业软件,支持nuget、npm、docker等,但它是.NET生态应用,而且还提供了免费版本,身份认证、权限方面控的很好,功能也多。

  这里各种对比下选用ProGet 用Docker方式搭建一个内部的NuGet服务器。

2.1、ProGet搭建

创建网络

这里是创建一个和SQL Server共同的网络,如果已经装有SQL Server了,则不需要这步

docker network create inedo

创建一个SQL Server

如果有SQLServer数据库,跳过这一步。文档里只说了需要SQL Server,是否兼容其它数据库还没尝试,旧版本的时候是可以用PgSQL的。

#docker 部署免费版本sqlserver
docker run --name inedo-sql \
-v /etc/localtime:/etc/localtime:ro \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=sa123456' \
-e 'MSSQL_PID=Express' --net=inedo --restart=unless-stopped \
-d mcr.microsoft.com/mssql/server:2019-latest
-v /etc/localtime:/etc/localtime:ro:让容器用本机的日期

创建一个名叫ProGet的数据库,为了避免问题,请确保将其排序规则指定为SQL_Latin1_General_CP1_CI_as

#sqlserver 创建一个数据库ProGet
docker exec -it inedo-sql /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P 'sa123456' \
-Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'

 启动ProGet容器

先创建一个文件夹挂载上传的包,这里创建在

#创建目录挂载上传的包
mkdir -p /home/proget/packages

启动ProGet容器

  #启动ProGet容器
docker run -d --name=inedo --restart=unless-stopped \
-v /etc/localtime:/etc/localtime:ro \
-v /home/proget/packages:/var/proget/packages -p 8180:80 --net=inedo \
-e SQL_CONNECTION_STRING='Data Source=inedo-sql; Initial Catalog=ProGet; User ID=sa; Password=sa123456' \
proget.inedo.com/productimages/inedo/proget:latest
SQL_CONNECTION_STRING:SQL Server数据库连接字符串

这时候打开ip:8180端口,就能成功访问NuGet服务器界面了。

2.2、设置ProGet

设置ProGet包括创建源,设置用户,设置用户组,设置功能权限。

上面部署好后这里还需要一个license key

这时ProGet也会帮把 License Key信息保存到部署的站点里面了,不需要再把key填一次了。

然后登录

 修改完密码设置权限

创建api key

设置权限

修改完后,想查看NuGet服务器上的包就需要登录了。

创建源

要上传Nuget包,需要创建一个源,就是Nuget包的源,ProGet能够创建多个源,分别存不同的包

选源的种类为NuGet 

三、Nuget包发布和下载

3.1、Nuget包打包和发布

visual studio 建一个类库,这里为了演示只写一个帮助类。

右键属性填写包的信息

项目右键,加包。

打包成功后会在bin/debug下生成一个nuget包

把NuGet包推送到NuGet服务的源上

#nuget包推送命令
dotnet nuget push wxl.tool.1.0.0.nupkg --api-key c39bf1f00893dc07123508d281305e9735xxxxxx --source http://1.15.63.120:8180/nuget/mynuget/v3/index.json

--api-key:上面创建的用于推送的apikey

--source :上面创建的源feed

推送完成就可以在NuGet服务器上在到这个包了,这里的时间比服务器少了一个时区8小时,是因为容器时区问题,在启动Docker时加上-v /etc/localtime:/etc/localtime:ro即可解决,前面的启动命令已经加上了。

3.2、NuGet包下载使用

visual studio 另起一个项目,然后右键打开Nuget管理,把NugGet的源添加进去

输入账号信息后就能安装啦。

3.3、(推荐)通过NuGet.config的方式来添加源

上面3.2的方式能通过vs来添加源和NuGet包了,那有什么问题呢?

1、每个开发人员都要在自己的vs添加一遍这个NuGet源。

2、(重点)发布到服务器之后,服务器识别不到NuGet源,需要在服务器设置一下NuGet源,如果服务器很多的情况,添加修改起来会比较麻烦。

这时就可以用NuGet.config的方式来添加源了。

在项目根目录添加NuGet.config文件,内容为

这样打开项目后,项目会自动从nuget.config加载nuget的源,就不需要从vs添加了。发布的时候项目也能从nuget.config还原所需的NuGet包,就不需要每个服务器设置NuGet源了。

到这里Nuget私有服务使用就完成了!

NuGet发布包命令地址:https://learn.microsoft.com/zh-cn/nuget/nuget-org/publish-a-package?source=recommendations

NuGet.confg微软官方文档地址:https://learn.microsoft.com/zh-cn/nuget/reference/nuget-config-file?cid=kerryherger

ProGet官网地址:https://proget.inedo.com/

NuGet私有服务器ProGet Docker搭建和公司中实战用法的更多相关文章

  1. 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

    总结记录/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋,打算搭建一堆docker组件集群,最先开始是通过docker搭建redis集群,计划使用三个端口,分别是7001,70 ...

  2. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

  3. 三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  4. Nuget私有服务搭建实战

    最近更新了Nuget私有服务器的版本,之前是2.8.5,现在是2.11.3. Nuget服务器的搭建,这里有篇很详细的文章,跟着弄就好了: https://docs.microsoft.com/en- ...

  5. 使用docker搭建公司redmine服务器

    What is Redmine? Redmine is a flexible project management web application. Written using the Ruby on ...

  6. NuGet 本地服务器 公司组件库搭建 上传下载操作 模块化灵活设计

    新年第一更,关于如何搭建NuGet的本地服务器,以及部署IIS,以此搭建公司自己的组件仓库,方便所有的组件更新,管理,测试等等操作. 关于如何在NuGet中下载指定的组件,参考这篇文章:http:// ...

  7. 关于基于Nexus3和Docker搭建私有Nuget服务的探索

    背景简介 NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站点等功能,服务 ...

  8. 使用npm私有服务器保存公司内部强业务类型组件(一):npm私有服务器搭建

    1:安装centOS虚拟机 2:安装完成虚拟机后完成后开启系统网卡: 进入到/etc/sysconfig/network-scprits/ 打开ifcfg-ens33文件 找到 ONBOOT=NO 改 ...

  9. .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器

    当我们使用微服务架构之后,紧接而来的问题便是服务之间的程序集引用问题,可能没接触过的同学不太理解这句话,都已经微服务化了为什么还要互相引用程序集,当然可以不引用.但是我们会有这样一种情况,我们的每个接 ...

  10. 使用 baget 搭建私有 nuget 私有服务

    现在几乎所有语言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub ..Net 程序当然是 NuGet .NuGet 也出现很多年了,奇怪的是 ...

随机推荐

  1. 在CentOS编译Git源码

    Git 是一个免费的开源分布式版本控制系统,旨在处理从小到小到的所有内容 具有速度和效率的超大型项目. Git易于学习,占用空间很小,性能快如闪电. 它超越了Subversion,CVS,Perfor ...

  2. Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.

    $git push origin master 报错: Warning: Permanently added the RSA host key for IP address '192.30.253.1 ...

  3. python-CSV文件的读写

    CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分隔值,其文件以纯文本的形式存储表格数据. 可以理解成一个表格,只不过这个 表格是以纯文本的形式显示,单元格与单元格之 ...

  4. 像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本

    现代.NET和C#在低级/系统程序以及与C/C++/Rust等互操作方面的能力完全令各位刮目相看了,有人用C#开发的64位操作系统: GitHub - nifanfa/MOOS: C# x64 ope ...

  5. C#中的进程检测退出事件和座位状态改变事件深入浅出谈谈EventHandler的使用

    关于进程 之前我在启动我的师生对讲的exe的时候,都是直接调用Process类的静态函数Process.Start(System.String AppPath,System.String Argume ...

  6. 从面试题入手,畅谈 Vue 3 性能优化

    前言 今年又是一个非常寒冷的冬天,很多公司都开始人员精简.市场从来不缺前端,但对高级前端的需求还是特别强烈的.一些大厂的面试官为了区分候选人对前端领域能力的深度,经常会在面试过程中考察一些前端框架的源 ...

  7. JavaScript:箭头函数:作为参数进行传参

    之前已经说过,JS的函数,也是对象,而函数名是一个变量,是可以进行传参的,也即函数是可以被传参的. 只要是函数,都可以被传参,但是箭头函数的语法更为灵活,所以更方便进行传参. 如上图所示,fun1是一 ...

  8. MasaFramework -- i18n (国际化)

    概念 作为一个普通开发者, 我们负责的项目的使用群体大多数是本国的人民, 但不可避免的也有一些做外贸的业务或者给外企做的项目, 这个时候就要求我们的项目有服务全球客户的能力, 而一个支持国际化能力的框 ...

  9. electron + go 如何从sqlite获取数据

    我现在的数据在sqlite中,保存在mac本地的一个文件中.用了electron+vue搭建了一个客户端. 我大概希望是这样的逻辑,先加载本地db文件,然后再获取数据. 这里就有一个问题,我怎么获取s ...

  10. DVWA靶场实战(四)——File Inclusion

    DVWA靶场实战(四) 四.File Inclusion: 1.漏洞原理: 随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通 ...