在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署。css
有关如何在 Jexus 中进行部署,请参见本人的另外一篇文章:
http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.htmlhtml
在 Asp.Net Core 项目中,咱们使用 dotnet new -t WebApp
命令和建立一个新的空的 Web 应用程序。前端
如下是我在 Mac 中的截图:linux
主要是用如下几个命令:nginx
mkdir HelloWebApp
这个命令是建立一个名为 HelloWebApp 的文件夹。web
dotnet new -t Web
这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。macos
新建了应用程序以后,使用dotnet restore
和 dotnet run
命令来测试一下咱们的应用程序。
能够看到已经成功运行了。
咱们打开浏览器输入 http://localhost:5000,来看一下效果。json
ps: Safari 下面,浏览器地址栏看不到端口号,其实是5000端口。ubuntu
若是发布应用程序,咱们须要使用 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 运行时环境,能够看到里面的文件夹包含 win七、linxu,mac os 等,说明咱们这个应用程序是跨平台的。 views 这个文件夹存放的就是咱们的 mvc 的视图文件。 wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。
而后咱们把工做目录切换到发布的 publish 文件夹。使用dotnet HelloWebApp.dll
测试发布事后的程序是否运行正常。
反向代理,即把咱们应用程序的一部分路径交给 Nginx 去处理,好比静态文件,图片等。另一部分动态的交给 Kestrel 来处理。这样能够下降咱们的后端 Kestrel 的压力,以及能够在 Nginx 配置负载均衡等。
还有一个很重要的优点就是 Web 中的缓存,会在代理服务器这一步来处理。你们看下面这个图:
至于怎么样添加代理服务器能够识别到的缓存,能够关注我后面发表的博客文章。
安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core#macos。
一、 在 mac 中打开命令行,输入 brew install nginx
首先安装 nginx。
二、 安装完成以后,输入 nginx -v
查看是否安装成功。显示nginx version: nginx/1.10.1
表示安装已经成功。
三、配置 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端口。
安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core#ubuntu。
首先在Ubuntu 中新建一个文件夹,把咱们发布的 publish 文件夹拷贝到 Liunx 中。而后测试一下是否能够正常运行。
一、 在 linux(Ubuntu) 中新开一个命令行窗口,输入 apt-get install nginx
首先安装 nginx。
二、 安装完成以后,输入 nginx -v
查看是否安装成功。显示nginx version: nginx/1.4.6
表示安装已经成功。
yxd@ubuntu:~$ sudo nginx -v nginx version: nginx/1.4.6 (Ubuntu)
测试 nginx 是否运行成功,打开浏览器,输入 http://localhost 查看是否显示以下界面。
三、配置 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 来访问咱们的站点了。
一、在使用 nginx 代理访问站点的时候, 保持命令dotnet run HelloWebApp.dll
的命令行窗口必须开启。
二、能够使用下面的命令来让一个命令行运行在后台进程中。
nohup dotnet HelloWebApp.dll &
这个时候你就能够把命令行窗口关掉了。