無論你是剛接觸.NET Core的新手還是已有經驗的開發者,在這篇文章中你將會學習到一系列實用的發布技巧與最佳實踐,幫助你高效順利地將.NET Core后端應用部署到生產環境中
目錄
程序發布操作
Docker容器注冊表
文件夾發布
導入配置文件
網站運行操作
程序發布操作
????????當我們想對我們已經寫好的后端項目發布到網站的時候,可以直接將項目文件目錄中的bin/Debug部署到生產環境的服務器上,但是缺點也很明顯需要發布網站提前安裝好.net運行時環境并且性能方面也是比較差的,我們創建的做法就是采用自帶的發布功能進行操作,以下是對程序進行發布操作的基本流程:
右鍵我們的項目,點擊發布按鈕,然后進入到下面的界面,讓我們選擇用什么樣的方式進行發布,如下可以看到.net core給我們提供的方式也是挺多的,每種發布方式注意的點也很多,接下來就著重對某些發布的操作進行講解吧!
如果真的需要在服務器上面安裝配置.net運行時環境,則需要訪問?官網?根據需要安裝對應的.net的sdk環境,如下所示:
下載完成之后,我們將其安裝到服務器當中,然后把要發布到服務器的后端發布文件復制到服務器中然后運行即可,接下來我們介紹一下上面發布時的幾種部署方式吧!
Docker容器注冊表
Docker:是一種開源的容器化平臺允許開發人員將應用程序及其所有依賴項打包到一個標準化的單元中,稱為“容器”。這個容器可以在任何地方運行,無論是本地開發環境、測試環境還是生產環境,Docker使得開發和部署應用程序變得更加簡單、靈活和可移植,其官網 地址?如下:
在項目中如果我們想使用Docker進行程序發布的話,我們可以右鍵項目然后點擊添加,選擇Docker支持,如下所示:
然后我們接下來開始選擇容器基礎框架的選項操作,如下所示:
1)容器OS:專門為運行容器優化的操作系統,專門為運行容器優化的操作系統
2)容器生成類型:構建容器的方式和方法,選擇合適的構建類型能優化鏡像大小、構建速度和可維護性
3)容器鏡像SKU:容器鏡像的不同配置版本,一個鏡像可以有多個不同的SKU版本這些版本之間可能包含不同的庫、應用或系統設置
4)Docker生成上下文:在構建Docker鏡像時所需要的文件、目錄及其他資源的集合,上下文中通常包含應用代碼、配置文件、依賴文件等
點擊確定之后就會在項目中生成一個Dockerfile文件,我們可以根據需要添加如下內容:
# 使用官方的 .NET Core SDK 鏡像來構建應用
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /app# 復制 csproj 并還原依賴
COPY *.csproj .
RUN dotnet restore# 復制所有文件并構建應用
COPY . .
RUN dotnet publish -c Release -o out# 使用運行時鏡像來運行應用
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app/out .# 設置應用默認端口
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80# 啟動應用
ENTRYPOINT ["dotnet", "webapi-study.dll"]
當然我們也可以在項目根目錄中創建一個.dockerignore 文件以避免將不需要的文件復制到Docker鏡像中,可以添加如下內容:
bin/
obj/
*.sln
*.user
然后我們在項目的根目錄下,使用以下命令構建Docker鏡像,t是指定鏡像名,.是表示當前目錄也就是Dockerfile文件所在的目錄,如果是本地打包直接定位到文件目錄,然后輸入docker build就可以了:
docker build -t auth .
構建完成后,可以通過以下命令運行Docker容器,此命令會將容器的80端口映射到宿主機的5000端口,現在可以通過訪問http://localhost:5000來訪問Web API了:
docker run -d -p 5000:80 --restart=always --name mywebapi mywebapi
在運行應用時,如果需要檢查容器的狀態或停止它,可以通過如下命令進行操作:
# 查看正在運行的容器:
docker ps停止容器:
# docker stop mywebapi_container刪除容器:
# docker rm mywebapi_container
當然如果我們本地安裝了Docker的話,可以通過頁面端進行操作:
文件夾發布
這里我們采用發布文件夾的方式進行部署我們的后端應用,點擊之后進入如下界面,這里提供了本地和線上兩種方式,這里我們就拿本地進行舉例吧,這里我將發布的文件放在bin目錄下,當然你也可以自定義位置,都是可以的:
進入發布界面,這里我們點擊顯示所有配置然后進入到如下的詳細發布界面,其中有四個發布配置
1)配置:選擇發布的環境,這里我們一定要選擇Release開發環境
2)目標框架:可以根據需要選擇要發布的.net框架的版本
3)部署模式:有兩種選擇部署模式,如下:
框架依賴:生成的程序集是不包含.net運行時的,需要服務器上預先單獨再安裝.net運行時
獨立:生成的程序集是包含.net運行時的,不需要服務器上預先單獨再安裝.net運行時
4)目標運行時:當我們部署模式選擇框架依賴的時候,是有一個可移植選項的,意味著我們可以發布到任何環境,只要該環境配置了對應的.net運行時;如果我們部署模式選擇獨立的時候則意味著無需服務器再安裝.net運行時,但是卻沒有了可移植的選擇,只能發布選擇了特定的環境當中,且發布的時間較長
配置完上面四個主要的配置選項之后,接下來還有兩個額外配置,文件發布選項和數據庫:
文件發布選項:
1)生成單個文件:
嘗試把盡可能多的發布文件合并到一個文件,對開發客戶端比較重要一點
2)啟用ReadyToRun編譯:
主要針對啟動性能的優化而對應用運行期間的性能提升影響較小,啟用ReadyToRun編譯會增加發布包的大小,因為它將機器碼直接打包到應用程序中
3)裁剪未使用的代碼:
嘗試把一些用不到的程序集給刪掉,因為發布的程序當中是可能有一些程序集是沒有用到的,但是程序可能會基于安全考慮給我們也拷進發布程序當中了,如果我們對發布程序的包的大小有要求的話,可以選擇勾選
4)在發布前刪除所有現有文件:
在發布前會把之前發布的程序都刪除一遍然后再生成新的文件,避免有一些舊的文件被插入到新的發布版本里面
數據庫:讓發布工具幫助我們生成和EFCore相關的一些遷移腳本,甚至自動幫助我們完成數據庫的遷移,如果我們的代碼涉及到EFCore相關的話,該選項會讓我們連一下數據庫然后它會幫助我們完成數據庫的遷移,不過大部分情況下我們是不需要采用這種方式的。
導入配置文件
如果我們想選擇導入配置文件進行發布的話,需要我們導入一個配置文件到程序當中,這個配置文件一般,如下所示:
該配置文件一般都是當我們創建好web應用之后,點擊保存來保存你的配置文件,通常它會保存在項目文件夾下的Properties/PublishProfiles文件夾中,然后還需要在appsettings.json文件夾下配置對應的命令,在創建web應用的時候都已經給到了,類似下面這種的:
AzureAd: {"Instance":httos://login.microsoftonline.com/""TenantId":“44c24123356","ClientId:"2c6ala51-17324f2b2ee09”,"ClientSecret": "uWm8Q6yOuJ5ii2347ac7","Scope":"api://2c6ala51-170f2b2ee09","AllowWebApiToBeAuthorizedByACL:true
}
網站運行操作
當我們完成了后端程序的發布之后,后面就需要了解并掌握如何對網站進行持續運行操作相關知識的概念了,這一塊說實話我了解的也不是很多,雖然.net core已經內置了Kestrel來來作為獨立的Web服務器來進行使用,也就是我們直接雙擊發布程序的exe文件,但是一般我們也不會讓Kestrel直接面對終端用戶的請求,配置域名、記錄請求日志、url重寫等操作皆是由反向代理服務器進行負責的,這里我們可以了解一下多種部署模式:
1)K8S+容器:推薦但是配置難度較高
2)Linux+Nginx
3)云平臺
4)Windows+IIS
對于網站運行時的安全提醒的話,這邊建議啟用https,如果運維人員需要通過遠程桌面或者SSH連接到服務器,那么一定要再服務器的防火墻上設置只允許運維人員的IP段訪問相關端口,并且需要嚴格區分開發環境和生產環境,不要隨意相信客戶端請求,一定要進行數據校驗。具體的等我后面也學習了解到了運維等相關方面的知識的話,我在繼續講解吧!