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

主要是用以下几个命令:

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

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

新建了应用程序之后,使用dotnet restore 和 dotnet run 命令来测试一下我们的应用程序。

可以看到已经成功运行了。
我们打开浏览器输入 http://localhost:5000,来看一下效果。

ps: Safari 下面,浏览器地址栏看不到端口号,实际上是5000端口。

发布到 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 中的缓存,会在代理服务器这一步来处理。大家看下面这个图:

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

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端口。

Linux(Ubuntu)

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

首先在Ubuntu 中新建一个文件夹,把我们发布的 publish 文件夹拷贝到 Liunx 中。然后测试一下是否可以正常运行。

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 查看是否显示如下界面。

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 来访问我们的站点了。

注意事项

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

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

nohup dotnet HelloWebApp.dll &

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

MacOS + Linux + Nginx的更多相关文章

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

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

  2. Asp.net Core 打包发布 (Linux+Nginx)

    如果你觉得如下这些文章对你有帮助,请点击链接支持作者原创 http://www.cnblogs.com/savorboard/ .Net Core SDK 命令介绍   前言 本篇主要介绍 asp.n ...

  3. linux nginx 启动脚本

    linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...

  4. Linux nginx日志按天分割实例

    Linux nginx日志按天分割实例   nginx的日志有个小缺点,日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将导致日志文件非常大,不便于管理这就需要我们自己来实现了,按日期每 ...

  5. linux+nginx+tomcat负载均衡,实现session同步

    linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...

  6. PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题

    在项目中要用ZipArchive解压ZIP文件,起初測试环境在WINDOWS平台中,測试通过,换到 LINUX+nginx 的环境中时 就出问题了(ZIP包中有文件和目录一共3百多个文件,大部分是带汉 ...

  7. linux+nginx+mysql+php

    LNMP(linux+nginx+mysql+php)服务器环境配置   一.简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为 “engine X”, 是一个高性能的 ...

  8. Linux Debian 7部署LEMP(Linux+Nginx+MySQL+PHP)网站环境

    我们在玩VPS搭建网站环境的时候,都经常看到所谓的LAMP.LNMP.LEMP,LAMP, 其中的A代表APECHE WEB驱动环境,LNMP中的N代表NGINX驱动环境,只不过海外的叫法NGINX ...

  9. LNMP(Linux+Nginx+Mysql+PHP---源码)环境搭建

    LNMP(Linux+Nginx+Mysql+PHP(Perl)) Linux:[root@dep5 mysql]# cat /etc/issueRed Hat Enterprise Linux Se ...

随机推荐

  1. kvm 存储

    1,virt-install --connect qemu:///system --name web01_lvm --ram 1024 --vcpus=1 --disk=/dev/vg_lvm/web ...

  2. HtmlAgilityPack --解析Html源码

    最近项目需要从网络上抓取一下数据解析Html源码,奈何正则表达式难写,于是网上搜索找到了“ HtmlAgilityPack”类库,敏捷开发,果然效率非同寻常. 在此做笔记,写下心得,顺便给自己总结一下 ...

  3. Foundation 框架 NSString常用总结

    iOS开发过程中,从始至终都会和NSString打交道,在此总结一下NSString的常用的方法,在以后的学习过程中用到的方法也会继续添加 NSString类是Foundation框架中得不可变字符串 ...

  4. java 静态内部类特点

    1.静态内部类可以在外部类的静态成员中访问或者实例化(非静态内部类不可以)---优势 2.静态内部类可以访问外部类的静态成员不可以访问非静态成员(非静态内部类可以访问类的静态和非静态成员)---限制 ...

  5. 5.7.1.3 Global 对象的属性

    Global对象还包含了一些属性,例如,特殊的值undefined.NaN以及Infinity都是Global对象的属性.此外,所有原生引用类型的构造函数,像Object和Function,也都是Gl ...

  6. 5.4.3 RegExp构造函数属性

    RegExp构造函数包含一些属性(这些属性在其他语言中被看成是静态属性).这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化.关于这些属性的另一个独特之处,就是可以通 ...

  7. c# zip file and folder programmatically

    In .net 4.5 Framework, we can zip a file by this way: private static string CompressFile(string sour ...

  8. ElasticSearch基本用法

    最大的特点: 1. 数据库的 database, 就是  index 2. 数据库的 table,  就是 tag 3. 不要使用browser, 使用curl来进行客户端操作.  否则会出现 jav ...

  9. Delphi中的“委托”

    .NET中有委托(Delegate)的概念,其声明形式如下所示:     public delegate void MyDelegate(int aIntParam, string aStringPa ...

  10. MFC消息截获之pretranslatemessage

    前几天,查了一个batch的问题,问题大致是这样,父窗口消息一个鼠标消息,弹出一个模态框,CPU负荷就飚升到100%(双核就是50%),非常怪异,用windbg,分析哪个线程占用CPU,定位到鼠标响应 ...