一、什么时候需要用到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. day24-服务器端渲染技术02

    服务器端渲染技术02 11.EL表达式 11.1EL表达式介绍 EL表达式全称:Expression Language,是表达式语言 EL表达式主要是代替jsp页面的表达式脚本 EL表达式输出数据时, ...

  2. orcl substr函数与java substring 的不同

    前天事情急改一个存储过程时遇到了substr方法时,一直用好,然后用其他方法跳过去了,今天有时间回头来验证 才发现和java太不一样了! select substr('为中华之崛起而读书',2,4) ...

  3. 1.3 Apache Hadoop的重要组成-hadoop-最全最完整的保姆级的java大数据学习资料

    目录 1.3 Apache Hadoop的重要组成 1.3 Apache Hadoop的重要组成 Hadoop=HDFS(分布式文件系统)+MapReduce(分布式计算框架)+Yarn(资源协调框架 ...

  4. 【数据库】SQL-随机生成区间内数值、日期、字符串,mock数据

    〇.概述 1.参考 2.其他 一.随机生成数值 1.随机生成函数random_int() -- 随机数生成函数,int版 CREATE OR REPLACE FUNCTION random_int( ...

  5. 分享一个你很可能不知道的Java异常实现的缺陷

    前言 Java中一个大家熟知的知识点就是异常捕获,try...catch...finally组合,但是很多人不知道这里面有一个关于Java的缺陷,或者说是异常实现的一点不足之处. 我这边就通过一个很简 ...

  6. SQL一文入门助记

    什么是SQL SQL(Structured Query Language)是用于操作数据库的语言.一个博客有许多网站,一个游戏要储存许多游戏的账号密码,这些都离不开数据库操作. 关系型数据库与NoSQ ...

  7. week_6

    Andrew Ng 机器学习笔记 ---By Orangestar Week_6 (1) In Week 6, you will be learning about systematically im ...

  8. Java基础类String学习分析

    目录 1 String不可变性 2 不可变的好处 3 String+和StringBuilder效率差异 4 String, StringBuffer and StringBuilder 5 Stri ...

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

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

  10. 万字干货! 使用docker部署jenkins和gitlab

    阅读本文, 需要有基础的Git, Linux, Docker, Java, Maven, shell知识, 并最少有一台内存16G以上并已经安装好了Docker的机器. 1. 概述 2. 容器互联 3 ...