Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

前言

在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署。

有关如何在 Jexus 中进行部署,请参见本人的另一篇文章:
http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html

目录

  • 新建一个 WebApp 项目

  • 发布到 Linux,Mac OS

  • 使用 Nginx 进行反向代理

新建一个 WebApp 项目

在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序。

以下是我在 Mac 中的截图:
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第1张图片

主要是用以下几个命令:

mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。

dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。

新建了应用程序之后,使用dotnet restore 和 dotnet run 命令来测试一下我们的应用程序。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第2张图片
可以看到已经成功运行了。
我们打开浏览器输入 http://localhost:5000,来看一下效果。

ps: Safari 下面,浏览器地址栏看不到端口号,实际上是5000端口。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第3张图片

发布到 Linux,Mac OS

如果发布应用程序,我们需要使用 dotnet publish命令,通过使用 --help 参数可以看到一些可以使用的命令参数。

  -f|--framework           Target framework to compile for
  
  -r|--runtime    Target runtime to publish for
  
  -b|--build-base-path    Directory in which to place temporary outputs
  
  -o|--output            Path in which to publish the app
  
  --version-suffix    Defines what `*` should be replaced with in version field in project.json
  
  -c|--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 运行时环境,可以看到里面的文件夹包含 win7linxumac os 等,说明我们这个应用程序是跨平台的。views 这个文件夹存放的就是我们的 mvc 的视图文件。wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。

然后我们把工作目录切换到发布的 publish 文件夹。使用dotnet HelloWebApp.dll测试发布过后的程序是否运行正常。

使用 Nginx 进行反向代理

  • Mac OS

  • Linux(Ubuntu)

  • 注意事项

反向代理,即把我们应用程序的一部分路径交给 Nginx 去处理,比如静态文件,图片等。另外一部分动态的交给 Kertrel 来处理。这样可以降低我们的后端 Kertrel 的压力,以及可以在 Nginx 配置负载均衡等。

还有一个很重要的优势就是 Web 中的缓存,会在代理服务器这一步来处理。大家看下面这个图:
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第4张图片

至于怎么样添加代理服务器可以识别到的缓存,可以关注我后面发表的博客文章。

Mac OS

安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core#macos。

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端口。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第5张图片

Linux(Ubuntu)

安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core#ubuntu。

首先在Ubuntu 中新建一个文件夹,把我们发布的 publish 文件夹拷贝到 Liunx 中。然后测试一下是否可以正常运行。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第6张图片

1、 在 linux(Ubuntu) 中新开一个命令行窗口,输入 apt-get install nginx 首先安装 nginx。
2、 安装完成之后,输入 nginx -v查看是否安装成功。显示nginx version: nginx/1.4.6表示安装已经成功。

yxd@ubuntu:~$ sudo nginx -v
nginx version: nginx/1.4.6 (Ubuntu)

测试 nginx 是否运行成功,打开浏览器,输入 http://localhost 查看是否显示如下界面。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第7张图片

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 来访问我们的站点了。
Asp.Net Core 发布和部署( MacOS + Linux + Nginx )_第8张图片

注意事项

1、在使用 nginx 代理访问站点的时候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必须开启。

2、可以使用下面的命令来让一个命令行运行在后台进程中。

nohup dotnet HelloWebApp.dll &

这个时候你就可以把命令行窗口关掉了。

下一篇将讲解如何在 Linux 中使用 Docker 进行部署,以及如何脱离命令行宿主给我们的dotnet程序创建一个守护进程,及宕机失败自动重启等等。。。 请持续关注。


相关文章:

  • ASP.NET Core 1.0 入门——了解一个空项目

  • ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)

  • .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介

  • 云服务器下ASP.NET Core 1.0环境搭建(包含mono与coreclr)

  • 使用VS Code开发ASP.NET Core 应用程序

  • dotnet run是如何启动asp.net core站点的

  • ASP.NET Core提供模块化Middleware组件

  • “dotnet restore"和"dotnet run"都做了些什么?

  • 探秘 dotnet run 如何运行 .NET Core 应用程序

  • .NET Portability Analyzer 已开源

  • ASP.NET Core的配置(1):读取配置信息

  • ASP.NET Core的配置(2):配置模型详解

  • .NET Core 1.0 RC2 历险之旅

  • 使用VS Code开发 调试.NET Core 应用程序

  • 让我们Core在一起:ASP.NET Core & .NET Core

  • .NET Core VS Code 环境配置

  • 官方博客明确了 .NET Core RC2/RTM 时间表

  • .NET Core全新的配置管理[共9篇]

  • 利用记事本创建一个ASP.NET Core RC2 MVC应用

  • 微软.NET 正式劈腿成功,横跨所有平台

  • .NET Core 1.0 CentOS7 尝试

  • 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

  • [.NET Core].NET Core R2安装及示例教程

  • ASP.NET Core 开发-中间件(Middleware)

  • 结合Jexus + Kestrel 部署 asp.net core 生产环境

  • 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

  • ASP.NET Core 中文文档 第一章 入门

  • 用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

  • 用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

  • 用 Visual Studio 发布一个 Azure 云 Web 应用程序

  • ASP.NET Core MVC 与 Visual Studio 入门

  • 第二章指南(4.2)添加 Controller

  • DotNet Core 介绍

  • asp.net core 中间件详解及项目实战

  • 教你实践ASP.NET Core Authorization(免看文档教程)

  • asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存

  • asp.net core 中间件详解及项目实战

  • 第二章 指南(4.3)添加 View

  • dotnet core开发体验之开始MVC

  • dotnet core 开发体验之Routing

  • 聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

  • 简析.NET Core 以及与 .NET Framework的关系

  • .NET Core 使用Dapper 操作MySQL

  • 使用 CommandLineApplication 类创建专业的控制台程序

  • 简析 .NET Core 构成体系

  • .NET Core也可以使用MongoDB了

  • .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布

  • .NET Core:面向未来的开源跨平台开发技术

  • 微软说它深爱着Linux,现在它用行动证明了

  • 移植.NET Core计划,整合各平台变得更简单了!

  • ASP.NET Core 介绍

  • 通过几个Hello World感受.NET Core全新的开发体验

  • ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

  • .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门


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


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注


你可能感兴趣的:(Asp.Net Core 发布和部署( MacOS + Linux + Nginx ))