本文爲你們介紹使用 .NET Core部署到Linux服務器的方法,經過本文你將瞭解到Linux在虛擬機下的安裝、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的發佈與運行全過程,本文皆在總結了一些經驗與筆記在部署過程當中遇到的一些問題,同時分享給你們,供你們參考,歡迎討論交流。linux
操做系統可選擇你比較熟悉的Linux發行版,若是你是第一次接觸Linux,推薦使用CentOs,由於本文的內容都是在CentOs中進行演示的。git
至於系統的安裝,你能夠選擇雲服務器,或者使用虛擬機安裝。虛擬機安裝CentOs的方式能夠參考:一網打盡,一文講通虛擬機安裝及Linux使用github
咱們推薦使用XShell做爲鏈接工具,下載地址:https://www.netsarang.com/zh/xshell-download/web
Xshell是一個強大的安全終端模擬軟件,它支持SSH1, SSH2, 以及Microsoft Windows 平臺的TELNET 協議。Xshell 經過互聯網到遠程主機的安全鏈接以及它創新性的設計和特點幫助用戶在複雜的網絡環境中享受他們的工做。docker
Xshell能夠在Windows界面下用來訪問遠端不一樣系統下的服務器,從而比較好的達到遠程控制終端的目的。除此以外,其還有豐富的外觀配色方案以及樣式選擇。shell
安裝完成後,打開軟件,點擊左上角的新建回話按鈕,打開新建回話屬性,以下圖所示:c#
在【主機】中填寫服務器的ip地址,相應的用戶與密碼設置好,而後點擊【鏈接】按鈕。鏈接成功的界面以下所示:centos
外部與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客戶端,執行以下命令:
yum -y install git
在安裝過程若是出現錯誤:Couldn't resolve host
通常是由於DNS服務器沒有配置正確,解決辦法:
一、打開文件/etc/resolv.conf在其中添加:
二、退出保存後重啓網絡:
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公鑰配置成功了。
在前面咱們已經作好了部署前的準備工做,安裝了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,再安裝運行時會提示已經安裝,以下圖所示。
在前面的準備工做中咱們介紹了兩種將文件發佈到服務器的方式,分別爲:xftp與git,下面咱們分別演示這兩種方式的方法與步驟。
首先,準備好要發佈的程序,
下圖是我建立的一個.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"
首先,將代碼推送到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),及時瞭解最新動態。
使用微信掃描二維碼當即關注