ASP.NET Core程序发布到Linux生产环境详解
在这篇文章里我们将介绍如何在 ubuntu 14.04 server上部署asp.net core应用程序。我们将把asp.net core应用程序放到一个反向代理服务器的后面,由代理服务器把请求转交给我们的kestrel服务器。除此之外,我们还将保证我们的web应用程序作为一个守护进程来进行启动。我们需要配置一个进程管理工具来帮助我们在程序崩溃时恢复程序,以保证高可用性。
章节:
- 准备
- 复制你的应用程序
- 配置一个反向代理服务器
- 监控我们的应用程序
- 启动我们的应用程序
- 观察日志
- 使我们的应用程序安全化
准备工作
1、使用一个具体有sudo权限的标准帐号访问ubuntu 14.04 server;
2、asp.net core应用程序。
复制你的应用程序
运行dotnet publish把你的asp.net core应用程序打包成一个自包含(self-contained)的目录(publish目录,这个目录下的程序将被上传到服务器上并运行)。什么是自包含(self-contained)程序,请参考我的这篇文章:
.net core应用类型(portable apps & self-contained apps) 。在操作之前,通过ftp工具(winscp等)把publish目录下的程序全部上传到服务器指定的目录下。接下来我们运行我们的程序,具体怎么运行程序请参考这篇文章:使用.net core 1.0创建一个self-contained控制台应用。
配置一个反向代理服务器
对于动态web应用来说,反向代理是一个非常常用的设置。反向代理会终止当前的请求并把请求转交给后端的asp.net core应用程序。
为什么要使用反向代理服务器
kestrel作为一个web服务器,在处理动态内容方面是非常优秀的,但它并不像那些成熟的web服务器一样功能完备,这些服务器包括: iis, apache or nginx。反向代理服务器可以把一些工作从http服务器上卸掉,这些工作包括:静态内容处理、缓存、压缩以及ssl等。反向代理服务器可以部署在一个专用的服务器上或者和http服务器在同一个集群里。本例中我们将使用nginx作为反向代理服务器并和http服务器部署在同一个机器上。
安装代理服务器
sudo apt-get install nginx
安装nginx
sudo service nginx start
启动nginx
配置nginx
编辑文件:/etc/nginx/sites-available/default为如下:
server { listen 80; 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; } }
监听在80端口,http的默认端口;代理使用http版本为:http 1.1;把原始请求转交给:http://localhost:5000。
上述配置完成后使用如下命令来验证配置文件语法是否正确:
sudo nginx -t
如果配置语法没有问题,则重启nginx以使配置生效:
sudo nginx -s reload
监控我们的web应用
nginx将转发请求给你的kestrel服务器,但kestrel并不像windows上的iis,它并不管理你的kestrel进程,在这篇文章中我们将使用supervisor来启动我们的应用程序,当系统启动的时候或者当进程崩溃时进行自我恢复。
安装supervisor:
sudo apt-get install supervisor
配置supervisor:
/etc/supervisor/conf.d/hellomvc.conf (新增的一个文件)
[program:hellomvc] command=/usr/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll directory=/var/aspnetcore/hellomvc/ autostart=true autorestart=true stderr_logfile=/var/log/hellomvc.err.log stdout_logfile=/var/log/hellomvc.out.log environment=aspnetcore__environment=production user=www-data stopsignal=int
重启supervisord
sudo service supervisor stop sudo service supervisor start
启动我们的web应用程序
在这个案例中因为我们使用了supervisor来管理我们的应用,应用将会被supervisor自动开启。当操作系统启动的时候,supervisor作为守护进程使用一个system v的初始化脚本来启动,supervisor启动后紧接着会启动你的应用程序。
观察日志
supervisord日志
sudo tail -f /var/log/supervisor/supervisord.log
我们自己应用的日志
tail -f /var/log/hellomvc.out.log
原文翻译:publish to a linux production environment
作者:sourabh shirhatti
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
详解ASP.NET Core 网站发布到Linux服务器
-
ASP.NET Core程序发布到Linux生产环境详解
-
ASP.NET Core程序发布到Linux生产环境详解
-
使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
-
Jexus 5.8.2正式发布! 为Asp.Net Core生产环境提供平台支持
-
详解ASP.NET Core 网站发布到Linux服务器
-
详解Win10 Bash/WSL调试Linux环境下的.NET Core应用程序
-
详解Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
-
详解将ASP.NET Core应用程序部署至生产环境中(CentOS7)
-
ASP.NET Core 发布到Linux需要注意的地方