Asp.Net Core 釋出和部署( MacOS + Linux + Nginx )
前言
在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對 Asp.Net Core 的程式進行釋出和部署。
目錄
- 新建一個 WebApp 專案
- 釋出到 Linux,Mac OS
- 使用 Nginx 進行反向代理
新建一個 WebApp 專案
在 Asp.Net Core 專案中,我們使用 dotnet new -t WebApp
命令和建立一個新的空的 Web 應用程式。
以下是我在 Mac 中的截圖:
主要是用以下幾個命令:
mkdir HelloWebApp
這個命令是建立一個名為 HelloWebApp 的資料夾。
dotnet new -t Web
新建了應用程式之後,使用dotnet restore
和 dotnet run
命令來測試一下我們的應用程式。
可以看到已經成功運行了。
我們開啟瀏覽器輸入 http://localhost:5000,來看一下效果。
ps: Safari 下面,瀏覽器位址列看不到埠號,實際上是5000埠。
釋出到 Linux,Mac OS
如果釋出應用程式,我們需要使用 dotnet publish
命令,通過使用 --help
引數可以看到一些可以使用的命令引數。
-f|--framework <FRAMEWORK> Target framework to compile for -r|--runtime <RUNTIME_IDENTIFIER> Target runtime to publish for -b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary outputs -o|--output <OUTPUT_PATH> Path in which to publish the app --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.json -c|--configuration <CONFIGURATION> Configuration under which to build --native-subdirectory Temporary mechanism to include subdirectories from native assets of dependency packages in output --no-build Do not build projects before publishing
我們直接執行dotnet publish
使用預設的釋出路徑,當看到Published 1/1 projects successfully
的時候,說明已經發布成功了。 接著進入到 bin 資料夾下的Debug 資料夾下的netcoreapp1.0 資料夾,然後會看到有一個 publish 的資料夾。這就是預設釋出生成的資料夾,在這個資料夾中可以看到我們程式所有依賴的程式集檔案。
釋出之後 publish 資料夾裡面的子資料夾有必要說明一下。
appsettiong.json 應用程式的配置檔案 refs 應用程式引用的.net fx系統程式集 runtimes 執行時環境,可以看到裡面的資料夾包含 win7、linxu,mac os 等,說明我們這個應用程式是跨平臺的。 views 這個資料夾存放的就是我們的 mvc 的檢視檔案。 wwwroot 資料夾,存放的是前端使用的 js 庫,css 樣式表,和圖片等。
然後我們把工作目錄切換到釋出的 publish 資料夾。使用dotnet HelloWebApp.dll
測試釋出過後的程式是否執行正常。
使用 Nginx 進行反向代理
- Mac OS
- Linux(Ubuntu)
- 注意事項
反向代理,即把我們應用程式的一部分路徑交給 Nginx 去處理,比如靜態檔案,圖片等。另外一部分動態的交給 Kestrel 來處理。這樣可以降低我們的後端 Kestrel 的壓力,以及可以在 Nginx 配置負載均衡等。
還有一個很重要的優勢就是 Web 中的快取,會在代理伺服器這一步來處理。大家看下面這個圖:
至於怎麼樣新增代理伺服器可以識別到的快取,可以關注我後面發表的部落格文章。
Mac OS
1、 在 mac 中開啟命令列,輸入 brew install nginx
首先安裝 nginx。
2、 安裝完成之後,輸入 nginx -v
檢視是否安裝成功。顯示nginx version: nginx/1.10.1
表示安裝已經成功。
3、配置 nginx 代理。
安裝完 nginx 之後,預設的配置檔案路徑在 /usr/local/etc/nginx
資料夾中。在這個資料夾中找到nginx.conf 配置檔案,使用 Visual Studio Code 開啟,在 Server
節點中,找到監聽 80埠的location 節點,修改配置為如下:
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
儲存並退出。 然後使用sudo nginx -s reload
命令來重新載入配置。
然後我們開啟瀏覽器 輸入http://localhost,發現此時已經通過 nginx 來訪問我們的站點了。
ps: Safari 下面,瀏覽器位址列看不到埠號,實際上是80埠。
Linux(Ubuntu)
首先在Ubuntu 中新建一個資料夾,把我們釋出的 publish 資料夾拷貝到 Liunx 中。然後測試一下是否可以正常執行。
1、 在 linux(Ubuntu) 中新開一個命令列視窗,輸入 apt-get install nginx
首先安裝 nginx。
2、 安裝完成之後,輸入 nginx -v
檢視是否安裝成功。顯示nginx version: nginx/1.4.6
表示安裝已經成功。
[email protected]:~$ sudo nginx -v
nginx version: nginx/1.4.6 (Ubuntu)
測試 nginx 是否執行成功,開啟瀏覽器,輸入 http://localhost 檢視是否顯示如下介面。
3、配置 nginx 代理。
安裝完 nginx 之後,預設的配置檔案路徑在 /etc/nginx/sites-available/default
檔案中。切換工作目錄到/etc/nginx/sites-available/
,使用sudo gedit default
命令開啟 default 檔案。 在 Server
節點中,找到監聽 80埠的location 節點,修改內容為如下:
server {
listen 80;
#root /usr/share/nginx/html;
#index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
儲存並退出。 然後使用sudo nginx -s reload
命令來重新載入配置。
然後我們開啟瀏覽器 輸入http://localhost,發現此時已經通過 nginx 來訪問我們的站點了。
注意事項
1、在使用 nginx 代理訪問站點的時候, 保持命令dotnet run HelloWebApp.dll
的命令列視窗必須開啟。
2、可以使用下面的命令來讓一個命令列執行在後臺程序中。
nohup dotnet HelloWebApp.dll &
這個時候你就可以把命令列視窗關掉了。
下一篇將講解如何在 Linux 中使用 Docker 進行部署,以及如何脫離命令列宿主給我們的dotnet程式建立一個守護程序,及宕機失敗自動重啟等等。。。 請持續關注。
如果你覺得本文對你有幫助,不妨點個【推薦】。
本文地址:http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html
作者部落格:Savorboard
歡迎轉載,請保留出處
相關推薦
Asp.Net Core 釋出和部署( MacOS + Linux + Nginx )
前言 在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對 Asp.Net Core 的程式進行釋出和部署。 目錄 新建一個 WebApp 專案 釋出到 Linux,Mac OS 使用 Nginx 進行反向代理 新建一個 WebApp 專案 在 Asp
Asp.Net Core 釋出和部署(Linux + Jexus )
前言 在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在 asp.net core 中對我們的已經完成的程式進行釋出和部署。 目錄 安裝 Liunx DotNet 環境 新建一個 Web 專案,併發布 使用 Jexus 進行反向代理 安裝 Linux DotNet
Asp.Net Core 發布和部署( MacOS + Linux + Nginx )
compile 4.6 保持 發布 define should core otn span 在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對 Asp.Net Core 的程序進行發布和部署。 有關如何在 Jexus
翻譯 - ASP.NET Core 託管和部署 - 在 Linux 上使用 Nginx 託管 ASP.NET Core 網站
翻譯自 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0 本文介紹了在 Ubuntu 16.04 伺服器上設定生產環境可用的 ASP.NET Core 環境。這裡的
【ASP.NET Core快速入門】(三)準備CentOS和Nginx環境
正常 b- 進入 運行 ins 輸入 最小 我們 -128 基本軟件 VMware虛擬機 centos:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso
【ASP.NET Core快速入門】(四)在CentOS上安裝.NET Core運行時、部署到CentOS
ati libunwind serve code api cal 之前 prompt conn 下載.NET Core SDK 下載地址:https://www.microsoft.com/net/download/windows 第一步:Add the dotne
將ASP.NET Core應用程序部署至生產環境中(CentOS7)
for linux home web 虛擬 direct director block bic 閱讀目錄 環境說明 準備你的ASP.NET Core應用程序 安裝CentOS7 安裝.NET Core SDK for CentOS7。 部署ASP.NET
用ASP.NET Core MVC 和 EF Core 構建Web應用 (二)
work nal nta 多個 包括 catch web 應用 自動 選項卡 本節學習如何執行基本的 CRUD (創建、 讀取、 更新、 刪除) 操作。 自定義“詳細信息”頁 學生索引頁的基架代碼省略了 Enrollments 屬性,因為該屬性包含一個集合。 在“詳細信息”
用ASP.NET Core MVC 和 EF Core 構建Web應用 (九)
fix pro school time lap namespace 繼承映射 數據庫表 eas 在上一節中,已經處理了並發異常。 本節將演示如何在數據模型中實現繼承。 在面向對象的編程中,可以使用繼承以便於重用代碼。 在本教程中,將更改 Instructor和 Studen
用ASP.NET Core MVC 和 EF Core 構建Web應用 (十)
pan 信息 expr dispose writing AS das ech 任務欄 之前的學習中,已經以每個類一張表的方式實現了繼承。 本節將會介紹在掌握開發基礎 ASP.NET Core web 應用程序之後使用 Entity Framework Core 開發時需要註
【ASP.NET Core快速入門】(二)部署到IIS
圖片 cor .com servers 訪問 publish img 控制臺 -m 原文:【ASP.NET Core快速入門】(二)部署到IIS配置IIS模塊 ASP.NET Core Module載地址:https://docs.microsoft.com/en-us/
ASP.NET Core MVC 和 Visual Studio入門(五) 使用 SQL Server LocalDB
ASP.NET Core MVC 和 Visual Studio入門(五) 使用 SQL Server LocalDB Rick Anderson MvcMovieContext物件操縱連線到資料庫並對映電影物件到資料庫記
ASP.NET Core MVC 和 Visual Studio入門(四)新增模型
ASP.NET Core MVC 和 Visual Studio入門(四)新增模型 Rick Anderson 和Tom Dykstra 在要節中將新增一些在資料庫中管理電影的類,這些類將成為MVC應用的“Model(模型)”部分。 這些類將與Enti
ASP.NET Core MVC 和 Visual Studio入門(三) 新增檢視
ASP.NET Core MVC 和 Visual Studio入門(三) 新增檢視 本節將修改HelloWorldController類,從而使用Razor檢視模板來乾淨利索地封裝產生一個HTML迴應給客戶端的過程。 我們將使用Razor建立一個檢視模板,基於
當asp.net core偶遇docker一(模型驗證和Rabbitmq 一)
比如我們有一些設計,依賴於某些軟體,比如rabbitmq 當管理員功能,反覆錯誤三五次之後,就傳送一條訊息到佇列裡去,我們又不希望對原先設計帶來侵入式的改變業務 這個時候,我們就可以在模型驗證裡面加入一條衝向rabbitmq的程式碼了 既然是docker,還是先說說如何部署一個docke
當asp.net core偶遇docker一(模型驗證和Rabbitmq 二)
上一篇我們說到構建了一個Rabbitmq容器 現在我們說說如何在一個悄悄傳輸訊息到佇列 我們現在設計一個Rabbitmq傳送訊息部分的模組 先設計一個遠端傳送的介面 public interface IRemoteSend { void Send<TEnti
當asp.net core偶遇docker一(模型驗證和Rabbitmq 三)
繼續上一篇 上一篇,從core方式實現了一個Rabbitmq傳送佇列訊息的介面,我們現在需要在模型驗證裡面加入驗證失敗就傳送訊息的部分 [AttributeUsage(AttributeTargets.Class)] public class ValidateBaseAttri
ASP.NET Core MVC 和 Entity Framework Core 連線mysql (二)
EF Core 開啟negut管理器 安裝如下的包 新增Models類 新增Students using System; using System.Collections.Generic; using System.Linq; using System
ASP.NET Core MVC 和 Entity Framework Core 連線mysql(一)
看到官網上的教程可操作性不強,而且資料庫是sql server所以這裡另寫一點記錄不同,寫成一文章提交超時。所以分開 新建工程 確保安裝了Visual Studio 2017 和.net core 2.0 或以上 新建一個專案 專案名稱為ContosoUnivers
ASP.NET Core MVC 和 Visual Studio入門(三) 新增檢視
ASP.NET Core MVC 和 Visual Studio入門(三) 新增檢視 本節將修改HelloWorldController類,從而使用Razor檢視模板來乾淨利索地封裝產生一個HTML迴應給客戶端的過程。 我們將使用Razor建立一個檢視模板,基於Raz