NuGet私有伺服器ProGet Docker搭建和公司中實戰用法

来源:https://www.cnblogs.com/wei325/archive/2023/02/20/17131835.html
-Advertisement-
Play Games

一、什麼時候需要用到NuGet私有伺服器 很多公司中架構師會搭建一個統一的項目基礎架構模板,然後全部新項目都會拿這個基礎架構來開發新的項目,那架構中就會有很多的中間件,比喻公司內部的封裝好的Redis中間件,訪問資料庫的中間件,MQ中間件,小程式中間件等等。 現在很多項目都用這個模板開發了,然後其中 ...


 一、什麼時候需要用到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/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹基於Python語言,對神經網路模型的結構進行可視化繪圖的方法。 最近需要進行神經網路結構模型的可視化繪圖工作。查閱多種方法後,看到很多方法都比較麻煩,例如單純利用graphviz模塊,就需要手動用DOT語言進行圖片描述,比較花時間;最終,發現利用第三方的ann_visualizer模塊,可 ...
  • 這是golang拾遺系列的第六篇。這個系列主要用來記錄一些平時不常見的知識點,偶爾也會實現些有意思的小功能,比如這篇。 golang拾遺系列目錄: golang拾遺:指針和介面 golang拾遺:為什麼我們需要泛型 golang拾遺:嵌入類型 golang拾遺:內置函數len的小知識 golang拾 ...
  • 原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個openai,於是在偉大的人工智慧輔導下好好梳理一遍理論知識 初步理論認知 async 和 await 是 C# 語言中用於非同步編程的關鍵字,主要作用是讓代碼在等待非同步操作完成的時候繼續執行,從而達到不會阻塞線程的效果 ...
  • 如何優化線上WebAssembly WebAssembly部署使用 HTTPS : 為什麼?我可以通過一個案例查看 ,下麵我們會通過masa docs站點進行測試 打開 http://docs.masastack.com/blazor/getting-started/installation 網站 ...
  • 如何使用命名行指令去運行和打包.net6項目 前言 之前發佈了一個.net webApi入門項目,項目文章,在文章中我推薦的是Docker部署,只說明瞭如何打包,但是沒有說怎麼運行,考慮到很多人寫代碼不是用的Visual Studio。這裡講一下控制台怎麼去管理項目。 準備工作 安裝.net6 SD ...
  • 接前上一篇:平臺調用 (P/Invoke):DllImport特性說明 首先,我們知道C#和C/C++都是跨平臺的,但是原理上他們是不一樣的: C#首先編譯成一種中間語言(IL)的程式集,然後將這種程式集放到不同平臺下的解釋器裡面去執行,這就是說一次編譯到處運行 C/C++是針對不同的平臺直接編譯, ...
  • 1.說說.NET7中 _ViewImports文件的作用? 2.什麼是Razor頁面? 3.說說.NET5中 __ViewStart文件的作用? 4.如何在Razor頁面中實現數據模型綁定? 5.如何在Controller中註入service? 6.描述一下依賴註入後的服務生命周期? 7.說說ASP ...
  • 今年開年,最火的莫過於ChatGPT的相關討論,這個提供了非常強大的AI處理,並且整個平臺也提供了很多對應的API進行接入的處理,使得我們可以在各種程式上無縫接入AI的後端處理,從而實現智能AI的各種應用。ChatGPT的API可以在前端,以及一些後端進行API的接入,本篇隨筆主要介紹基於ChatG... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...