.NET Core實戰項目之CMS 第十七章 CMS網站系統的部署

来源:https://www.cnblogs.com/yilezhu/archive/2019/02/12/10366679.html
-Advertisement-
Play Games

目前我們的.NET Core實戰項目之CMS系列教程基本走到尾聲了,通過這一系列的學習你應該能夠輕鬆應對.NET Core的日常開發了!當然這個CMS系統的一些邏輯處理還需要優化,如沒有引入日誌組件以及緩存功能,許可權目前只支持控制到菜單,卻沒有控制到具體的功能(其實這塊只是苦於樣式不會處理,不然的話 ...


目前我們的.NET Core實戰項目之CMS系列教程基本走到尾聲了,通過這一系列的學習你應該能夠輕鬆應對.NET Core的日常開發了!當然這個CMS系統的一些邏輯處理還需要優化,如沒有引入日誌組件以及緩存功能,許可權目前只支持控制到菜單,卻沒有控制到具體的功能(其實這塊只是苦於樣式不會處理,不然的話也會把功能加上),不過話又說回來,這些都是次要的,後期有時間慢慢補上吧,因為我開這個系列的初衷也是對大家入門.NET Core學習有所幫助!這一章我們將一起部署我們的一路開發過來的網站。如果你覺得文中有任何不妥的地方還請留言或者加入DotNetCore實戰千人交流群637326624跟大伙進行交流討論吧!

本文已收錄至《.NET Core實戰項目之CMS 第一章 入門篇-開篇及總體規劃
作者:依樂祝
原文地址:https://www.cnblogs.com/yilezhu/p/10366679.html

寫在前面

既然系統開發好了,那麼肯定是要進行部署了,作為一名.NET Core研發人員如果你不會部署自己的應用的話,明顯不是一個合格的程式員。我們知道如果要進行.NET Core的開發的話就需要安裝.Net Core SDK的,如果你僅僅是在伺服器上進行.NET Core的部署的話,只需要安裝Net Core Runtime即可。
對於SDK以及Runtime的下載你可以點擊這裡進行下載。

Asp.Net Core 的部署方式

下麵我帶著大家一起總結下Asp.Net Core的幾種部署方式,平時我們使用windows伺服器比較多,所以都是iis直接部署的,但是Asp.Net Core開發的程式不僅僅能部署在windows系統的iis上,它還可以有很多其他的部署方式,下麵我就為你一一梳理下,當然這裡參考了園子裡面“幻天芒”的一篇文章,文章末尾我會給出文章鏈接。

控制台直接運行

Asp.Net Core 程式在發佈後,會產生一個入口 dll 文件,要運行該程式,只需要通過 dotnet 命令執行該 dll 文件即可。所以,第一種方式就是直接找到 dll 文件,並使用 dotnet 命令來運行。(你說 dotnet 命令哪來的?安裝了 Runtime 就有了。)當然這裡你還可以在運行的時候指定埠號

# 進行控制台執行
 dotnet Czar.Cms.Admin.dll --urls=http://localhost:8099

運行結果如下圖所示:

1549967609348

IIS部署

用 .Net Framework 開發的應用,大家都比較熟悉用 IIS 來部署。那 .Net Core 呢?雖然兩者的運行模式並不相同,但微軟為了減少遷移難度,自然也提供了用 IIS 的部署方法。

與 Asp.Net 不同,ASP.NET Core 不再是由 IIS 工作進程(w3wp.exe)托管,而是使用自托管 Web 伺服器(Kestrel)運行,IIS 則是作為反向代理的角色轉發請求到 Kestrel 不同埠的 ASP.NET Core 程式中,隨後就將接收到的請求推送至中間件管道中去,處理完你的請求和相關業務邏輯之後再將 HTTP 響應數據重新回寫到 IIS 中,最終轉達到不同的客戶端(瀏覽器,APP,客戶端等)。

如果要使用 IIS 部署 Asp.Net Core 程式,步驟如下:

  1. 在托管系統上,創建一個文件夾以包含應用已發佈的文件夾和文件。 目錄結構主題中介紹了應用的部署佈局。

  2. 在“IIS 管理器”中,打開“連接”面板中的伺服器節點。 右鍵單擊“站點”文件夾。 選擇上下文菜單中的“添加網站”。

  3. 提供網站名稱,並將物理路徑設置為應用的部署文件夾。 提供“綁定”配置,並通過選擇“確定”創建網站:

    在“添加網站”步驟中提供網站名稱、物理路徑和主機名。

    警告

    不應使用頂級通配符綁定(http://*:80/http://+:80)。 頂級通配符綁定可能會為應用帶來安全漏洞。 此行為同時適用於強通配符和弱通配符。 使用顯式主機名而不是通配符。 如果可控制整個父域(區別於易受攻擊的 *.com),則子域通配符綁定(例如,*.mysub.com)不具有此安全風險。 有關詳細信息,請參閱 rfc7230 第 5.4 條

  4. 在伺服器節點下,選擇“應用程式池”。

  5. 右鍵單擊站點的應用池,然後從上下文菜單中選擇“基本設置”。

  6. 在“編輯應用程式池”視窗中,將“.NET CLR 版本”設置為“無托管代碼”:

    將“.NET CLR 版本”設置為“無托管代碼”。

    ASP.NET Core 在單獨的進程中運行,並管理運行時。 ASP.NET Core 不依賴載入桌面 CLR。 將“.NET CLR 版本”設置為“無托管代碼”為可選步驟。

  7. ASP.NET Core 2.2 或更高版本:對於使用進程內托管模型的 64 位 (x64) 獨立部署,為 32 位 (x86) 進程禁用應用池。

    在 IIS 管理員的“應用程式池”的“操作”側欄中,選擇“設置應用程式池預設設置”或“高級設置”。 找到“啟用 32 位應用程式”並將值設置為 False。 此設置不會影響針對進程外托管部署的應用。

  8. 確認進程模型標識擁有適當的許可權。

    如果將應用池的預設標識(“進程模型” > “標識”)從 ApplicationPoolIdentity 更改為另一標識,請驗證新標識擁有所需的許可權,可訪問應用的文件夾、資料庫和其他所需資源。 例如,應用池需要對文件夾的讀取和寫入許可權,以便應用在其中讀取和寫入文件。

瞭解更多,請參考:IIS 部署.Net Core 應用

目前我們採用的方式就是iis進行部署。

部署為 Windows Service

通過 Windows Service的部署方式,我們能夠解決上面控制台直接運行部署的開機啟動和持久運行問題,也能避開 iis部署 中的性能損失問題。具體如何做呢?如下提供一種方式(當然,也可以用其他方式來部署 Windows Service):

  1. 藉助 nssm 來管理 Windows Service,Nssm,用法,請參考:https://nssm.cc/usage

  2. 配置 Service 開機啟動。

  3. 安裝nssm,然後切換到nssm的安裝路徑,打開控制台

  4. 運行如下的命令:nssm install <servicename> 從而打開nssm的安裝界面如下圖所示:

    img

  5. 就幾個選項,很簡單,大家安裝英文意思進行配置即可。

優勢:

  1. 高性能部署,穩定性好。
  2. 支持開機啟動。

劣勢:

  1. 僅能用於 Windows 伺服器。
  2. 引入了一個外包依賴 NSSM。

Linux 部署

由於 .Net Core 天生支持跨平臺,如果在廉價又穩定的 Linux 上部署 .Net Core 程式逐漸成為主流。對於 Linux 上的部署,和 Windows 上並沒有什麼區別。首先是安裝 Runtime 環境,然後拷貝程式,並通過命令行運行。

再進一步,可以使用後臺模式,讓程式在後臺運行。

更進一步,也可以效仿 Windows,把程式啟動管理作為一個服務,來達到開機啟動和靈活管理的目的。

Docker 部署

作為當前個人認為的最棒的 .Net Core 應用部署方式,建議大家都瞭解下。目前我們正在嘗試進行Docker化,然後用K8S來進行管理。

首先,是 Docker 的基本使用:

  1. 編寫 Dockerfile
  2. 使用 docker build 構建鏡像
  3. 使用 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 來說,一般有如下幾類基礎鏡像:

  • sdk -- 相信這個都比較容易理解,就是包含了 .Net Core SDK。
  • runtime -- 這個也相對容易理解,包含了.Net Core Runtime。
  • runtime-deps --這個就不是很好理解, runtime? deps? 什麼意思呢?就是說,這個連 Runtime都不是全的,需要你在打包的時候,選擇自寄宿模式,把Runtime也打進去。
    綜上,我個人推薦大家選擇 runtime 這類作為基礎鏡像。

總結

今天給大家介紹了asp.net core的幾種部署方式希望對大家有所幫助,當然部分內容我沒有寫的很詳細,是想留給大家以思考,動手嘗試下!感謝大家的閱讀!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前段時間用由於項目需要日誌入庫,由於AspNetCore下麵的Log4Net不支持入庫操作, 只能自己寫了個插件用來日誌入庫具體代碼如下: 本插件主要用到2個類,LogModel 類 >資料庫表裡的映射,LogDAL類用來將對象入庫操作。 具體調用方式如下 此日誌插件可根據不同需要進行改造,只要調整 ...
  • 1, 新建一個空的AspNetCore項目,預設Program下的代碼如下: 1 public static void Main(string[] args) 2 3 { 4 5 BuildWebHost(args).Run(); 6 7 } 8 9 10 11 public static IWeb ...
  • IL指令介紹 IL是.NET框架中中間語言(Intermediate Language)的縮寫。 使用.NET框架提供的編譯器可以直接將源程式編譯為.exe或.dll文件,但此時編譯出來的程式代碼並不是CPU能直接執行的機器代碼,而是一種中間語言IL(Intermediate Language)的代 ...
  • RoadFlow擁有基於RBAC設計的通用許可權管理框架。不僅可以基於角色組進行菜單授權,還可以根據組織架構中部門、崗位、人員等進行細分的許可權管理分配。 如果一個人有重覆菜單許可權,則將自動合併。 系統資源管理,即將系統中的功能模塊統一集中分類管理,進行菜單設置時從應用程式庫中讀取系統功能來配置菜單。 ...
  • 一.概述 在上篇中使用EF基於數據模型創建資料庫, 本篇繼續使用 EF 基於資料庫創建數據模型。 實現對已有資料庫進行反向工程,來構建數據訪問的 ASP.NET Core MVC 應用程式。已有資料庫使用上篇的EFGetStarted.AspNetCore.NewDb庫。這裡還是使用Visual S ...
  • 需要中 高級職稱、大專證、本科證、英語證、學位證的抓緊來報名了,上半年馬上截止。國家認可,全網可查。全程操作、無需耗費個人時間。 不上課,不考試。有需要的可以聯繫我。 ...
  • 轉載自如下鏈接: https://www.cnblogs.com/xpvincent/p/9334851.html 字體實在是太小了,我看著好鬧心,就複製過來自己放大下,謝謝。 標準控制項1 btn Button2 chk CheckBox3 ckl CheckedListBox4 cmb Combo ...
  • Why?為什麼使用反射 MVC ORM EF 都是用的反射。反射可以讓程式的擴展性,靈活性得到加強。一起即可動態創建 what 反射原理 動態載入類庫 ,先添加引用類庫,或者複製debug裡面的文件dll到運行文件Debug Assembly assembly = Assembly.Load("We ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...