Asp.Net Core 發佈和部署( MacOS + Linux + Nginx )

 

前言css

在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對 Asp.Net Core 的程序進行發佈和部署。html

目錄
前端

  • 新建一個 WebApp 項目
  • 發佈到 Linux,Mac OS
  • 使用 Nginx 進行反向代理

新建一個 WebApp 項目linux

在 Asp.Net Core 項目中,咱們使用 dotnet new -t WebApp 命令和建立一個新的空的 Web 應用程序。nginx

如下是我在 Mac 中的截圖:macos

主要是用如下幾個命令:json

mkdir HelloWebApp 這個命令是建立一個名爲 HelloWebApp 的文件夾。ubuntu

dotnet new -t Web 這個命令是使用 Web 模板來新建一個 WebApp 的 Mvc 應用程序。後端

新建了應用程序以後,使用dotnet restore 和 dotnet run 命令來測試一下咱們的應用程序。瀏覽器

能夠看到已經成功運行了。

咱們打開瀏覽器輸入 http://localhost:5000,來看一下效果。

ps: Safari 下面,瀏覽器地址欄看不到端口號,其實是5000端口。

發佈到 Linux,Mac OS

若是發佈應用程序,咱們須要使用 dotnet publish命令,經過使用 --help 參數能夠看到一些可使用的命令參數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-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 運行時環境,能夠看到裏面的文件夾包含 win七、linxu,mac os 等,說明咱們這個應用程序是跨平臺的。
  • views 這個文件夾存放的就是咱們的 mvc 的視圖文件。
  • wwwroot 文件夾,存放的是前端使用的 js 庫,css 樣式表,和圖片等。

而後咱們把工做目錄切換到發佈的 publish 文件夾。使用dotnet HelloWebApp.dll測試發佈事後的程序是否運行正常。

使用 Nginx 進行反向代理

  1. Mac OS
  2. Linux(Ubuntu)
  3. 注意事項

反向代理,即把咱們應用程序的一部分路徑交給 Nginx 去處理,好比靜態文件,圖片等。另一部分動態的交給 Kestrel 來處理。這樣能夠下降咱們的後端 Kestrel 的壓力,以及能夠在 Nginx 配置負載均衡等。

還有一個很重要的優點就是 Web 中的緩存,會在代理服務器這一步來處理。你們看下面這個圖:

至於怎麼樣添加代理服務器能夠識別到的緩存,能夠關注我後面發表的博客文章。

Mac OS

安裝 dotnet 環境參見官方網站 https://www.microsoft.com/net/core#macos

一、 在 mac 中打開命令行,輸入 brew install nginx 首先安裝 nginx。

二、 安裝完成以後,輸入 nginx -v查看是否安裝成功。顯示nginx version: nginx/1.10.1表示安裝已經成功。

三、配置 nginx 代理。

安裝完 nginx 以後,默認的配置文件路徑在 /usr/local/etc/nginx 文件夾中。在這個文件夾中找到nginx.conf 配置文件,使用 Visual Studio Code 打開,在 Server 節點中,找到監聽 80端口的location 節點,修改配置爲以下:

?
1
2
3
4
5
6
7
8
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)

安裝 dotnet 環境參見官方網站 https://www.microsoft.com/net/core#ubuntu

首先在Ubuntu 中新建一個文件夾,把咱們發佈的 publish 文件夾拷貝到 Liunx 中。而後測試一下是否能夠正常運行。

一、 在 linux(Ubuntu) 中新開一個命令行窗口,輸入 apt-get install nginx 首先安裝 nginx。

二、 安裝完成以後,輸入 nginx -v查看是否安裝成功。顯示nginx version: nginx/1.4.6表示安裝已經成功。

?
1
2
yxd@ubuntu:~$ sudo nginx - v
nginx version: nginx /1 .4.6 (Ubuntu)

測試 nginx 是否運行成功,打開瀏覽器,輸入 http://localhost 查看是否顯示以下界面。

三、配置 nginx 代理。

安裝完 nginx 以後,默認的配置文件路徑在 /etc/nginx/sites-available/default 文件中。切換工做目錄到/etc/nginx/sites-available/,使用sudo gedit default命令打開 default 文件。 在 Server 節點中,找到監聽 80端口的location 節點,修改內容爲以下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 來訪問咱們的站點了。

注意事項

一、在使用 nginx 代理訪問站點的時候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必須開啓。

二、可使用下面的命令來讓一個命令行運行在後臺進程中。

1
nohup dotnet HelloWebApp.dll &

這個時候你就能夠把命令行窗口關掉了。

以上就是本文的所有內容,但願對你們的學習有所幫助,也但願你們多多支持腳本之家。

原文連接:http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html

相關文章
相關標籤/搜索