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

.NET快速開發框架發表於2021-01-18

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

1、Linux作業系統、Xshell、Xftp安裝

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

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

1.1、Xshell連線工具

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

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

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

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

Xshell新建回話

在【主機】中填寫伺服器的ip地址,相應的使用者與密碼設定好,然後點選【連線】按鈕。連線成功的介面如下所示:

1.2、Xftp檔案上傳工具

外部與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開啟後,在軟體的右側可以切換要上傳檔案的目標路徑,然後將檔案拖到右側釋放後,就會自動上傳了。

1.3、使用git倉庫進行中轉

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

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

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

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

yum -y install git

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

一般是因為DNS伺服器沒有配置正確,解決辦法:
1、開啟檔案/etc/resolv.conf在其中新增:

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

service network restart

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

# 這裡的xx@xxx.com只是生成的sshkey的名稱,並不約束貨要求具體命名為某個郵箱。
ssh-keygen -t rsa -C "xx@xxx.com"  

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

通過如下命令可檢視公鑰:

cat ~/.ssh/id_rsa.pub

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

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

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

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

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

ssh -T git@gitee.com

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

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

2、安裝.NET Core SDK與執行時

在前面我們已經做好了部署前的準備工作,安裝了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 包儲存庫。

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

通過如下命令安裝SDK:

sudo yum install -y dotnet-sdk-5.0

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

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

dotnet --info

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

sudo yum install -y aspnetcore-runtime-5.0

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

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

3、釋出程式到伺服器

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

3.1、通過Xftp釋出到伺服器

首先,準備好要釋出的程式,
下圖是我建立的一個.NET5.0的示例程式碼:


可以通過開啟vs的程式包管理器控制檯,執行如下命令進行釋出:

 dotnet publish -o ./publish

也可以右鍵專案釋出,釋出到資料夾中,如下圖所示。

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

框架依賴部署:

依賴框架的部署 (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 檔案

在上圖可以看到,釋出之後的檔案的路徑為:bin/Release/net5.0/publish/

開啟Xftp,將publish資料夾拖到Xftp右側視窗,即可完成上傳。

切換到釋出的目錄,啟動執行,如下圖所示,成功執行。

也可以指定埠

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

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

3.2、通過git中轉發布

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

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

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

執行結果如下圖所示:

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

cd core50test

然後執行dotnet publish命令對程式進行編譯釋出。

 dotnet publish -o /yonghu/web/publish

執行完畢後,編譯釋出後的檔案將被儲存在/yonghu/web/publish目錄中。

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

dotnet core50test.dll

執行結果如下圖:

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

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


一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址瞭解詳情。

RDIFramework.NET官方網站:http://www.rdiframework.net/

RDIFramework.NET官方部落格:http://blog.rdiframework.net/

特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏!

RDIFramework.NET框架由海南國思軟體科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!

歡迎關注RDIFramework.NET框架官方微信公眾號(微訊號:guosisoft),及時瞭解最新動態。

使用微信掃描二維碼立即關注

相關文章