Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
前言
在上篇文章中,主要介紹了 Dotnet Core Run 命令,這篇文章主要是講解如何在Linux中,對(duì) Asp.Net Core 的程序進(jìn)行發(fā)布和部署。
有關(guān)如何在 Jexus 中進(jìn)行部署,請(qǐng)參見(jiàn)本人的另一篇文章:
http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html
目錄
新建一個(gè) WebApp 項(xiàng)目
發(fā)布到 Linux,Mac OS
使用 Nginx 進(jìn)行反向代理
新建一個(gè) WebApp 項(xiàng)目
在 Asp.Net Core 項(xiàng)目中,我們使用?dotnet new -t WebApp?命令和創(chuàng)建一個(gè)新的空的 Web 應(yīng)用程序。
以下是我在 Mac 中的截圖:
主要是用以下幾個(gè)命令:
mkdir HelloWebApp?這個(gè)命令是創(chuàng)建一個(gè)名為 HelloWebApp 的文件夾。
dotnet new -t Web?這個(gè)命令是使用 Web 模板來(lái)新建一個(gè) WebApp 的 Mvc 應(yīng)用程序。
新建了應(yīng)用程序之后,使用dotnet restore?和?dotnet run?命令來(lái)測(cè)試一下我們的應(yīng)用程序。
可以看到已經(jīng)成功運(yùn)行了。
我們打開(kāi)瀏覽器輸入?http://localhost:5000,來(lái)看一下效果。
ps: Safari 下面,瀏覽器地址欄看不到端口號(hào),實(shí)際上是5000端口。
發(fā)布到 Linux,Mac OS
如果發(fā)布應(yīng)用程序,我們需要使用?dotnet publish命令,通過(guò)使用?--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的時(shí)候,說(shuō)明已經(jīng)發(fā)布成功了。 接著進(jìn)入到 bin 文件夾下的Debug 文件夾下的netcoreapp1.0 文件夾,然后會(huì)看到有一個(gè) publish 的文件夾。這就是默認(rèn)發(fā)布生成的文件夾,在這個(gè)文件夾中可以看到我們程序所有依賴的程序集文件。
發(fā)布之后 publish 文件夾里面的子文件夾有必要說(shuō)明一下。
appsettiong.json ?應(yīng)用程序的配置文件refs 應(yīng)用程序引用的.net fx系統(tǒng)程序集runtimes 運(yùn)行時(shí)環(huán)境,可以看到里面的文件夾包含 win7、linxu,mac os 等,說(shuō)明我們這個(gè)應(yīng)用程序是跨平臺(tái)的。views 這個(gè)文件夾存放的就是我們的 mvc 的視圖文件。wwwroot 文件夾,存放的是前端使用的 js 庫(kù),css 樣式表,和圖片等。然后我們把工作目錄切換到發(fā)布的 publish 文件夾。使用dotnet HelloWebApp.dll測(cè)試發(fā)布過(guò)后的程序是否運(yùn)行正常。
使用 Nginx 進(jìn)行反向代理
Mac OS
Linux(Ubuntu)
注意事項(xiàng)
反向代理,即把我們應(yīng)用程序的一部分路徑交給 Nginx 去處理,比如靜態(tài)文件,圖片等。另外一部分動(dòng)態(tài)的交給 Kertrel 來(lái)處理。這樣可以降低我們的后端 Kertrel 的壓力,以及可以在 Nginx 配置負(fù)載均衡等。
還有一個(gè)很重要的優(yōu)勢(shì)就是 Web 中的緩存,會(huì)在代理服務(wù)器這一步來(lái)處理。大家看下面這個(gè)圖:
至于怎么樣添加代理服務(wù)器可以識(shí)別到的緩存,可以關(guān)注我后面發(fā)表的博客文章。
Mac OS
安裝 dotnet 環(huán)境參見(jiàn)官方網(wǎng)站?https://www.microsoft.com/net/core#macos。
1、 在 mac 中打開(kāi)命令行,輸入?brew install nginx?首先安裝 nginx。
2、 安裝完成之后,輸入?nginx -v查看是否安裝成功。顯示nginx version: nginx/1.10.1表示安裝已經(jīng)成功。
3、配置 nginx 代理。
安裝完 nginx 之后,默認(rèn)的配置文件路徑在?/usr/local/etc/nginx?文件夾中。在這個(gè)文件夾中找到nginx.conf 配置文件,使用 Visual Studio Code 打開(kāi),在?Server?節(jié)點(diǎn)中,找到監(jiān)聽(tīng) 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命令來(lái)重新加載配置。
然后我們打開(kāi)瀏覽器 輸入http://localhost,發(fā)現(xiàn)此時(shí)已經(jīng)通過(guò) nginx 來(lái)訪問(wèn)我們的站點(diǎn)了。
ps: Safari 下面,瀏覽器地址欄看不到端口號(hào),實(shí)際上是80端口。
Linux(Ubuntu)
安裝 dotnet 環(huán)境參見(jiàn)官方網(wǎng)站?https://www.microsoft.com/net/core#ubuntu。
首先在Ubuntu 中新建一個(gè)文件夾,把我們發(fā)布的 publish 文件夾拷貝到 Liunx 中。然后測(cè)試一下是否可以正常運(yùn)行。
1、 在 linux(Ubuntu) 中新開(kāi)一個(gè)命令行窗口,輸入?apt-get install nginx?首先安裝 nginx。
2、 安裝完成之后,輸入?nginx -v查看是否安裝成功。顯示nginx version: nginx/1.4.6表示安裝已經(jīng)成功。
測(cè)試 nginx 是否運(yùn)行成功,打開(kāi)瀏覽器,輸入?http://localhost?查看是否顯示如下界面。
3、配置 nginx 代理。
安裝完 nginx 之后,默認(rèn)的配置文件路徑在?/etc/nginx/sites-available/default?文件中。切換工作目錄到/etc/nginx/sites-available/,使用sudo gedit default命令打開(kāi) default 文件。 在?Server?節(jié)點(diǎn)中,找到監(jiān)聽(tīng) 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命令來(lái)重新加載配置。
然后我們打開(kāi)瀏覽器 輸入http://localhost,發(fā)現(xiàn)此時(shí)已經(jīng)通過(guò) nginx 來(lái)訪問(wèn)我們的站點(diǎn)了。
注意事項(xiàng)
1、在使用 nginx 代理訪問(wèn)站點(diǎn)的時(shí)候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必須開(kāi)啟。
2、可以使用下面的命令來(lái)讓一個(gè)命令行運(yùn)行在后臺(tái)進(jìn)程中。
nohup dotnet HelloWebApp.dll &這個(gè)時(shí)候你就可以把命令行窗口關(guān)掉了。
下一篇將講解如何在 Linux 中使用 Docker 進(jìn)行部署,以及如何脫離命令行宿主給我們的dotnet程序創(chuàng)建一個(gè)守護(hù)進(jìn)程,及宕機(jī)失敗自動(dòng)重啟等等。。。 請(qǐng)持續(xù)關(guān)注。
相關(guān)文章:
ASP.NET Core 1.0 入門——了解一個(gè)空項(xiàng)目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡(jiǎn)介
云服務(wù)器下ASP.NET Core 1.0環(huán)境搭建(包含mono與coreclr)
使用VS Code開(kāi)發(fā)ASP.NET Core 應(yīng)用程序
dotnet run是如何啟動(dòng)asp.net core站點(diǎn)的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運(yùn)行 .NET Core 應(yīng)用程序
.NET Portability Analyzer 已開(kāi)源
ASP.NET Core的配置(1):讀取配置信息
ASP.NET Core的配置(2):配置模型詳解
.NET Core 1.0 RC2 歷險(xiǎn)之旅
使用VS Code開(kāi)發(fā) 調(diào)試.NET Core 應(yīng)用程序
讓我們Core在一起:ASP.NET Core & .NET Core
.NET Core VS Code 環(huán)境配置
官方博客明確了 .NET Core RC2/RTM 時(shí)間表
.NET Core全新的配置管理[共9篇]
利用記事本創(chuàng)建一個(gè)ASP.NET Core RC2 MVC應(yīng)用
微軟.NET 正式劈腿成功,橫跨所有平臺(tái)
.NET Core 1.0 CentOS7 嘗試
解讀發(fā)布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安裝及示例教程
ASP.NET Core 開(kāi)發(fā)-中間件(Middleware)
結(jié)合Jexus + Kestrel 部署 asp.net core 生產(chǎn)環(huán)境
通過(guò)Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文檔 第一章 入門
用 Visual Studio Code 在 macOS 上創(chuàng)建首個(gè) ASP.NET Core 應(yīng)用程序
用 Visual Studio 和 ASP.NET Core MVC 創(chuàng)建首個(gè) Web API
用 Visual Studio 發(fā)布一個(gè) Azure 云 Web 應(yīng)用程序
ASP.NET Core MVC 與 Visual Studio 入門
第二章指南(4.2)添加 Controller
DotNet Core 介紹
asp.net core 中間件詳解及項(xiàng)目實(shí)戰(zhàn)
教你實(shí)踐ASP.NET Core Authorization(免看文檔教程)
asp.net core 使用 Redis 和 Protobuf 進(jìn)行 Session 緩存
asp.net core 中間件詳解及項(xiàng)目實(shí)戰(zhàn)
第二章 指南(4.3)添加 View
dotnet core開(kāi)發(fā)體驗(yàn)之開(kāi)始MVC
dotnet core 開(kāi)發(fā)體驗(yàn)之Routing
聊聊ASP.NET Core默認(rèn)提供的這個(gè)跨平臺(tái)的服務(wù)器——KestrelServer
簡(jiǎn)析.NET Core 以及與 .NET Framework的關(guān)系
.NET Core 使用Dapper 操作MySQL
使用 CommandLineApplication 類創(chuàng)建專業(yè)的控制臺(tái)程序
簡(jiǎn)析 .NET Core 構(gòu)成體系
.NET Core也可以使用MongoDB了
.NET Core & ASP.NET Core 1.0在Redhat峰會(huì)上正式發(fā)布
.NET Core:面向未來(lái)的開(kāi)源跨平臺(tái)開(kāi)發(fā)技術(shù)
微軟說(shuō)它深愛(ài)著Linux,現(xiàn)在它用行動(dòng)證明了
移植.NET Core計(jì)劃,整合各平臺(tái)變得更簡(jiǎn)單了!
ASP.NET Core 介紹
通過(guò)幾個(gè)Hello World感受.NET Core全新的開(kāi)發(fā)體驗(yàn)
ASP.NET Core 運(yùn)行原理剖析1:初始化WebApp模版并運(yùn)行
.NET Core系列 : 1、.NET Core 環(huán)境搭建和命令行CLI入門
原文地址:http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
贊賞
人贊賞
總結(jié)
以上是生活随笔為你收集整理的Asp.Net Core 发布和部署( MacOS + Linux + Nginx )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET Core系列 : 1、.NET
- 下一篇: Asp.Net Core 发布和部署(L