1、前言
本篇主要包含哪些內容?
- 將項目發佈到本地目錄
- 將項目傳輸到服務器並配置啓動&開機自動啓動
- 將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:5000
,http://127.0.0.1:5000
,http://所在機器ip:5000
,方便咱們部署到Linux Server後進行測試nginx
- CentOS 7 部署環境
CentOS 7虛擬機安裝:https://ken.io/note/hyper-v-course-setup-centosweb
- 部署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
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圖形界面操做
- 在項目的鼠標右鍵菜單中選擇:發佈
- 在左側選擇文件夾,並建立配置
- 在發佈操做面板中選擇發佈便可
三、本地運行測試
發佈完成後,能夠在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服務器進行操做markdown
- 建立站點目錄並受權
#建立站點根目錄 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/appapp
經過命令啓動:asp.net
#進入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
- 本文首次發佈:2018-07-22
- 本文原文連接:https://ken.io/note/asp.net-core-publish-deploy-guide