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 )

主要是用以下几个命令:

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

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

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

Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
可以看到已经成功运行了。
我们打开浏览器输入 http://localhost:5000,来看一下效果。

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

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

发布到 Linux,Mac OS

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

  -f|--framework <framework>          Target framework <span class="hljs-keyword">to compile <span class="hljs-keyword">for

  -r|--runtime <runtime_identifier>   Target runtime <span class="hljs-keyword">to publish <span class="hljs-keyword">for

  -b|--build-base-path <output_dir>   Directory <span class="hljs-keyword">in which <span class="hljs-keyword">to place temporary outputs

  -o|--output <output_path>           Path <span class="hljs-keyword">in which <span class="hljs-keyword">to publish the app

  --version-suffix <version_suffix>   Defines what * should be replaced <span class="hljs-keyword">with <span class="hljs-keyword">in version field <span class="hljs-keyword">in project.json

  -c|--configuration <configuration>  Configuration under which <span class="hljs-keyword">to build

  --native-subdirectory               Temporary mechanism <span class="hljs-keyword">to include subdirectories <span class="hljs-keyword">from native assets <span class="hljs-keyword">of dependency packages <span class="hljs-keyword">in output

  --no-build                          <span class="hljs-keyword">Do <span class="hljs-keyword">not build projects before publishing</span></span></span></span></span></span></span></configuration></span></span></span></version_suffix></span></span></output_path></span></span></output_dir></span></span></runtime_identifier></span></span></framework>

我们直接运行 dotnet publish 使用默认的发布路径,当看到 Published 1/1 projects successfully的时候,说明已经发布成功了。 接着进入到 bin 文件夹下的Debug 文件夹下的netcoreapp1.0 文件夹,然后会看到有一个 publish 的文件夹。这就是默认发布生成的文件夹,在这个文件夹中可以看到我们程序所有依赖的程序集文件。

发布之后 publish 文件夹里面的子文件夹有必要说明一下。

<span class="hljs-selector-tag">appsettiong<span class="hljs-selector-class">.json  &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;
<span class="hljs-selector-tag">refs &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5F15;&#x7528;&#x7684;<span class="hljs-selector-class">.net <span class="hljs-selector-tag">fx&#x7CFB;&#x7EDF;&#x7A0B;&#x5E8F;&#x96C6;
<span class="hljs-selector-tag">runtimes &#x8FD0;&#x884C;&#x65F6;&#x73AF;&#x5883;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x91CC;&#x9762;&#x7684;&#x6587;&#x4EF6;&#x5939;&#x5305;&#x542B; <span class="hljs-selector-tag">win7&#x3001;<span class="hljs-selector-tag">linxu&#xFF0C;<span class="hljs-selector-tag">mac <span class="hljs-selector-tag">os &#x7B49;&#xFF0C;&#x8BF4;&#x660E;&#x6211;&#x4EEC;&#x8FD9;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x662F;&#x8DE8;&#x5E73;&#x53F0;&#x7684;&#x3002;
<span class="hljs-selector-tag">views &#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x5B58;&#x653E;&#x7684;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x7684; <span class="hljs-selector-tag">mvc &#x7684;&#x89C6;&#x56FE;&#x6587;&#x4EF6;&#x3002;
<span class="hljs-selector-tag">wwwroot &#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5B58;&#x653E;&#x7684;&#x662F;&#x524D;&#x7AEF;&#x4F7F;&#x7528;&#x7684; <span class="hljs-selector-tag">js &#x5E93;&#xFF0C;<span class="hljs-selector-tag">css &#x6837;&#x5F0F;&#x8868;&#xFF0C;&#x548C;&#x56FE;&#x7247;&#x7B49;&#x3002;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

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

使用 Nginx 进行反向代理

  • Mac OS
  • Linux(Ubuntu)
  • 注意事项

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

还有一个很重要的优势就是 Web 中的缓存,会在代理服务器这一步来处理。大家看下面这个图:

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

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

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 节点,修改配置为如下:

<span class="hljs-attribute">location / {
      <span class="hljs-attribute">proxy_pass http://localhost:5000;
      <span class="hljs-attribute">proxy_http_version <span class="hljs-number">1.<span class="hljs-number">1;
      <span class="hljs-attribute">proxy_set_header Upgrade <span class="hljs-variable">$http_upgrade;
      <span class="hljs-attribute">proxy_set_header Connection keep-alive;
      <span class="hljs-attribute">proxy_set_header Host <span class="hljs-variable">$host;
      <span class="hljs-attribute">proxy_cache_bypass <span class="hljs-variable">$http_upgrade;
    }</span></span></span></span></span></span></span></span></span></span></span></span>

保存并退出。 然后使用 sudo nginx -s reload命令来重新加载配置。
然后我们打开浏览器 输入http://localhost,发现此时已经通过 nginx 来访问我们的站点了。
ps: Safari 下面,浏览器地址栏看不到端口号,实际上是80端口。

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

Linux(Ubuntu)

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

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

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

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

yxd@ubuntu<span class="hljs-symbol">:~$ sudo nginx -v
nginx <span class="hljs-symbol">version: nginx/<span class="hljs-number">1.4.<span class="hljs-number">6 (Ubuntu)
</span></span></span></span>

测试 nginx 是否运行成功,打开浏览器,输入 http://localhost 查看是否显示如下界面。

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

3、配置 nginx 代理。

安装完 nginx 之后,默认的配置文件路径在 /etc/nginx/sites-available/default 文件中。切换工作目录到 /etc/nginx/sites-available/,使用 sudo gedit default命令打开 default 文件。 在 Server 节点中,找到监听 80端口的location 节点,修改内容为如下:

<span class="hljs-section">server {
    <span class="hljs-attribute">listen <span class="hljs-number">80;

    </span></span></span>

保存并退出。 然后使用 sudo nginx -s reload命令来重新加载配置。
然后我们打开浏览器 输入http://localhost,发现此时已经通过 nginx 来访问我们的站点了。

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

注意事项

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

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

<span class="hljs-title">nohup <span class="hljs-keyword">dotnet <span class="hljs-type">HelloWebApp.dll &
</span></span></span>

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

Original: https://www.cnblogs.com/yan8shi/p/10509606.html
Author: 黄衍仕
Title: Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598960/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis限制一键登录次数

    一、产生背景 之前的随笔提到过项目中写了一键登录功能、上线后除了有时候网络波动会导致登陆失败,其他情况一直稳如老狗 しかし,邮件看到有人恶意刷一键登录,这年头闲的人可真闲啊,只能思…

    数据库 2023年6月6日
    098
  • 汇编语言学习记录一

    0x00——什么是汇编语言? 汇编语言:早期实现程序员和机器进行交互的汇编指令集。 汇编指令,通过编译器,转换成机器码,从而使 机器 理解其指令。 0x01——汇编语言的组成 汇编…

    数据库 2023年6月11日
    098
  • 一个小工具帮你搞定实时监控Nginx服务器

    Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要。关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该…

    数据库 2023年6月9日
    0175
  • 9、手写一个starter

    一、starte详解: 1、starter场景启动器: SpringBoot-starter是一个集成接合器,主要完成两件事: (1)、引入模块所需的相关jar包 (2)、自动配置…

    数据库 2023年6月6日
    098
  • 访问网络共享(net use):发生系统错误 67。找不到网络名。

    使用\ip访问对方共享目录或使用net use \ip 时: 发生系统错误 67。找不到网络名。 以下几项启用: 1,网卡勾选”Microsoft网络客户端&#8221…

    数据库 2023年6月14日
    0186
  • 一,Flink快速上手

    1.依赖配置 1.1 pom文件 8 8 1.13.0 1.8 2.12 1.7.30 org.apache.flink flink-java ${flink.version} o…

    数据库 2023年6月6日
    0102
  • 磁盘空间满,如何处理?

    作为运维人员,磁盘空间报警是最寻常遇到的情况,那么遇到空间如何处理呢?这里介绍一下处理办法及处理思路。 操作系统:centos系统 、Ubuntu 1 定位目录 收到空间报警信息,…

    数据库 2023年6月14日
    0105
  • 如何画出别人一看就懂的架构图?

    技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提…

    数据库 2023年6月14日
    0102
  • MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu……

    报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu…… 原因: 1、第一次配置参数时,不完整…

    数据库 2023年6月14日
    0114
  • 2022-8-29 javaweb 第一天 servlet/tomcat

    软件架构 1、C/S架构:客户端 / 服务器——–QQ,Typora,腾讯会议。 2、B/S架构:浏览器 / 服务器——…

    数据库 2023年6月14日
    099
  • MySQL知识点大全!!

    使用PreStatement对象: public int execUpdate(String sql, Object[] parms) { int count = 0; try {…

    数据库 2023年6月16日
    0106
  • Mysql数据库体系

    Mysql数据库体系如下(手绘): 描述: 1.DBMS:database system management是数据库管理软件,平时我们使用的数据库的全称,是C/S架构(clien…

    数据库 2023年6月6日
    0103
  • 域名ICP备案<阿里云>

    阅读指引 适用人:想要通过国内域名访问页面或者接口,需要进行ICP备案解决问题:备案过程中发生的问题阅读耗时:3分钟参考链接:阿里云ICP流程-视频、备案相关问题、注销备案相关问题…

    数据库 2023年6月9日
    0104
  • 力扣leetcode刷题记录1—-

    【以下题目来源均来自力扣leetcode】 World 表: 【描述】name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。 【问题】如果一个…

    数据库 2023年6月16日
    0104
  • ECMAScript版本知识点汇总

    ECMAScript版本知识点汇总 ES5 btoa、atob 对参数进行base64格式编码、解码 /** * btoa() * base64编码 * @param {strin…

    数据库 2023年6月11日
    0122
  • 2022-08-16 数据库查询语言之——-DQL

    重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。 构建数据库 创建一张student表: DROP TABLE IF EXIST…

    数据库 2023年5月24日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球