在上篇文章中,主要介绍了 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 <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 应用程序的配置文件
<span class="hljs-selector-tag">refs 应用程序引用的<span class="hljs-selector-class">.net <span class="hljs-selector-tag">fx系统程序集
<span class="hljs-selector-tag">runtimes 运行时环境,可以看到里面的文件夹包含 <span class="hljs-selector-tag">win7、<span class="hljs-selector-tag">linxu,<span class="hljs-selector-tag">mac <span class="hljs-selector-tag">os 等,说明我们这个应用程序是跨平台的。
<span class="hljs-selector-tag">views 这个文件夹存放的就是我们的 <span class="hljs-selector-tag">mvc 的视图文件。
<span class="hljs-selector-tag">wwwroot 文件夹,存放的是前端使用的 <span class="hljs-selector-tag">js 库,<span class="hljs-selector-tag">css 样式表,和图片等。</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 中的缓存,会在代理服务器这一步来处理。大家看下面这个图:
至于怎么样添加代理服务器可以识别到的缓存,可以关注我后面发表的博客文章。
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端口。
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<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 查看是否显示如下界面。
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 来访问我们的站点了。
注意事项
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/
转载文章受原作者版权保护。转载请注明原作者出处!