1. 程式人生 > >Asp.Net Core 釋出和部署( MacOS + Linux + Nginx )

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 中的截圖:
image

主要是用以下幾個命令:

mkdir HelloWebApp 這個命令是建立一個名為 HelloWebApp 的資料夾。

dotnet new -t Web

這個命令是使用 Web 模板來新建一個 WebApp 的 Mvc 應用程式。

新建了應用程式之後,使用dotnet restoredotnet run 命令來測試一下我們的應用程式。
image
可以看到已經成功運行了。
我們開啟瀏覽器輸入 http://localhost:5000,來看一下效果。

ps: Safari 下面,瀏覽器位址列看不到埠號,實際上是5000埠。
image

釋出到 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 中的快取,會在代理伺服器這一步來處理。大家看下面這個圖:

image

至於怎麼樣新增代理伺服器可以識別到的快取,可以關注我後面發表的部落格文章。

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埠。
image

Linux(Ubuntu)

首先在Ubuntu 中新建一個資料夾,把我們釋出的 publish 資料夾拷貝到 Liunx 中。然後測試一下是否可以正常執行。
image

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 檢視是否顯示如下介面。
image

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 來訪問我們的站點了。
image

注意事項

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快速入門】準備CentOSNginx環境

正常 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