.NET Core部署到linux(CentOS)最全解決方案,常規篇

来源:https://www.cnblogs.com/88223100/archive/2023/04/28/The-most-comprehensive-solution-for-deploying-NET-Core-to-Linux-CentOS-general-section.html
-Advertisement-
Play Games

本文為大家介紹使用 .NET Core部署到Linux伺服器的方法,通過本文你將瞭解到Linux在虛擬機下的安裝、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的發佈與運行全過程,本文皆在總結了一些經驗與筆記在部署過程中遇到的一些問題,同時分享給... ...


本文為大家介紹使用 .NET Core部署到Linux伺服器的方法,通過本文你將瞭解到Linux在虛擬機下的安裝、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的發佈與運行全過程,本文皆在總結了一些經驗與筆記在部署過程中遇到的一些問題,同時分享給大家,供大家參考,歡迎討論交流。

操作系統可選擇你比較熟悉的Linux發行版,如果你是第一次接觸Linux,推薦使用CentOs,因為本文的內容都是在CentOs中進行演示的。

至於系統的安裝,你可以選擇雲伺服器,或者使用虛擬機安裝。虛擬機安裝CentOs的方式可以參考:一網打盡,一文講通虛擬機安裝及Linux使用

我們推薦使用XShell作為連接工具,下載地址:https://www.netsarang.com/zh/xshell-download/

Xshell是一個強大的安全終端模擬軟體,它支持SSH1, SSH2, 以及Microsoft Windows 平臺的TELNET 協議。Xshell 通過互聯網到遠程主機的安全連接以及它創新性的設計和特色幫助用戶在複雜的網路環境中享受他們的工作。

Xshell可以在Windows界面下用來訪問遠端不同系統下的伺服器,從而比較好的達到遠程式控制制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。

安裝完成後,打開軟體,點擊左上角的新建回話按鈕,打開新建回話屬性,如下圖所示:

Xshell新建回話

在【主機】中填寫伺服器的ip地址,相應的用戶與密碼設置好,然後點擊【連接】按鈕。連接成功的界面如下所示:

image-20210113170538768

外部與Linux服務文件交互可以使用Xftp工具上傳或git倉庫中轉等其他方法,本文會演示使用Xftp與git倉庫兩種方式進行代碼文件的中轉。Xftp工具,下載地址:https://www.netsarang.com/zh/xftp-download/

Xftp是一個功能強大的SFTP、FTP 文件傳輸軟體。使用了 Xftp 以後,MS Windows 用戶能安全地在 UNIX/Linux 和 Windows PC 之間傳輸文件。

安裝完成後,可以通過XShell一鍵打開Xftp,Xftp打開後,在軟體的右側可以切換要上傳文件的目標路徑,然後將文件拖到右側釋放後,就會自動上傳了。

相對開發來說,使用Git倉庫中轉的方式是我們推薦的使用方式,在頻繁的迭代更新中,先在本地編譯發佈後,再將文件拷貝到伺服器,這個操作流程稍顯繁瑣。而通過git倉庫來中轉的方式則相對比較簡單,開發者僅需要將開發好的代碼推送(push)到git倉庫,然後在伺服器中執行build,publish等操作,減少了繁瑣的拷貝文件的過程,因為build和publish都是在伺服器中執行,可以通過編寫shell部署腳本的方式,最終實現一鍵快速部署。

要使用git需要在伺服器安裝git客戶端,並配置ssh公鑰(配置公鑰的目的是拉取私有的倉庫,公開的倉庫無需配置公鑰)。

下麵講解具體的操作步驟:

首先安裝git客戶端,執行如下命令:

  1. yum -y install git

在安裝過程如果出現錯誤:Couldn’t resolve host

Could not resolve host

一般是因為DNS伺服器沒有配置正確,解決辦法:
1、打開文件/etc/resolv.conf在其中添加:

resolv.conf

2、退出保存後重啟網路:

service network restart

git安裝後,通過如下命令生成sshkey:

  1. # 這裡的[email protected]只是生成的sshkey的名稱,並不約束貨要求具體命名為某個郵箱。
  2. ssh-keygen -t rsa -C "[email protected]"

按照提示,按三次回車,即可生成sshkey,如下圖所示:
生成sshkey

通過如下命令可查看公鑰:

  1. cat ~/.ssh/id_rsa.pub

複製生成後的sshkey,配置到代碼倉庫的公鑰中。

查看公鑰

公鑰已經生成,如何在代碼托管平臺進行配置呢?

接下來我們將學習如何在gitee代碼托管平臺下配置公鑰(github類似)。

進入私有倉庫的【管理】頁面,找到【公鑰管理】,點擊【添加公鑰】,將剛剛生成的公鑰複製過去,如下圖所示:

添加公鑰

出現類似於Hi xxx的字樣,則表示git公鑰配置成功了。

  1. ssh -T git@gitee.com

次使用需要確認並添加主機到本機SSH可信列表,如下圖所示:

添加主機到本機SSH可信列表

輸入yes後,出現類似於Hi xxx的字樣,則表示git公鑰配置成功了。

在前面我們已經做好了部署前的準備工作,安裝了xshell、xftp、git、對倉庫配置了公鑰等。

接下來我們將在linux伺服器上安裝.net core sdk。

.NET運行時是.NET程式運行的先決條件,而SDK並不是必須的,但如果通過git方式進行文件中轉的話,就需要到在伺服器端進行編譯,所以SDK也需要安裝。(註:docker部署方式無需在伺服器安裝SDK和運行時,在後面的文章中我們介紹

下麵一起看看在CentOs中如何安裝SDK和運行時(其他環境可參考官方文檔:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux)。

在安裝 .NET 之前,我們需要將 Microsoft 包簽名密鑰添加到受信任密鑰列表,並添加 Microsoft 包存儲庫。如果之前安裝過.NET Core3.1 ,那麼這個步驟可以省略

運行如下命令,將 Microsoft 包簽名密鑰添加到受信任密鑰列表,並添加 Microsoft 包存儲庫。

  1. sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

將 Microsoft 包簽名密鑰添加到受信任密鑰列表

通過如下命令安裝SDK:

  1. sudo yum install -y dotnet-sdk-5.0

安裝dotnetsdk50

.NET Core SDK 使你可以通過 .NET Core來 開發我們的應用。

安裝完成後,可以驗證安裝。

dotnet --info

驗證net core安裝

通過如下命令安裝netcore運行時:

  1. sudo yum install -y aspnetcore-runtime-5.0

註:上述命令中的最後的5.0表示的是版本號,如果安裝其他版本如:3.1,修改對應的版本號即可。參考資料:https://dotnet.microsoft.com/download/dotnet-core

如果已經安裝了安裝 .NET Core SDK,則無需安裝相應的運行時,在上面我們已經安裝了sdk,再安裝運行時會提示已經安裝,如下圖所示。

aspnetcore-runtime

在前面的準備工作中我們介紹了兩種將文件發佈到伺服器的方式,分別為:xftp與git,下麵我們分別演示這兩種方式的方法與步驟。

首先,準備好要發佈的程式,
下圖是我創建的一個.NET5.0的示例代碼:

image-20210113161511112

image-20210113161527341

可以通過打開vs的程式包管理器控制台,執行如下命令進行發佈:

  1. dotnet publish -o ./publish

也可以右鍵項目發佈,發佈到文件夾中,如下圖所示。

image-20210113162327320

在這兒需要註意的是框架依賴部署模式,因為之前我們已經安裝了.NET Core環境,這裡就不使用獨立部署模式了,預設也就是“框架依賴”。

image-20210113175714504

框架依賴部署:

依賴框架的部署 (FDD) 依賴目標系統上存在共用系統級版本的 .NET Core。 由於已存在 .NET Core,因此應用在 .NET Core 安裝程式間也是可移植的。 應用僅包含其自己的代碼和任何位於 .NET Core 庫外的第三方依賴項。 FDD 包含可通過在命令行中使用 dotnet 實用程式啟動的 .dll 文件。 例如,dotnet app.dll 就可以運行一個名為 app 的應用程式。
對於 FDD,僅部署應用程式和第三方依賴項。 不需要部署 .NET Core,因為應用將使用目標系統上存在的 .NET Core 版本。 這是定目標到 .NET Core 的 .NET Core 和 ASP.NET Core 應用程式的預設部署模型

優點:
①、不需要提前定義 .NET Core 應用將在其上運行的目標操作系統。 因為無論什麼操作系統,.NET Core 的可執行文件和庫都是用通用的 PE 文件格式,因此,無論什麼基礎操作系統,.NET Core 都可執行應用。
②、部署包很小。 只需部署應用及其依賴項,而無需部署 .NET Core 本身。
③、許多應用都可使用相同的 .NET Core 安裝,從而降低了主機系統上磁碟空間和記憶體使用量。

缺點:
①、僅當主機系統上已安裝你設為目標的 .NET Core 版本或更高版本時,應用才能運行。
②、如果不瞭解將來版本,.NET Core 運行時和庫可能發生更改。 在極少數情況下,這可能會更改應用的行為。

獨立部署:

獨立部署 (SCD) 不依賴目標系統上存在的共用組件。 所有組件(包括 .NET Core 庫和 .NET Core 運行時)都包含在應用程式中,並且獨立於其他 .NET Core 應用程式。 SCD 包括一個可執行文件(如 Windows 平臺上名為 app 的應用程式的 app.exe),它是特定於平臺的 .NET Core 主機的重命名版本,還包括一個 .dll 文件(如 app.dll),而它是實際的應用程式。
對於獨立部署,可以部署應用和所需的第三方依賴項以及生成應用所使用的 .NET Core 版本。 創建 SCD 不包括各種平臺上的 .NET Core 本機依賴項,因此運行應用前這些依賴項必須已存在

優點:
①、可以對與應用一起部署的 .NET Core 版本具有單獨的控制權
②、目標系統可以運行你的 .NET Core 應用,因為你提供的是應用將在其上運行的 .NET Core 版本

缺點:
①、由於 .NET Core 包含在部署包中,因此必須提前選擇為其生成部署包的目標平臺
②、部署包相對較大,因為需要將 .NET Core 和應用及其第三方依賴項包括在內。
③、向系統部署大量獨立的 .NET Core 應用可能會使用大量磁碟空間,因為每個應用都會複製 .NET Core 文件

image-20210116111525878

在上圖可以看到,發佈之後的文件的路徑為:bin/Release/net5.0/publish/

image-20210113162422379

打開Xftp,將publish文件夾拖到Xftp右側視窗,即可完成上傳。

image-20210113162958593

切換到發佈的目錄,啟動運行,如下圖所示,成功運行。

image-20210113165147617

也可以指定埠

  1. #啟動站點,自定義埠號,運行環境
  2. dotnet Core50Test.dll --urls="http://*:8081;http://*:8082" --environment=Development

這裡urls配置,如果需要區域網或者外網訪問,不能填成urls=”http://localhost:8081;http://localhost:8082

首先,將代碼推送到git倉庫中,複製SSH地址。如下圖所示:

image-20210113163255139

然後在伺服器中,執行克隆命令:

  1. mkdir core50test
  2. cd core50test
  3. git clone git@gitee.com:******/core50test.git

執行結果如下圖所示:

git克隆

此時項目代碼已經下載到伺服器中,切換工作目錄到解決方案所在的目錄。

  1. cd core50test

然後執行dotnet publish命令對程式進行編譯發佈。

  1. dotnet publish -o /yonghu/web/publish

執行完畢後,編譯發佈後的文件將被保存在/yonghu/web/publish目錄中。

image-20210113164049764

將工作目錄切換到/yonghu/web/publish,執行如下命令:

  1. dotnet core50test.dll

執行結果如下圖:

image-20210113164425166

到這裡為止,咱們的程式已經在linux伺服器運行起來了。

image-20210113164755688

通過上在的介紹,相信很多小伙伴已經對.netcore項目到linux的發佈有了深刻的認識了,但這些操作還是略顯繁瑣,啟動、停止、摘取等都是單獨的去處理,下次文章我們將介紹通過配置使用Supervisor+Nginx,以及shell腳本來實現.net core的高效部署。

 

作者|國思軟體

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/The-most-comprehensive-solution-for-deploying-NET-Core-to-Linux-CentOS-general-section.html


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

-Advertisement-
Play Games
更多相關文章
  • 教程簡介 JasperReports入門教程 - 使用包含從環境設置,報告設計,編譯報告設計,填充報告,查看和列印報告,導出,參數,數據源開始的基礎知識到高級知識的初學者教程,簡單易學地設計和創建JasperReports ,欄位,表達式,變數,部分,組,樣式,Scriplets,子報告,圖表,Co ...
  • 來自 https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247532967&idx=1&sn=19790c981aa33502aa1e3a8abe9cd064&chksm=e92a7ca8de5df5befc6cc534cbabdb847e ...
  • 教程簡介 Python 3入門教程 - 從基本概念開始,簡單易學地瞭解Python 3,包括Python 3語法面向對象語言,環境設置,基本語法,變數類型,基本運算符,決策,迴圈,方法,字元串等示例,列表,元組,字典,日期和時間,函數,模塊,文件I / O,工具/實用程式,異常處理,正則表達式,CG ...
  • 大數據時代,各行各業對數據採集的需求日益增多,網路爬蟲的運用也更為廣泛,越來越多的人開始學習網路爬蟲這項技術,K哥爬蟲此前已經推出不少爬蟲進階、逆向相關文章,為實現從易到難全方位覆蓋,特設【0基礎學爬蟲】專欄,幫助小白快速入門爬蟲,本期為自動化工具 playwright 的使用。 概述 上期文章中講 ...
  • 開心一刻 中午和哥們一起喝茶 哥們說道:晚上喝酒去啊 我:不去,我女朋友過生日 哥們瞪大眼睛看著我:你有病吧,充氣的過什麼生日 我生氣到:有特麽生產日期的好吧 需求背景 系統對接了外部系統,調用外部系統的介面需要付費,一個介面一次調用付費 0.03 元 同一個月內,同一個介面最高付費 25 元 統計 ...
  • 最近遇到公司的一個項目,需要將多張圖片合併成一個播放的視頻,找了很多資料和嘗試了工具,遇到很多的坑,這裡記下來,希望大家也能順利解決遇到的問題。 合併視頻,主要可以借用OpenCV 和 ffmpeg,這裡是嘗試用ffmpeg.exe的工具去實現圖片文件合併成視頻。 輸入存儲視頻文件的路徑,通過Pro ...
  • 書寫識別,網上的大佬們都有輸出。 書寫識別存在的2個問題: 直接拿官網的案例(將 Windows Ink 筆劃識別為文本和形狀 - Windows apps | Microsoft Learn),會發現輸出準確度不高。 另外如果書寫過快,片語識別也是個問題,畢竟無法準確分割字之間的筆跡。 我結合之前 ...
  • .Net Core在調用其他服務時,調用通常使用HttpClient,而HttpClient預設使用HTTP/1.1 。 配置 HttpClient 以使用 HTTP/2 h2 連接 自 .NET Core 3.0 發佈以來, .NET 開發人員可以使用 HttpClient 啟用 HTTP/2 。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...