NuGet03-私有仓库搭建
零、文章目录
NuGet03-私有仓库搭建
1、主流搭建方案对比
工具/方案 | 适用场景 | 特点 |
---|---|---|
NuGet.Server | 简单场景、Windows 环境优先 | 微软官方方案,需 IIS 部署,配置简单但功能有限 |
BaGet | 轻量级、快速部署、跨平台支持 | 基于 .NET Core,Docker 一键部署,支持私有包存储与代理缓存 |
Nexus Repository | 企业级多语言仓库(Java/NuGet/NPM) | 功能强大,支持代理、托管、组仓库,需较高配置 |
2、NuGet.Server服务搭建(简单场景)
(1)官方文档
- 官方文档:https://learn.microsoft.com/nuget/hosting-packages/nuget-server
(2)环境准备
- 基础要求
- Windows Server 2016+ 或支持IIS的Windows系统
- .NET Framework 4.6+ 运行环境
- Visual Studio 2019+(推荐使用社区版)
- IIS组件安装
- 控制面板 → 程序 → 启用或关闭Windows功能 → 勾选以下内容:
✔️ IIS管理控制台
✔️ ASP.NET 4.8
✔️ 静态内容、目录浏览(用于包列表显示)
- 控制面板 → 程序 → 启用或关闭Windows功能 → 勾选以下内容:
(3)服务端创建
- 新建ASP.NET空Web项目(选择.NET Framework 4.6+模板)
- 通过NuGet安装服务端核心包:
Install-Package NuGet.Server -Version 3.4.2 # 兼容.NET Framework的最新稳定版
- 修改
Web.config
:
<appSettings><add key="requireApiKey" value="true" /> <!-- 启用API密钥验证 --><add key="apiKey" value="MySecretKey123" /> <!-- 自定义推送密钥 --><add key="packagesPath" value="D:\DEV\NuGetPackages" /> <!-- 自定义包存储路径 --><add key="allowInsecureConnections" value="true" /> <!-- 允许HTTP -->
</appSettings>
(4)IIS部署流程
- 右键项目 → 发布 → 选择「文件夹」发布方式 → 生成发布包
- IIS管理器 → 右键「网站」→ 添加网站:
- 名称:NuGetServer
- 物理路径:指向发布文件夹(如
D:\DEV\Web\NuGetServer
) - 端口:建议使用非80端口(如9000)避免冲突
- 应用程序池 → 设置.NET版本为v4.0,托管模式为「集成」
- 验证访问:http://127.0.0.1:9000/ ,出现下面页面表示部署成功。
(5)上传NuGet包
- 上传之前,需要在 nuget 的配置文件加上源
C:\Users\{用户名}\AppData\Roaming\NuGet\NuGet.Config
<configuration><packageSources><!-- 关键修改:添加 allowInsecureConnections 属性允许HTTP --><add key="NuGet.Server" value="http://127.0.0.1:9000/nuget" allowInsecureConnections="true" /></packageSources>
</configuration>
- 使用命令行将 NuGet 包上传到服务器上。
dotnet nuget push BluecusliyouPackage.1.0.0.nupkg -k MySecretKey123 -s http://127.0.0.1:9000/nuget
3、BaGet服务搭建(轻量级方案)
(1)官方文档
- GitHub 主仓库: https://github.com/loic-sharma/BaGet 包含最新源码、文档、Issue 跟踪及版本发布信息。
- 官方文档站: https://loic-sharma.github.io/BaGet/提供部署指南、配置参数详解及功能说明。
- Release 下载页: https://github.com/loic-sharma/BaGet/releases可直接下载预编译包(如
BaGet.zip
)用于快速部署
(2)环境准备
- 操作系统:Centos7.9,安装 Docker
- 资源要求:
- 内存 ≥ 8GB(建议 16GB+)
- 存储 ≥ 100GB(推荐 SSD)
(3)服务部署
- docker相关知识请参考:https://blog.csdn.net/liyou123456789/article/details/122292877
- linux 相关知识请参考:https://blog.csdn.net/liyou123456789/article/details/121548156
# 创建数据存储目录
mkdir ~/baget-data && cd ~/baget-data # 运行容器(配置端口、存储卷和 API Key)
docker run -d --name baget \-p 5555:80 \-v ~/baget-data:/var/baget \-e Baget__ApiKey=YourSecretKey \-e Baget__Storage__Type=FileSystem \-e Baget__Storage__Path=/var/baget \-e Baget__Mirror__Enabled=true \-e Baget__Mirror__PackageSource=https://api.nuget.org/v3/index.json \loicsharma/baget:latest
- 参数说明
参数 | 作用 | 注意事项 |
---|---|---|
-d | 以守护进程模式运行容器(后台运行) | 避免阻塞终端,适合生产环境 |
--name baget | 指定容器名称为 baget | 便于通过 docker logs baget 查看日志 |
-p 5555:80 | 将容器内部 80 端口映射到宿主机 5555 端口 | 访问地址:http://宿主机IP:5555 |
-v ~/baget-data:/var/baget | 挂载宿主机目录 ~/baget-data 到容器内 /var/baget | 确保宿主机目录有写入权限(如 chmod 777 ~/baget-data ) |
环境变量(关键配置) | ||
-e Baget__ApiKey=YourSecretKey | 设置推送包的 API 密钥(需保密) | 推送命令需匹配此密钥:dotnet nuget push -k YourSecretKey |
-e Baget__Storage__Type=FileSystem | 存储类型设为本地文件系统 | 支持 FileSystem / AzureBlobStorage / S3 等 |
-e Baget__Storage__Path=/var/baget | NuGet 包存储路径(需与 -v 挂载路径一致) | 持久化数据至宿主机目录 |
-e Baget__Mirror__Enabled=true | 启用官方 NuGet 代理镜像 | 自动缓存从官方源下载的包,加速内网访问 |
-e Baget__Mirror__PackageSource=https://api.nuget.org/v3/index.json | 设置代理镜像源为官方 NuGet V3 接口 | 必须为 V3 格式 URL,否则代理失效 |
loicsharma/baget:latest | 使用官方 BaGet 镜像的最新版本 | 可用特定版本如 v0.4.0 提高稳定性 |
- 验证:浏览器访问
http://192.168.119.180:5555
,显示包管理页面即成功
(4)上传NuGet包
- 上传之前,需要在 nuget 的配置文件加上源
C:\Users\{用户名}\AppData\Roaming\NuGet\NuGet.Config
<configuration><packageSources> <add key="BaGet" value="http://192.168.119.180:5555/v3/index.json" allowInsecureConnections="true" /></packageSources>
</configuration>
- 使用命令行将 NuGet 包上传到服务器上。
dotnet nuget push -k YourSecretKey -s http://192.168.119.180:5555/v3/index.json BluecusliyouPackage.1.0.0.nupkg
(5)上传效果
4、Nexus 3 服务搭建(企业级方案)
(1)官方文档
- 官方文档:https://help.sonatype.com/en/sonatype-nexus-repository.html
(2)环境准备
- 操作系统:Centos7.9,安装 Docker
- 资源要求:
- 内存 ≥ 8GB(建议 16GB+)
- 存储 ≥ 100GB(推荐 SSD)
(3)安装部署
# 创建数据目录
mkdir -p /opt/nexus-data && chown -R 200:200 /opt/nexus-data# 运行容器
docker run -d \--name nexus \-p 8081:8081 \-p 8082-8085:8082-8085 \-v /opt/nexus-data:/nexus-data \--restart unless-stopped \sonatype/nexus3:latest
- 验证:等待 2-5 分钟,访问
http://服务器IP:8081
。 - 首次启动需从
/opt/nexus-data/admin.password
获取初始密码。
(4)仓库配置
- 登录管理界面
- 地址:
http://<IP>:8081
→ 输入初始密码 → 重置管理员密码(建议复杂密码) admin 123456。
- 地址:
- 创建 Blob 存储(逻辑存储单元)
- 设置 → Repository → Blob Stores → Create Blob Store
- 类型:File → 命名(如 `nuget-hosted`),路径默认。
- 仓库类型创建:
nuget-hosted
(托管私有包)nuget.org-proxy
(代理官方库)nuget-group
(聚合上述仓库)。
- 启用 NuGet Realm:
- 在
Security → Realms
中添加NuGet API-Key Realm
- 在
(5)上传NuGet包
- **生成API Key:**登录 Nexus → 用户头像 →
NuGet API Key
→ 验证密码后获取密钥(GUID 格式)。
- 上传之前,需要在 nuget 的配置文件加上源
C:\Users\{用户名}\AppData\Roaming\NuGet\NuGet.Config
<configuration><packageSources> <add key="Nexus.hosted" value="http://192.168.119.180:8081/repository/nuget-hosted/" allowInsecureConnections="true" /></packageSources>
</configuration>
- 使用命令行将 NuGet 包上传到服务器上。
dotnet nuget push BluecusliyouPackage.1.0.0.nupkg -k e2bb20d1-fa9d-3b14-b570-752b274aab93 -s http://192.168.119.180:8081/repository/nuget-hosted/