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

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

2023-04-28 12:28:18 .NET開發

本文為大家介紹使用 .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地址,相應的用戶與密碼設定好,然后點擊【連接】按鈕,連接成功的界面如下所示:

image-20210113170538768

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客戶端,執行如下命令:

  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公鑰配置成功了,

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 包存盤庫,

  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

3、發布程式到服務器

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

3.1、通過Xftp發布到服務器

首先,準備好要發布的程式,
下圖是我創建的一個.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“

3.2、通過git中轉發布

首先,將代碼推送到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

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/551407.html

標籤:.NET Core

上一篇:C# 手寫識別方案整理

下一篇:返回列表

標籤雲
其他(158258) Python(38107) JavaScript(25396) Java(18003) C(15218) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7152) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5332) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1961) Web開發(1951) HtmlCss(1928) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1856) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • .NET Core部署到linux(CentOS)最全解決方案,常規篇

    <a href="https://www.cnblogs.com/88223100/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u27422.jpg" alt="" /></a>...

    uj5u.com 2023-04-28 12:28:18 more
  • C# 手寫識別方案整理

    書寫識別,網上的大佬們都有輸出。 書寫識別存在的2個問題: 直接拿官網的案例(將 Windows Ink 筆劃識別為文本和形狀 - Windows apps | Microsoft Learn),會發現輸出準確度不高。 另外如果書寫過快,詞組識別也是個問題,畢竟無法準確分割字之間的筆跡。 我結合之前 ......

    uj5u.com 2023-04-28 12:22:05 more
  • 外鍵拆分手記

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-04-27 09:20:13 more
  • 外鍵拆分手記

    我習慣性使用OData,它的$expand與層級查詢非常好用,這個功能非常依賴于資料庫的導航屬性,也就是外鍵結構。最近想著把一個單體的系統拆分為多個小系統,首先需要處理外鍵依賴的問題。 多個服務各自有各自的資料庫,資料庫層面并不互通,也就無法使用外鍵約束。 我使用EF Core來描述資料庫的結構,有 ......

    uj5u.com 2023-04-27 09:19:58 more
  • .NET CORE開源 DDD微服務 支持 多租戶 單點登錄 多級快取、自動

    源代碼地址https://github.com/junkai-li/NetCoreKevin基于NET6搭建跨平臺DDD思想WebApi架構、IDS4單點登錄、多快取、自動任務、分布式、多租戶、日志、授權和鑒權、CAP、SignalR、 docker部署 如需簡約專案可直接去除專案參考 解耦設計都可 ......

    uj5u.com 2023-04-24 09:43:32 more
  • .NET CORE開源 DDD微服務 支持 多租戶 單點登錄 多級快取、自動

    源代碼地址https://github.com/junkai-li/NetCoreKevin基于NET6搭建跨平臺DDD思想WebApi架構、IDS4單點登錄、多快取、自動任務、分布式、多租戶、日志、授權和鑒權、CAP、SignalR、 docker部署 如需簡約專案可直接去除專案參考 解耦設計都可 ......

    uj5u.com 2023-04-24 09:42:24 more
  • .NET Core 環境變數詳解

    <a href="https://www.cnblogs.com/88223100/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u27422.jpg" alt="" /></a>...

    uj5u.com 2023-04-21 09:10:55 more
  • .NET Core 環境變數詳解

    <a href="https://www.cnblogs.com/88223100/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u27422.jpg" alt="" /></a>...

    uj5u.com 2023-04-21 09:04:49 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more