发布ASP.NET Core程序到Linux生产环境
原文翻译:Publish to a Linux Production Environment
作者:Sourabh Shirhatti
在这篇文章里我们将介绍如何在 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
帮助到您了吗?
打赏作者(支付宝):
发布ASP.NET Core程序到Linux生产环境相关推荐
- NET问答: 发布 asp.net core 时如何修改 ASPNETCORE_ENVIRONMENT 环境变量?
咨询区 Dario: 当我把 asp.net core web 发布到本地文件时,我发现程序读的是 appsettings.Production.json ,也就说明当前的 ASPNETCORE_EN ...
- ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...
- ASP.NET Core 程序发布到Linux(Centos7)爬坑实战
前言 前阶段弄了个Linux系统想倒腾倒腾.NET Core,结果看了下网上的资料,大部分都是过期的,走了不少弯路,不过还好,今下午总算捣鼓出来了.Linux命令太多了,唉.血的教训:安装一定要看官网 ...
- 在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
前言: 随着ASP.NET Core 1.0的发布,论坛里相关的文章也越来越多,正好有时间在测试环境上搭建 ASP.NET Core的发布环境,把过程中遇到的问题写给大家,以便有用到的朋友需要. 环境 ...
- ASP.NET Core部署到Linux服务器(CentOS7 x64)
前言 本文主要讲解如何一步步将ASP.NET Core网站发布到Linux服务器,文中会讲解具体步骤及需要避免的各种问题. 目录 一.环境介绍 二.创建及发布ASP.NET Core网站项目 三.服务 ...
- ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
一.前言 最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...
- 【历史上的今天】6 月 27 日:摩托罗拉创始人出生;微软发布 ASP.NET Core;靠计算机起家的美国大亨
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 27 日,在 1972 年的今天,Syzygy Engineering 更名为 Atari( ...
- 【历史上的今天】6 月 27 日:摩托罗拉背后的高尔文家族;微软发布 ASP.NET Core;靠计算机起家的美国大亨
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2023 年 6 月 27 日,在 1972 年的今天,Syzygy Engineering 更名为 Atari( ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
最新文章
- 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)
- 【转】老程序猿给新程序猿的13点建议
- 想要升职加薪?先管理好时间与目标!
- UI控件问题和XCode编译警告和错误解决方法集锦 (持续更新ing)
- js前台编码,asp.net后台解码 防止前台传值到后台为乱码
- rtti获取类的字段和属性和方法
- 关于listview上下滑动imageview图片混乱问题
- C#实现实体类和XML相互转换
- http 请求报文和响应报文
- day04_09 while循环03
- jQuery 中json字符串与对象互转
- centos7开机启动自定义脚本_在Centos 7系统中开启启动自定义脚本的方法
- C++之指针探究(十六):typedef结合函数指针
- Java包数据消息头消息尾_读Socket流时产生阻塞的解决方案(粘包拆包问题)
- 新手必看!电脑文件管理八条小技巧
- opencart配置United States Postal Service快递
- 【拯救赵明】UTM解决网络安全大问题
- UISwitch——开关控件
- jQuery多文件上传的实例
- 【转】如何分析解决Android ANR
热门文章
- babel 转换箭头函数
- SpringBoot之web开发
- Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
- 秩、标量、矢量、矩阵
- 鼠标移到某一行 某一行变色 鼠标移开恢复
- ubuntu 桌面图标设置
- pointnet分割自己的点云数据_点云学习历史文章大汇总
- python nameerror import_Python-ImportError:无法导入名称X
- 用矩阵内积的办法构造迭代次数受控的神经网络1:0.6:0.1=4:3:2
- c 串转string_string::c_str()、string::c_data()及string与char *的正确转换