ASP.NET Core 应用发布与部署指南
一、前言
本篇主要包含哪些內容?
將項目發布到本地目錄
將項目傳輸到服務器并配置啟動&開機自動啟動
將Nginx作為訪問入口,配置反向代理
本篇環境信息
- 開發環境: 
| 操作系統 | Windows 10 | 
| 開發工具 | Visual Studio 2017(15.7.5) | 
| SDK | .NET Core SDK 2.1 | 
| 傳輸工具 | FlashFxp | 
- 部署環境 
| Linux Server | CentOS 7 | 
| SDK | .NET Core SDK 2.1 | 
| 傳輸工具 | Vsftp | 
| 反向代理 | Nginx 1.12.2 | 
準備工作
- ASP.NET Core 示例項目 
| SDK | .NET Core SDK 2.1 | 
| 項目模板 | ASP.NET Core Web App(MVC) | 
| 項目名稱 | HelloWeb | 
| 解決方案名稱 | HelloWeb | 
| 解決方案根目錄 | D:\Projects\Test\HelloWeb | 
項目創建完成后,需要修改Program.cs文件
手動指定啟動的Url為:http://*:5000
?? ?public static void Main(string[] args) ? ?
? ? ?? ?{CreateWebHostBuilder(args).Build().Run();} ? ?
?? ?
?? ?public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseUrls("http://*:5000");}
http://*:5000?可以兼容?http://localhost:5000,http://127.0.0.1:5000,http://所在機器ip:5000,方便我們部署到Linux Server后進行測試
- CentOS 7 部署環境 
CentOS 7虛擬機安裝:https://ken.io/note/hyper-v-course-setup-centos
部署FTP服務:https://ken.io/note/centos-quickstart-ftpserver
部署 .NET Core SDK 2.1:https://ken.io/note/centos7-.netcore2.1-setup
部署Nginx:https://ken.io/note/centos-quickstart-nginx-setup
二、發布到本地
1、命令行發布
在cmd命令行操作
#進入項目根目錄(HelloWeb.csproj所在目錄)d: && cd D:\Projects\Test\HelloWeb\HelloWeb#執行publish命令dotnet publish -c release#dotnet publish -h可以查看publish可選參數#-c release 表示以Release方式進行編譯2、Visual Studio圖形界面操作
- 在項目的鼠標右鍵菜單中選擇:發布 
- 在左側選擇文件夾,并創建配置 
- 在發布操作面板中選擇發布即可 
3、本地運行測試
發布完成后,可以在D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish查看發布后的文件輸出。
在cmd命令行操作:
#進入發布輸出目錄d: && cd D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish#啟動應用dotnet HelloWeb.dll#啟動成功會輸出以下信息Hosting environment: Production Content root path: D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish Now listening on: http://[::]:5000 Application started. Press Ctrl+C to shut down.通過瀏覽器訪問:localhost:5000,驗證是否正常
三、部署
1、環境配置&啟動測試
通過XShell連接到CentOS7服務器進行操作
- 創建站點目錄并授權 
- 開放端口 
- 啟動應用 
通過FTP將傳輸到/webroot/helloweb/app
通過命令啟動:
#進入app目錄并通過dotnet命令啟動站點cd /webroot/helloweb/app/ dotnet HelloWeb.dll#啟動成功后,將會輸出:Hosting environment: Production Content root path: /webroot Now listening on: http://[::]:5000 Application started. Press Ctrl+C to shut down.這時候通過瀏覽器訪問?http://{centos-ip}:5000即可
如果網站樣式沒有被正常加載,那應該是訪問wwwroot下面的靜態文件時404了。
這是因為 ASP.NET Core默認是以命令執行所在的目錄作為應用根目錄讀取文件的
所以,一定要在HelloWeb.dll所在目錄執行dotnet命令,不然會讀取不到wwwroot目錄下的靜態文件
2、配置啟動腳本
顯示啟動的方式,如果關閉XShell的連接窗口,那這個應用的進行就被關掉了。所以可以用nohup命令啟動,腳本示例:
nohup dotnet HelloWeb.dll &nohup由于是隱私啟動,那應用的關閉就要找到進程id后才能關閉,所以還是干脆配置啟動、停止腳本來操作更方便一些
- 創建啟動腳本 
創建start.sh文件
sudo vi /webroot/helloweb/start.sh腳本內容:
cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dllecho "start begin..."echo $APP_NAMEcd app nohup ?dotnet $APP_NAME >>../logs/info.log 2>>../logs/error.log &cd ..sleep 5if test $(pgrep -f $APP_NAME|wc -l) -eq 0thenecho "start failed"elseecho "start successed"fi- 創建停止腳本 
創建stop.sh文件
sudo vi /webroot/helloweb/stop.sh腳本內容:
cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dllPROCESS=`ps -ef|grep $APP_NAME|grep -v grep ?|awk '{ print $2}'`while :dokill -9 $PROCESS > /dev/null 2>&1 ?if [ $? -ne 0 ];thenbreakelsecontinuefidoneecho 'stop success!'- 腳本測試 
開機啟動&反向代理配置
1、配置開機啟動
- 將停止腳本標記為可執行文件 
- 創建helloweb服務 
如果你配置了多個版本的.NET Core環境,記得把/usr/bin/dotnet換成對應的路徑
- 設置服務開機啟動&開啟服務 
2、Nginx反向代理配置
- 創建helloweb站點配置 
- 重載NGINX配置 
- 開放防火墻端口 
- 訪問測試: 
通過設置本地hosts將helloweb.mydomain.com指向服務器IP
然后通過瀏覽器訪問:?helloweb.mydomain.com?即可
原文地址:https://ken.io/note/asp.net-core-publish-deploy-guide
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com 
總結
以上是生活随笔為你收集整理的ASP.NET Core 应用发布与部署指南的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ASP.NET Core Web API
- 下一篇: MongoDB发布4.0版本,支持ACI
