詳解Asp.Net Core 發(fā)布和部署( MacOS + Linux + Nginx )
前言
在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對 Asp.Net Core 的程序進(jìn)行發(fā)布和部署。
目錄
- 新建一個 WebApp 項(xiàng)目
- 發(fā)布到 Linux,Mac OS
- 使用 Nginx 進(jìn)行反向代理
新建一個 WebApp 項(xiàng)目
在 Asp.Net Core 項(xiàng)目中,我們使用 dotnet new -t WebApp 命令和創(chuàng)建一個新的空的 Web 應(yīng)用程序。
以下是我在 Mac 中的截圖:
主要是用以下幾個命令:
mkdir HelloWebApp 這個命令是創(chuàng)建一個名為 HelloWebApp 的文件夾。
dotnet new -t Web 這個命令是使用 Web 模板來新建一個 WebApp 的 Mvc 應(yīng)用程序。
新建了應(yīng)用程序之后,使用dotnet restore 和 dotnet run 命令來測試一下我們的應(yīng)用程序。
可以看到已經(jīng)成功運(yùn)行了。
我們打開瀏覽器輸入 http://localhost:5000,來看一下效果。
ps: Safari 下面,瀏覽器地址欄看不到端口號,實(shí)際上是5000端口。
發(fā)布到 Linux,Mac OS
如果發(fā)布應(yīng)用程序,我們需要使用 dotnet publish命令,通過使用 --help 參數(shù)可以看到一些可以使用的命令參數(shù)。
-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
我們直接運(yùn)行dotnet publish 使用默認(rèn)的發(fā)布路徑,當(dāng)看到Published 1/1 projects successfully的時候,說明已經(jīng)發(fā)布成功了。 接著進(jìn)入到 bin 文件夾下的Debug 文件夾下的netcoreapp1.0 文件夾,然后會看到有一個 publish 的文件夾。這就是默認(rèn)發(fā)布生成的文件夾,在這個文件夾中可以看到我們程序所有依賴的程序集文件。
發(fā)布之后 publish 文件夾里面的子文件夾有必要說明一下。
- appsettiong.json 應(yīng)用程序的配置文件
- refs 應(yīng)用程序引用的.net fx系統(tǒng)程序集
- runtimes 運(yùn)行時環(huán)境,可以看到里面的文件夾包含 win7、linxu,mac os 等,說明我們這個應(yīng)用程序是跨平臺的。
- views 這個文件夾存放的就是我們的 mvc 的視圖文件。
- wwwroot 文件夾,存放的是前端使用的 js 庫,css 樣式表,和圖片等。
然后我們把工作目錄切換到發(fā)布的 publish 文件夾。使用dotnet HelloWebApp.dll測試發(fā)布過后的程序是否運(yùn)行正常。
使用 Nginx 進(jìn)行反向代理
- Mac OS
- Linux(Ubuntu)
- 注意事項(xiàng)
反向代理,即把我們應(yīng)用程序的一部分路徑交給 Nginx 去處理,比如靜態(tài)文件,圖片等。另外一部分動態(tài)的交給 Kestrel 來處理。這樣可以降低我們的后端 Kestrel 的壓力,以及可以在 Nginx 配置負(fù)載均衡等。
還有一個很重要的優(yōu)勢就是 Web 中的緩存,會在代理服務(wù)器這一步來處理。大家看下面這個圖:
至于怎么樣添加代理服務(wù)器可以識別到的緩存,可以關(guān)注我后面發(fā)表的博客文章。
Mac OS
安裝 dotnet 環(huán)境參見官方網(wǎng)站 https://www.microsoft.com/net/core#macos。
1、 在 mac 中打開命令行,輸入 brew install nginx 首先安裝 nginx。
2、 安裝完成之后,輸入 nginx -v查看是否安裝成功。顯示nginx version: nginx/1.10.1表示安裝已經(jīng)成功。
3、配置 nginx 代理。
安裝完 nginx 之后,默認(rèn)的配置文件路徑在 /usr/local/etc/nginx 文件夾中。在這個文件夾中找到nginx.conf 配置文件,使用 Visual Studio Code 打開,在 Server 節(jié)點(diǎn)中,找到監(jiān)聽 80端口的location 節(jié)點(diǎn),修改配置為如下:
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,發(fā)現(xiàn)此時已經(jīng)通過 nginx 來訪問我們的站點(diǎn)了。
ps: Safari 下面,瀏覽器地址欄看不到端口號,實(shí)際上是80端口。
Linux(Ubuntu)
安裝 dotnet 環(huán)境參見官方網(wǎng)站 https://www.microsoft.com/net/core#ubuntu。
首先在Ubuntu 中新建一個文件夾,把我們發(fā)布的 publish 文件夾拷貝到 Liunx 中。然后測試一下是否可以正常運(yùn)行。
1、 在 linux(Ubuntu) 中新開一個命令行窗口,輸入 apt-get install nginx 首先安裝 nginx。
2、 安裝完成之后,輸入 nginx -v查看是否安裝成功。顯示nginx version: nginx/1.4.6表示安裝已經(jīng)成功。
yxd@ubuntu:~$ sudo nginx -v nginx version: nginx/1.4.6 (Ubuntu)
測試 nginx 是否運(yùn)行成功,打開瀏覽器,輸入 http://localhost 查看是否顯示如下界面。
3、配置 nginx 代理。
安裝完 nginx 之后,默認(rèn)的配置文件路徑在 /etc/nginx/sites-available/default 文件中。切換工作目錄到/etc/nginx/sites-available/,使用sudo gedit default命令打開 default 文件。 在 Server 節(jié)點(diǎn)中,找到監(jiān)聽 80端口的location 節(jié)點(diǎn),修改內(nèi)容為如下:
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,發(fā)現(xiàn)此時已經(jīng)通過 nginx 來訪問我們的站點(diǎn)了。
注意事項(xiàng)
1、在使用 nginx 代理訪問站點(diǎn)的時候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必須開啟。
2、可以使用下面的命令來讓一個命令行運(yùn)行在后臺進(jìn)程中。
nohup dotnet HelloWebApp.dll &
這個時候你就可以把命令行窗口關(guān)掉了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Mac環(huán)境Nginx配置和訪問本地靜態(tài)資源的實(shí)現(xiàn)
- Nginx在MAC上的安裝、啟動、重啟和關(guān)閉
- Mac中使用Nginx實(shí)現(xiàn)80端口轉(zhuǎn)發(fā)8080端口
- Mac下Nginx安裝環(huán)境配置詳解
- 在Mac OS上編譯安裝Nginx+PHP+MariaDB開發(fā)環(huán)境的教程
- 在Mac OS上搭建Nginx+PHP+MySQL開發(fā)環(huán)境的教程
- mac 下 安裝nginx的方法小結(jié)
- mac下安裝nginx和php
- Mac使用Nginx設(shè)置代理并禁用自帶Apache的問題記錄
相關(guān)文章
c# 操作符?? null coalescing operator
?? "null coalescing" operator 是c#新提供的一個操作符,這個操作符提供的功能是判斷左側(cè)的操作數(shù)是否是null,如果是則返回結(jié)果是右側(cè)的操作數(shù);非null則返回左側(cè)的操作數(shù)。2009-06-06ASP.NET性能優(yōu)化之構(gòu)建自定義文件緩存
ASP.NET的輸出緩存(即靜態(tài)HTML)在.NET4.0前一直是基于內(nèi)存的。這意味著如果我們的站點(diǎn)含有大量的緩存,則很容易消耗掉本機(jī)內(nèi)存。2011-09-09ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼
這篇文章介紹了ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼,有需要的朋友可以參考一下2013-11-11NET Core TagHelper實(shí)現(xiàn)分頁標(biāo)簽
這篇文章主要介紹了NET Core TagHelper實(shí)現(xiàn)分頁標(biāo)簽,講述實(shí)現(xiàn)一個簡單分頁和總要注意步奏,感興趣的小伙伴們可以參考一下2016-07-07ASP.NET Core對不同類型的用戶進(jìn)行區(qū)別限流詳解
這篇文章主要介紹了ASP.NET Core對不同類型的用戶進(jìn)行區(qū)別限流的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02ASP.NET 4中的可擴(kuò)展輸出緩存(可以緩存頁面/控件等)
ASP.NET 1.0引入輸出緩存的概念,這使得開發(fā)者可以緩存頁面、控件、控制器以及HTTP響應(yīng)的輸出到內(nèi)存中,接下來詳細(xì)介紹,感興趣的朋友可以了解下2013-01-01