目前咱們的.NET Core實戰項目之CMS系列教程基本走到尾聲了,經過這一系列的學習你應該可以輕鬆應對.NET Core的平常開發了!固然這個CMS系統的一些邏輯處理還須要優化,如沒有引入日誌組件以及緩存功能,權限目前只支持控制到菜單,卻沒有控制到具體的功能(其實這塊只是苦於樣式不會處理,否則的話也會把功能加上),不過話又說回來,這些都是次要的,後期有時間慢慢補上吧,由於我開這個系列的初衷也是對你們入門.NET Core學習有所幫助!這一章咱們將一塊兒部署咱們的一路開發過來的網站。若是你以爲文中有任何不妥的地方還請留言或者加入DotNetCore實戰千人交流羣637326624跟大夥進行交流討論吧!html
本文已收錄至《.NET Core實戰項目之CMS 第一章 入門篇-開篇及整體規劃》
做者:依樂祝
原文地址:http://www.javashuo.com/article/p-hvwmjhiv-gp.htmllinux
既然系統開發好了,那麼確定是要進行部署了,做爲一名.NET Core研發人員若是你不會部署本身的應用的話,明顯不是一個合格的程序員。咱們知道若是要進行.NET Core的開發的話就須要安裝.Net Core SDK的,若是你僅僅是在服務器上進行.NET Core的部署的話,只須要安裝Net Core Runtime便可。
對於SDK以及Runtime的下載你能夠點擊這裏進行下載。程序員
下面我帶着你們一塊兒總結下Asp.Net Core的幾種部署方式,平時咱們使用windows服務器比較多,因此都是iis直接部署的,可是Asp.Net Core開發的程序不只僅能部署在windows系統的iis上,它還能夠有不少其餘的部署方式,下面我就爲你一一梳理下,固然這裏參考了園子裏面「幻天芒」的一篇文章,文章末尾我會給出文章連接。docker
Asp.Net Core 程序在發佈後,會產生一個入口 dll 文件,要運行該程序,只須要經過 dotnet 命令執行該 dll 文件便可。因此,第一種方式就是直接找到 dll 文件,並使用 dotnet 命令來運行。(你說 dotnet 命令哪來的?安裝了 Runtime 就有了。)固然這裏你還能夠在運行的時候指定端口號數據庫
# 進行控制檯執行 dotnet Czar.Cms.Admin.dll --urls=http://localhost:8099
運行結果以下圖所示:c#
用 .Net Framework 開發的應用,你們都比較熟悉用 IIS 來部署。那 .Net Core 呢?雖然二者的運行模式並不相同,但微軟爲了減小遷移難度,天然也提供了用 IIS 的部署方法。windows
與 Asp.Net 不一樣,ASP.NET Core 再也不是由 IIS 工做進程(w3wp.exe)託管,而是使用自託管 Web 服務器(Kestrel)運行,IIS 則是做爲反向代理的角色轉發請求到 Kestrel 不一樣端口的 ASP.NET Core 程序中,隨後就將接收到的請求推送至中間件管道中去,處理完你的請求和相關業務邏輯以後再將 HTTP 響應數據從新回寫到 IIS 中,最終轉達到不一樣的客戶端(瀏覽器,APP,客戶端等)。瀏覽器
若是要使用 IIS 部署 Asp.Net Core 程序,步驟以下:緩存
在託管系統上,建立一個文件夾以包含應用已發佈的文件夾和文件。 目錄結構主題中介紹了應用的部署佈局。安全
在「IIS 管理器」中,打開「鏈接」面板中的服務器節點。 右鍵單擊「站點」文件夾。 選擇上下文菜單中的「添加網站」。
提供網站名稱,並將物理路徑設置爲應用的部署文件夾。 提供「綁定」配置,並經過選擇「肯定」建立網站:
警告
不該使用頂級通配符綁定(http://*:80/
和 http://+:80
)。 頂級通配符綁定可能會爲應用帶來安全漏洞。 此行爲同時適用於強通配符和弱通配符。 使用顯式主機名而不是通配符。 若是可控制整個父域(區別於易受攻擊的 *.com
),則子域通配符綁定(例如,*.mysub.com
)不具備此安全風險。 有關詳細信息,請參閱 rfc7230 第 5.4 條。
在服務器節點下,選擇「應用程序池」。
右鍵單擊站點的應用池,而後從上下文菜單中選擇「基本設置」。
在「編輯應用程序池」窗口中,將「.NET CLR 版本」設置爲「無託管代碼」:
ASP.NET Core 在單獨的進程中運行,並管理運行時。 ASP.NET Core 不依賴加載桌面 CLR。 將「.NET CLR 版本」設置爲「無託管代碼」爲可選步驟。
ASP.NET Core 2.2 或更高版本:對於使用進程內託管模型的 64 位 (x64) 獨立部署,爲 32 位 (x86) 進程禁用應用池。
在 IIS 管理員的「應用程序池」的「操做」側欄中,選擇「設置應用程序池默認設置」或「高級設置」。 找到「啓用 32 位應用程序」並將值設置爲 False
。 此設置不會影響針對進程外託管部署的應用。
確認進程模型標識擁有適當的權限。
若是將應用池的默認標識(「進程模型」 > 「標識」)從 ApplicationPoolIdentity 更改成另外一標識,請驗證新標識擁有所需的權限,可訪問應用的文件夾、數據庫和其餘所需資源。 例如,應用池須要對文件夾的讀取和寫入權限,以便應用在其中讀取和寫入文件。
瞭解更多,請參考:IIS 部署.Net Core 應用
目前咱們採用的方式就是iis進行部署。
經過 Windows Service的部署方式,咱們可以解決上面控制檯直接運行部署的開機啓動和持久運行問題,也能避開 iis部署 中的性能損失問題。具體如何作呢?以下提供一種方式(固然,也能夠用其餘方式來部署 Windows Service):
藉助 nssm 來管理 Windows Service,Nssm,用法,請參考:https://nssm.cc/usage
配置 Service 開機啓動。
安裝nssm,而後切換到nssm的安裝路徑,打開控制檯
運行以下的命令:nssm install <servicename>
從而打開nssm的安裝界面以下圖所示:
就幾個選項,很簡單,你們安裝英文意思進行配置便可。
優點:
劣勢:
因爲 .Net Core 天生支持跨平臺,若是在廉價又穩定的 Linux 上部署 .Net Core 程序逐漸成爲主流。對於 Linux 上的部署,和 Windows 上並無什麼區別。首先是安裝 Runtime 環境,而後拷貝程序,並經過命令行運行。
再進一步,可使用後臺模式,讓程序在後臺運行。
更進一步,也能夠效仿 Windows,把程序啓動管理做爲一個服務,來達到開機啓動和靈活管理的目的。
做爲當前我的認爲的最棒的 .Net Core 應用部署方式,建議你們都瞭解下。目前咱們正在嘗試進行Docker化,而後用K8S來進行管理。
首先,是 Docker 的基本使用:
docker build
構建鏡像docker run
建立容器並運行好,咱們來依次說明,對於 Docker 來講,須要先安裝 Docker 環境。
接着,咱們假設發佈包路徑以下:
root-folder/ app/ # 發佈包目錄 xxx.dll # 程序入口點 Dockerfile # Dockerfile文件
而後針對該程序,編寫以下 Dockerfile:
# 根鏡像 FROM microsoft/dotnet:2.2-runtime # 拷貝程序發佈包 COPY app /app # 設置工做目錄 WORKDIR /app # 導出的端口 EXPOST 80 # 程序運行命令 CMD ["dotnet", "xxx.dll"]
接下來,經過在 root-folder
中執行 docker build -t xxx:0.0.1 .
來構建一個鏡像。
接着,再經過 docker run -it -p 8000:80 --name xxx-demo xxx:0.0.1
來建立並運行容器。
這樣,就能夠經過 http://localhost:8000
來訪問到你的應用程序了。
此處只是大概寫下 Docker 部署的步驟,拋磚引玉。真正須要將其用於產線,還須要去學習下足夠的 Docker 知識。
額外提一下,如何選擇基礎鏡像
對於 .Net Core 來講,通常有以下幾類基礎鏡像:
今天給你們介紹了asp.net core的幾種部署方式但願對你們有所幫助,固然部份內容我沒有寫的很詳細,是想留給你們以思考,動手嘗試下!感謝你們的閱讀!