BaGet搭建Nuget私仓(window10&docker)

2023-11-15

一、搭建背景

在公司的日常开发中,不同项目会有公共的类库,搭建私仓,大家可通过Nuget进行类库的下载与更新,可减少后续维护工作量,今天分享一下如果使用Nuget搭建Nuget私仓。

二、框架简介

BaGet(发音为“baguette”)是一个轻量级的NuGet服务器。它是开源的、跨平台、可云部署的。
您可以在首选的平台上运行BaGet:

  • 在您的计算机上
  • Docker
  • Azure
  • AWS
  • Google Cloud
  • Alibaba Cloud (Aliyun)

三、私仓搭建

1、环境

操作系统:win10、CentOS 7
Docker:20.10.21

2、win10上部署

2.1安装SDK

1.请确保您已经安装了.NET SDK
在这里插入图片描述

2.2下载和解压BaGet包

(1)地址:https://github.com/loic-sharma/BaGet/releases ,下载BaGet.zip即可,另外两个是源码文件
在这里插入图片描述

(2)解压到本地自定义目录即可,可看到有以下文件:
在这里插入图片描述

2.3运行项目

(1)cmd命令行进入当前文件夹,并执行以下命令运行

dotnet BaGet.dll

(2)访问http://localhost:5000/ ,可看到与官方的nuget长得一毛一样
在这里插入图片描述

2.4类库项目

(1)创建一个名为【BaGetFirstLib】的类库项目
在这里插入图片描述

(2)创建一个名为【Test.cs】的文件,代码如下:

namespace BaGetFirstLib
{
    public class Test
    {
        /// <summary>
        /// 打印Hello Word!  1.0版本
        /// </summary>
        public void Fun()
        {
            Console.WriteLine("Hello Word!");
        }
        /// <summary>
        /// 新版本增加一个打印自身命名   1.1版本
        /// </summary>
        public static void Fun2()
        {
            Console.WriteLine($"{nameof(Fun2)}是静态方法,被直接调用了!");
        }
    }
}

(3)选中项目->右键属性->包,按实际需要填写相关的信息即可(后续版本迭代,可更改“包版本”后,重新生成项目即可)
在这里插入图片描述
(4)重新生成项目或解决方案,可在bin/Debug目录下,看到打包好的文件,因为我打包了两次,所以这里有1.0和1.1
在这里插入图片描述

2.5将包发布到私有Nuget中

(1)执行以下命令进行发布(注:BaGetFirstLib.1.0.0.nupkg为你打包的文件名)

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

(2)重新访问http://localhost:5000,可看到已经将我们打包的类库文件上传上来了
在这里插入图片描述

2.6使用BaGetFirstLib

(1)创建名为【BaGetConsoleApp01】的控制台项目
(2)点击配置“程序包源”,如下图所示,输入以下内容配置引用本地仓库需要的信息

Private Package source
http://localhost:5000/v3/index.json

在这里插入图片描述
在这里插入图片描述

(3)安装BaGetFirstLib
(4)Program.cs的内容替换如下:

// See https://aka.ms/new-console-template for more information
using BaGetFirstLib;
Console.WriteLine("即将打印来自BaGetFirstLib的内容:");
Test test = new Test();
Console.WriteLine("New一个对象来调用方法:");
test.Fun();

Console.WriteLine("");
Console.WriteLine("调用静态方法:");
Test.Fun2();

(5)可看到成功运行BaGetFirstLib类库中封装的方法
在这里插入图片描述

2.7使用密码增加安全性

上面我们publish的时候,都是不需要密码的,那如何配置publish时需要密码呢?步骤如下:
(1)找到BaGet解压文件夹中的【appsettings.json】,并编辑【ApiKey】,设置为你自己想设置的密码
在这里插入图片描述
(2)此时重新执行会失败,如下图(注:这里我在原来的Test类中随意加了一段代码,发布了1.2版,因后续如果没任何更改,也不会重新推送上去的):
在这里插入图片描述

(3)添加输入密码变量及值,可成功推送
在这里插入图片描述
在这里插入图片描述

3、Docker上部署

3.1创建相关文件

(1)创建一个名【baget】的文件夹,并在该文件夹中创建名为【baget-data】的文件夹,和【baget.env】文件,如下:

[root ~]# cd /
[root /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root /]# cd home
[root home]# ls
baget
[root home]# cd baget/
[root baget]# ls
baget-data  baget.env

(2)使用vim baget.env 命令,往文件夹添加以下内容,其中ApiKey需要填写您的密码

# The following config is the API Key used to publish packages.
# You should change this to a secret value to secure your server.
ApiKey=你的密码

Storage__Type=FileSystem
Storage__Path=/var/baget/packages
Database__Type=Sqlite
Database__ConnectionString=Data Source=/var/baget/baget.db
Search__Type=Database

(3)使用以下命令拉取docker镜像

docker pull loicsharma/baget

3.2拉取镜像

(4)运行BaGet,向外暴露的端口为5555,如果访问不了,则需要到对应的服务器(阿里云、腾讯云等)后台设置安全组。$(pwd)会自动读取baget.env中的ApiKey:

3.3运行

docker run --rm --name nuget-server -p 5555:80 --env-file baget.env -v "$(pwd)/baget-data:/var/baget" loicsharma/baget:latest

在这里插入图片描述

3.4访问

在这里插入图片描述

四、结束

文章到此结束,只能说:Good Good Study,Day Day Up!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BaGet搭建Nuget私仓(window10&docker) 的相关文章

随机推荐

  • 前端性能优化之页面加载

    牛客在线求职答疑中心 35799 牛客在线求职答疑中心 华为oppe 联洲国际3个offer该如何选择 牛客在线求职答疑中心 35799 牛客在线求职答疑中心 华为oppe 联洲国际3个offer该如何选择 想问一下紫光同芯这家公司 他们的
  • 【计算机网络】(五)网络层之ip地址+数据封装

    1 ip地址 1 1 IP地址一些概述 Internet protocol 互联网协议 IP地址 其实就是互联网协议里使用的地址 一台电脑 一个服务器都是一台主机 IP地址是主机唯一的标识 保证主机间正常通信 一种网络编码 用来确定网络中一
  • python os 模块

    os 模块 可以通过os模块调用系统命令 获得路径 获取操作系统的类型等都是使用该模块 1 通过os 获取系统类型 os name import os print os name nt nt 代表windows posix linux gt
  • C++ set容器及其常见操作

    文章目录 前言 一 什么是set容器 二 set容器的特征 三 set容器的常见操作 四 使用步骤 1 引入头文件 2 set容器的定义 3 set的插入和删除 4 set的遍历 5 set size 总结 前言 使用集合框架不仅能提高我们
  • c++动静编译的区别

    动态编译和静态编译的区别 动态编译决定了在程序运行时才会连接库文件 需要部署的坏境安装对应库 程序体积小 静态编译在编译时就连接好库文件了 所有库文件都打包进程序了 所以体积大 不过移植性好 demo 静态编译 test h ifndef
  • 使用docker创建fdfs并使用

    1 拉取镜像 docker pull delron fastdfs 2 使用docker镜像构建tracker容器 docker run dti network host name tracker v var fdfs tracker va
  • linux执行使分区生效的命令,Linux硬盘分区生效命令partprobe

    在Linux中使用fdisk命令进行分区时 有时会遇到 WARNING Re reading the partition table failed with error 16 Device or resource busy The kern
  • nodejs知识系列:npm查询包的所有版本及安装指定版本

    说明 在添加依赖或者安装本地环境时 有时候不支持最新的安装包 需要自己指定版本号 博主最近在win7开发nestjs和angular经常遇到 解决方案 npm view 目标包名 versions json或cnpm view 目标包名 v
  • python矩阵交换两行_Python 实现交换矩阵的行示例

    Python 实现交换矩阵的行示例 如下所示 TODO r1 r2 直接修改参数矩阵 无返回值 def swapRows M r1 r2 M r1 M r2 M r2 M r1 pass 以上这篇Python 实现交换矩阵的行示例就是小编分
  • 人工智能-统计机器学习- 自适应提升算法

    监督学习 Boosting adaptive boosting 自适应提升 对于一个复杂的分类任务 可以将其分解为 若干子任务 然后将若干子任务完成方法综合 最终完成该复杂任务 我们将这若干子任务称为弱分类器 weak classifier
  • 敏捷子弹(摘自《代码之道》第二章)

    最近面试了几家公司 感觉大家对采纳Scrum流程还是挺感兴趣的 5年前 我翻译了 代码之道 这本书 其中 第二章有一篇文章谈到了敏捷方法 文章的后半部分还对Scrum做了重点介绍 作者原是微软员工 他的一些观点和建议难免会结合微软公司的实践
  • 二分查找模板

    二分查找模板 基础模板 适用于查找某个在数组中的数的位置 def searchInsert self nums List int target int gt int n len nums l 0 注意1 r n 1 注意2 while l
  • JS_socket.io简单使用

    安装socket io npm install save socket io demo目录 index js node modules package json views index html 服务端代码 index js const h
  • Solidity 合约安全,常见漏洞(第三篇)

    Solidity 合约安全 常见漏洞 第三篇 ERC20 代币问题 如果你只处理受信任的 ERC20 代币 这些问题大多不适用 然而 当与任意的或部分不受信任的 ERC20 代币交互时 就有一些需要注意的地方 ERC20 转账扣费 当与不信
  • 建模杂谈系列231 对象化-学习型对象

    说明 简单归纳一下最近的学习型对象封装 做一个基类 之后可以基于这个基类继续迭代 内容 1 关于字典的格式 Python的字典格式写起来太麻烦了 所以我定义了一个简单对象 来取代字典 字典的赋值方式 a dict a dict abc 1
  • 为什么 Linux 没有注册表?

    目录 linux无注册表机制的优势 为什么 Linux 没有注册表 linux无注册表机制的优势 linux系统有注册表吗 鸿网互联 本教程操作环境 linux7 3系统 Dell G3电脑 linux系统没有注册表 注册表 Registr
  • MySql 插入(insert)性能测试 以及优化

    http blog csdn net lgh1117 article details 8619486 测试环境 笔记本电脑 CPU I5 系统 MAC OS 10 7 内存 8G 硬盘 5400转 笔记本硬盘 MySql 版本 Oracle
  • ChatGLM(国内版的chatGPT)

    Git链接 GitHub THUDM ChatGLM 6B ChatGLM 6B 开源双语对话语言模型 An Open Bilingual Dialogue Language Model 介绍 ChatGLM 6B 是一个开源的 支持中英双
  • Unity UI拖拽模型选择

    指定一块区域 玩家鼠标or手指拖拽这个区域 模型会进行偏移 并用于进行人物 道具的选择 给模型定义一些属性 using System Collections using System Collections Generic using Un
  • BaGet搭建Nuget私仓(window10&docker)

    文章目录 一 搭建背景 二 框架简介 三 私仓搭建 1 环境 2 win10上部署 2 1安装SDK 2 2下载和解压BaGet包 2 3运行项目 2 4类库项目 2 5将包发布到私有Nuget中 2 6使用BaGetFirstLib 2