源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-02-17 01:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
[b]前言[/b] 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署。 [b]目录 [/b] [list] [*]新建一个 WebApp 项目[/*] [*]发布到 Linux,Mac OS[/*] [*]使用 Nginx 进行反向代理[/*] [/list] [b]新建一个 WebApp 项目[/b] 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序。 以下是我在 Mac 中的截图: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100124_0_41196.png[/img] 主要是用以下几个命令: mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。 dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。 新建了应用程序之后,使用dotnet restore 和 dotnet run 命令来测试一下我们的应用程序。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100124_1_45577.jpg[/img] 可以看到已经成功运行了。 我们打开浏览器输入 http://localhost:5000,来看一下效果。 ps: Safari 下面,浏览器地址栏看不到端口号,实际上是5000端口。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100125_2_19573.jpg[/img] [b]发布到 Linux,Mac OS[/b] 如果发布应用程序,我们需要使用 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 文件夹里面的子文件夹有必要说明一下。 [list] [*]appsettiong.json  应用程序的配置文件[/*] [*]refs 应用程序引用的.net fx系统程序集[/*] [*]runtimes 运行时环境,可以看到里面的文件夹包含 win7、linxu,mac os 等,说明我们这个应用程序是跨平台的。[/*] [*]views 这个文件夹存放的就是我们的 mvc 的视图文件。[/*] [*]wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。[/*] [/list] 然后我们把工作目录切换到发布的 publish 文件夹。使用dotnet HelloWebApp.dll测试发布过后的程序是否运行正常。 [b]使用 Nginx 进行反向代理[/b] [list=1] [*]Mac OS[/*] [*]Linux(Ubuntu)[/*] [*]注意事项[/*] [/list] 反向代理,即把我们应用程序的一部分路径交给 Nginx 去处理,比如静态文件,图片等。另外一部分动态的交给 Kestrel 来处理。这样可以降低我们的后端 Kestrel 的压力,以及可以在 Nginx 配置负载均衡等。 还有一个很重要的优势就是 Web 中的缓存,会在代理服务器这一步来处理。大家看下面这个图: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100125_3_13266.jpg[/img] 至于怎么样添加代理服务器可以识别到的缓存,可以关注我后面发表的博客文章。 [b]Mac OS[/b] 安装 dotnet 环境参见官方网站 [url=https://www.microsoft.com/net/core#macos]https://www.microsoft.com/net/core#macos[/url]。 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端口。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100125_2_19573.jpg[/img] [b]Linux(Ubuntu)[/b] 安装 dotnet 环境参见官方网站 [url=https://www.microsoft.com/net/core#ubuntu]https://www.microsoft.com/net/core#ubuntu[/url]。 首先在Ubuntu 中新建一个文件夹,把我们发布的 publish 文件夹拷贝到 Liunx 中。然后测试一下是否可以正常运行。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100126_5_3115.jpg[/img] 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 查看是否显示如下界面。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100126_6_89147.jpg[/img] [b]3、配置 nginx 代理。[/b] 安装完 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 来访问我们的站点了。 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100127_7_94090.jpg[/img] 注意事项 1、在使用 nginx 代理访问站点的时候, 保持命令dotnet run HelloWebApp.dll的命令行窗口必须开启。 2、可以使用下面的命令来让一个命令行运行在后台进程中。
nohup dotnet HelloWebApp.dll &
这个时候你就可以把命令行窗口关掉了。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部