ASP.NET Core 應用發佈與部署指南

1、前言

本篇主要包含哪些內容?
  1. 將項目發佈到本地目錄
  2. 將項目傳輸到服務器並配置啓動&開機自動啓動
  3. 將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://*:5000html

public class Program { 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:5000http://127.0.0.1:5000http://所在機器ip:5000,方便咱們部署到Linux Server後進行測試nginx

  • CentOS 7 部署環境

CentOS 7虛擬機安裝:https://ken.io/note/hyper-v-course-setup-centosweb

  1. 部署FTP服務:https://ken.io/note/centos-quickstart-ftpserver
  2. 部署 .NET Core SDK 2.1:https://ken.io/note/centos7-.netcore2.1-setup
  3. 部署Nginx:https://ken.io/note/centos-quickstart-nginx-setup

2、發佈到本地

一、命令行發佈

在cmd命令行操做centos

#進入項目根目錄(HelloWeb.csproj所在目錄) d: && cd D:\Projects\Test\HelloWeb\HelloWeb #執行publish命令 dotnet publish -c release #dotnet publish -h能夠查看publish可選參數 #-c release 表示以Release方式進行編譯 
二、Visual Studio圖形界面操做
  • 在項目的鼠標右鍵菜單中選擇:發佈

image

  • 在左側選擇文件夾,並建立配置

image

  • 在發佈操做面板中選擇發佈便可

image

三、本地運行測試

發佈完成後,能夠在D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish查看發佈後的文件輸出。瀏覽器

在cmd命令行操做:bash

#進入發佈輸出目錄 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,驗證是否正常服務器

3、部署

一、環境配置&啓動測試

經過XShell鏈接到CentOS7服務器進行操做app

  • 建立站點目錄並受權
#建立站點根目錄 sudo mkdir -p /webroot/helloweb #建立站點應用目錄 sudo mkdir -p /webroot/helloweb/app #建立站點日誌目錄 sudo mkdir -p /webroot/helloweb/logs #目錄受權 sudo chmod 777 /webroot/helloweb/app sudo chmod 777 /webroot/helloweb/logs 
  • 開放端口
#添加可訪問端口 sudo firewall-cmd --add-port=5000/tcp --permanent #從新加載防火牆策略 sudo firewall-cmd --reload 
  • 啓動應用

經過FTP將傳輸到/webroot/helloweb/appasp.net

經過命令啓動:dom

#進入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目錄下的靜態文件

二、配置啓動腳本

顯示啓動的方式,若是關閉XShell的鏈接窗口,那這個應用的進行就被關掉了。因此能夠用nohup命令啓動,腳本示例:

nohup dotnet HelloWeb.dll &

nohup因爲是隱私啓動,那應用的關閉就要找到進程id後才能關閉,因此仍是乾脆配置啓動、中止腳原本操做更方便一些

  • 建立啓動腳本

建立start.sh文件

sudo vi /webroot/helloweb/start.sh

腳本內容:

#!/bin/sh cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dll echo "start begin..." echo $APP_NAME cd app nohup dotnet $APP_NAME >>../logs/info.log 2>>../logs/error.log & cd .. sleep 5 if test $(pgrep -f $APP_NAME|wc -l) -eq 0 then echo "start failed" else echo "start successed" fi 
  • 建立中止腳本

建立stop.sh文件

sudo vi /webroot/helloweb/stop.sh

腳本內容:

#!/bin/sh cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dll PROCESS=`ps -ef|grep $APP_NAME|grep -v grep |awk '{ print $2}'` while : do kill -9 $PROCESS > /dev/null 2>&1 if [ $? -ne 0 ];then break else continue fi done echo 'stop success!' 
  • 腳本測試
#啓動應用 sh /webroot/helloweb/start.sh #啓動成功輸出 start begin... HelloWeb.dll start successed #中止應用 sh /webroot/helloweb/stop.sh #中止成功後輸出 stop success! 

開機啓動&反向代理配置

一、配置開機啓動
  • 將中止腳本標記爲可執行文件
sudo chmod +x /webroot/helloweb/stop.sh
  • 建立helloweb服務
#建立服務文件 sudo vi /usr/lib/systemd/system/helloweb.service #文件內容 [Unit] Description=helloweb After=network.target [Service] WorkingDirectory=/webroot/helloweb/app ExecStart=/usr/bin/dotnet /webroot/helloweb/app/HelloWeb.dll ExecStop=/webroot/helloweb/stop.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target 

若是你配置了多個版本的.NET Core環境,記得把/usr/bin/dotnet換成對應的路徑

  • 設置服務開機啓動&開啓服務
#設置服務開機啓動 sudo systemctl enable helloweb #啓動服務 sudo systemctl start helloweb 
二、Nginx反向代理配置
  • 建立helloweb站點配置
#新建配置文件 sudo vi /etc/nginx/conf.d/helloweb.conf #反向代理配置內容 server { listen 80; #監聽80端口 server_name helloweb.mydomain.com; #綁定的域名 location / { #轉發或處理 proxy_pass http://localhost:5000; } error_page 500 502 503 504 /50x.html;#錯誤頁 location = /50x.html { root /usr/share/nginx/html; } } 
  • 重載NGINX配置
sudo nginx -s reload
  • 開放防火牆端口
#添加可訪問端口 sudo firewall-cmd --add-port=80/tcp --permanent #從新加載防火牆策略 sudo firewall-cmd --reload 
  • 訪問測試:

經過設置本地hosts將helloweb.mydomain.com指向服務器IP

而後經過瀏覽器訪問: helloweb.mydomain.com 便可

 

以上,若有疑問,歡迎聯繫我:https://ken.io/home/about

相關文章
相關標籤/搜索