.NET Core实战项目之CMS 第十七章 CMS网站系统的部署
目前我們的.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS系列教程基本走到尾聲了,通過這一系列的學(xué)習(xí)你應(yīng)該能夠輕松應(yīng)對(duì).NET Core的日常開發(fā)了!當(dāng)然這個(gè)CMS系統(tǒng)的一些邏輯處理還需要優(yōu)化,如沒有引入日志組件以及緩存功能,權(quán)限目前只支持控制到菜單,卻沒有控制到具體的功能(其實(shí)這塊只是苦于樣式不會(huì)處理,不然的話也會(huì)把功能加上),不過話又說回來,這些都是次要的,后期有時(shí)間慢慢補(bǔ)上吧,因?yàn)槲议_這個(gè)系列的初衷也是對(duì)大家入門.NET Core學(xué)習(xí)有所幫助!這一章我們將一起部署我們的一路開發(fā)過來的網(wǎng)站。如果你覺得文中有任何不妥的地方還請(qǐng)留言或者加入DotNetCore實(shí)戰(zhàn)千人交流群637326624跟大伙進(jìn)行交流討論吧!
本文已收錄至《.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃》
作者:依樂祝
原文地址:https://www.cnblogs.com/yilezhu/p/10366679.html
寫在前面
既然系統(tǒng)開發(fā)好了,那么肯定是要進(jìn)行部署了,作為一名.NET Core研發(fā)人員如果你不會(huì)部署自己的應(yīng)用的話,明顯不是一個(gè)合格的程序員。我們知道如果要進(jìn)行.NET Core的開發(fā)的話就需要安裝.Net Core SDK的,如果你僅僅是在服務(wù)器上進(jìn)行.NET Core的部署的話,只需要安裝Net Core Runtime即可。
對(duì)于SDK以及Runtime的下載你可以點(diǎn)擊這里進(jìn)行下載。
Asp.Net Core 的部署方式
下面我?guī)е蠹乙黄鹂偨Y(jié)下Asp.Net Core的幾種部署方式,平時(shí)我們使用windows服務(wù)器比較多,所以都是iis直接部署的,但是Asp.Net Core開發(fā)的程序不僅僅能部署在windows系統(tǒng)的iis上,它還可以有很多其他的部署方式,下面我就為你一一梳理下,當(dāng)然這里參考了園子里面“幻天芒”的一篇文章,文章末尾我會(huì)給出文章鏈接。
控制臺(tái)直接運(yùn)行
Asp.Net Core 程序在發(fā)布后,會(huì)產(chǎn)生一個(gè)入口 dll 文件,要運(yùn)行該程序,只需要通過 dotnet 命令執(zhí)行該 dll 文件即可。所以,第一種方式就是直接找到 dll 文件,并使用 dotnet 命令來運(yùn)行。(你說 dotnet 命令哪來的?安裝了 Runtime 就有了。)當(dāng)然這里你還可以在運(yùn)行的時(shí)候指定端口號(hào)
dotnet Czar.Cms.Admin.dll --urls=http://localhost:8099運(yùn)行結(jié)果如下圖所示:
IIS部署
用 .Net Framework 開發(fā)的應(yīng)用,大家都比較熟悉用 IIS 來部署。那 .Net Core 呢?雖然兩者的運(yùn)行模式并不相同,但微軟為了減少遷移難度,自然也提供了用 IIS 的部署方法。
與 Asp.Net 不同,ASP.NET Core 不再是由 IIS 工作進(jìn)程(w3wp.exe)托管,而是使用自托管 Web 服務(wù)器(Kestrel)運(yùn)行,IIS 則是作為反向代理的角色轉(zhuǎn)發(fā)請(qǐng)求到 Kestrel 不同端口的 ASP.NET Core 程序中,隨后就將接收到的請(qǐng)求推送至中間件管道中去,處理完你的請(qǐng)求和相關(guān)業(yè)務(wù)邏輯之后再將 HTTP 響應(yīng)數(shù)據(jù)重新回寫到 IIS 中,最終轉(zhuǎn)達(dá)到不同的客戶端(瀏覽器,APP,客戶端等)。
如果要使用 IIS 部署 Asp.Net Core 程序,步驟如下:
在托管系統(tǒng)上,創(chuàng)建一個(gè)文件夾以包含應(yīng)用已發(fā)布的文件夾和文件。?目錄結(jié)構(gòu)主題中介紹了應(yīng)用的部署布局。
在“IIS 管理器”中,打開“連接”面板中的服務(wù)器節(jié)點(diǎn)。 右鍵單擊“站點(diǎn)”文件夾。 選擇上下文菜單中的“添加網(wǎng)站”。
提供網(wǎng)站名稱,并將物理路徑設(shè)置為應(yīng)用的部署文件夾。 提供“綁定”配置,并通過選擇“確定”創(chuàng)建網(wǎng)站:
警告
不應(yīng)使用頂級(jí)通配符綁定(http://*:80/?和?http://+:80)。 頂級(jí)通配符綁定可能會(huì)為應(yīng)用帶來安全漏洞。 此行為同時(shí)適用于強(qiáng)通配符和弱通配符。 使用顯式主機(jī)名而不是通配符。 如果可控制整個(gè)父域(區(qū)別于易受攻擊的?*.com),則子域通配符綁定(例如,*.mysub.com)不具有此安全風(fēng)險(xiǎn)。 有關(guān)詳細(xì)信息,請(qǐng)參閱?rfc7230 第 5.4 條。
在服務(wù)器節(jié)點(diǎn)下,選擇“應(yīng)用程序池”。
右鍵單擊站點(diǎn)的應(yīng)用池,然后從上下文菜單中選擇“基本設(shè)置”。
在“編輯應(yīng)用程序池”窗口中,將“.NET CLR 版本”設(shè)置為“無托管代碼”:
ASP.NET Core 在單獨(dú)的進(jìn)程中運(yùn)行,并管理運(yùn)行時(shí)。 ASP.NET Core 不依賴加載桌面 CLR。 將“.NET CLR 版本”設(shè)置為“無托管代碼”為可選步驟。
ASP.NET Core 2.2 或更高版本:對(duì)于使用進(jìn)程內(nèi)托管模型的 64 位 (x64)?獨(dú)立部署,為 32 位 (x86) 進(jìn)程禁用應(yīng)用池。
在 IIS 管理員的“應(yīng)用程序池”的“操作”側(cè)欄中,選擇“設(shè)置應(yīng)用程序池默認(rèn)設(shè)置”或“高級(jí)設(shè)置”。 找到“啟用 32 位應(yīng)用程序”并將值設(shè)置為?False。 此設(shè)置不會(huì)影響針對(duì)進(jìn)程外托管部署的應(yīng)用。
確認(rèn)進(jìn)程模型標(biāo)識(shí)擁有適當(dāng)?shù)臋?quán)限。
如果將應(yīng)用池的默認(rèn)標(biāo)識(shí)(“進(jìn)程模型” > “標(biāo)識(shí)”)從 ApplicationPoolIdentity 更改為另一標(biāo)識(shí),請(qǐng)驗(yàn)證新標(biāo)識(shí)擁有所需的權(quán)限,可訪問應(yīng)用的文件夾、數(shù)據(jù)庫(kù)和其他所需資源。 例如,應(yīng)用池需要對(duì)文件夾的讀取和寫入權(quán)限,以便應(yīng)用在其中讀取和寫入文件。
了解更多,請(qǐng)參考:IIS 部署.Net Core 應(yīng)用
目前我們采用的方式就是iis進(jìn)行部署。
部署為 Windows Service
通過 Windows Service的部署方式,我們能夠解決上面控制臺(tái)直接運(yùn)行部署的開機(jī)啟動(dòng)和持久運(yùn)行問題,也能避開 iis部署 中的性能損失問題。具體如何做呢?如下提供一種方式(當(dāng)然,也可以用其他方式來部署 Windows Service):
借助 nssm 來管理 Windows Service,Nssm,用法,請(qǐng)參考:https://nssm.cc/usage
配置 Service 開機(jī)啟動(dòng)。
安裝nssm,然后切換到nssm的安裝路徑,打開控制臺(tái)
運(yùn)行如下的命令:nssm install <servicename>?從而打開nssm的安裝界面如下圖所示:
就幾個(gè)選項(xiàng),很簡(jiǎn)單,大家安裝英文意思進(jìn)行配置即可。
優(yōu)勢(shì):
高性能部署,穩(wěn)定性好。
支持開機(jī)啟動(dòng)。
劣勢(shì):
僅能用于 Windows 服務(wù)器。
引入了一個(gè)外包依賴 NSSM。
Linux 部署
由于 .Net Core 天生支持跨平臺(tái),如果在廉價(jià)又穩(wěn)定的 Linux 上部署 .Net Core 程序逐漸成為主流。對(duì)于 Linux 上的部署,和 Windows 上并沒有什么區(qū)別。首先是安裝 Runtime 環(huán)境,然后拷貝程序,并通過命令行運(yùn)行。
再進(jìn)一步,可以使用后臺(tái)模式,讓程序在后臺(tái)運(yùn)行。
更進(jìn)一步,也可以效仿 Windows,把程序啟動(dòng)管理作為一個(gè)服務(wù),來達(dá)到開機(jī)啟動(dòng)和靈活管理的目的。
Docker 部署
作為當(dāng)前個(gè)人認(rèn)為的最棒的 .Net Core 應(yīng)用部署方式,建議大家都了解下。目前我們正在嘗試進(jìn)行Docker化,然后用K8S來進(jìn)行管理。
首先,是 Docker 的基本使用:
編寫 Dockerfile
使用?docker build?構(gòu)建鏡像
使用?docker run?創(chuàng)建容器并運(yùn)行
好,我們來依次說明,對(duì)于 Docker 來說,需要先安裝 Docker 環(huán)境。
接著,我們假設(shè)發(fā)布包路徑如下:
root-folder/app/ # 發(fā)布包目錄xxx.dll # 程序入口點(diǎn) Dockerfile # Dockerfile文件然后針對(duì)該程序,編寫如下 Dockerfile:
# 根鏡像FROM microsoft/dotnet:2.2-runtime# 拷貝程序發(fā)布包COPY app /app# 設(shè)置工作目錄WORKDIR /app# 導(dǎo)出的端口EXPOST 80# 程序運(yùn)行命令CMD ["dotnet", "xxx.dll"]接下來,通過在?root-folder?中執(zhí)行?docker build -t xxx:0.0.1 .?來構(gòu)建一個(gè)鏡像。
接著,再通過?docker run -it -p 8000:80 --name xxx-demo xxx:0.0.1?來創(chuàng)建并運(yùn)行容器。
這樣,就可以通過?http://localhost:8000?來訪問到你的應(yīng)用程序了。
此處只是大概寫下 Docker 部署的步驟,拋磚引玉。真正需要將其用于產(chǎn)線,還需要去學(xué)習(xí)下足夠的 Docker 知識(shí)。
額外提一下,如何選擇基礎(chǔ)鏡像
對(duì)于 .Net Core 來說,一般有如下幾類基礎(chǔ)鏡像:
sdk -- 相信這個(gè)都比較容易理解,就是包含了 .Net Core SDK。
runtime -- 這個(gè)也相對(duì)容易理解,包含了.Net Core Runtime。
runtime-deps --這個(gè)就不是很好理解, runtime? deps? 什么意思呢?就是說,這個(gè)連 Runtime都不是全的,需要你在打包的時(shí)候,選擇自寄宿模式,把Runtime也打進(jìn)去。
綜上,我個(gè)人推薦大家選擇 runtime 這類作為基礎(chǔ)鏡像。
總結(jié)
今天給大家介紹了asp.net core的幾種部署方式希望對(duì)大家有所幫助,當(dāng)然部分內(nèi)容我沒有寫的很詳細(xì),是想留給大家以思考,動(dòng)手嘗試下!感謝大家的閱讀!
相關(guān)文章:
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第二章 入門篇-快速入門ASP.NET Core看這篇就夠了
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第三章 入門篇-源碼解析配置文件及依賴注入
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第四章 入門篇-Git的快速入門及實(shí)戰(zhàn)演練
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第五章 入門篇-Dapper的快速入門看這篇就夠了
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第六章 入門篇-Vue的快速入門及其使用
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第七章 設(shè)計(jì)篇-用戶權(quán)限極簡(jiǎn)設(shè)計(jì)全過程
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第八章 設(shè)計(jì)篇-內(nèi)容管理極簡(jiǎn)設(shè)計(jì)全過程
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第九章 設(shè)計(jì)篇-白話架構(gòu)設(shè)計(jì)
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第十章 設(shè)計(jì)篇-系統(tǒng)開發(fā)框架設(shè)計(jì)
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第十一章 開發(fā)篇-數(shù)據(jù)庫(kù)生成及實(shí)體代碼生成器開發(fā)
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第十二章 開發(fā)篇-Dapper封裝GURD及倉(cāng)儲(chǔ)代碼生成器實(shí)現(xiàn)
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第十三章 開發(fā)篇-在MVC項(xiàng)目結(jié)構(gòu)介紹及應(yīng)用第三方UI
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS第十四章開發(fā)篇-防止跨站請(qǐng)求偽造(XSRF/CSRF)攻擊處理
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS第十五章各層聯(lián)動(dòng)工作實(shí)現(xiàn)增刪改查業(yè)務(wù)
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第十六章 用戶登錄及驗(yàn)證碼功能實(shí)現(xiàn)
原文地址:https://www.cnblogs.com/yilezhu/p/10366679.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core实战项目之CMS 第十七章 CMS网站系统的部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手工修复Azure DevOps无法连接
- 下一篇: 吉特仓储管理系统--开源2018年源码