asp.net core 托管与部署
一、使用IIS在Windows上进行托管
1,部署asp.net core
①检查安装最新的SDK和运行时
https://www.microsoft.com/net/download/windows#/runtime

IIS需要跑asp.net core必须要安装Runtime
②执行 dotnet publish 命令发布程序
③IIS添加网站
④设置程序池

2, Asp.net Core 模块的配置
①web.config的配置
以下 web.config 文件发布用于依赖框架的部署,并配置 ASP.NET Core 模块以处理站点请求:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
以下 web.config 发布用于独立部署:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
①aspNetCore 元素的属性
| 特性 | 描述 | 默认 |
|---|---|---|
arguments |
可选的字符串属性。 processPath 中指定的可执行文件的参数。 |
|
disableStartUpErrorPage |
“true”或“false”。
如果为 true,将禁止显示“502.5 - 进程失败”页面,而会优先显示 web.config 中配置的 502 状态代码页面。 |
false |
forwardWindowsAuthToken |
“true”或“false”。
如果为 true,会将令牌作为每个请求的标头“MS-ASPNETCORE-WINAUTHTOKEN”,转发到在 %ASPNETCORE_PORT% 上侦听的子进程。 该进程负责在每个请求的此令牌上调用 CloseHandle。 |
true |
processPath |
必需的字符串属性。 为 HTTP 请求启动进程侦听的可执行文件的路径。 支持相对路径。 如果路径以 |
|
rapidFailsPerMinute |
可选的整数属性。 指定允许 processPath 中指定的进程每分钟崩溃的次数。 如果超出了此限制,模块将在剩余分钟数内停止启动该进程。 |
10 |
requestTimeout |
可选的 timespan 属性。 指定 ASP.NET Core 模块等待来自 %ASPNETCORE_PORT% 上侦听的进程的响应的持续时间。 在 ASP.NET Core 2.1 或更高版本附带的 ASP.NET Core 模块版本中,使用小时数、分钟数和秒数指定 |
00:02:00 |
shutdownTimeLimit |
可选的整数属性。 检测到 app_offline.htm 文件时,模块等待可执行文件正常关闭的持续时间(以秒为单位)。 |
10 |
startupTimeLimit |
可选的整数属性。 模块等待可执行文件启动端口上侦听的进程的持续时间(以秒为单位)。 如果超出了此时间限制,模块将终止该进程。 模块在收到新请求时尝试重新启动该进程,并在收到后续传入请求时继续尝试重新启动该进程,除非应用在上一回滚分钟内无法启动 rapidFailsPerMinute 次。 |
120 |
stdoutLogEnabled |
可选布尔属性。 如果为 true,processPath 中指定的 进程的 stdout 和 stderr 将重定向到 stdoutLogFile 中指定的文件。 |
false |
stdoutLogFile |
可选的字符串属性。 指定在其中记录 processPath 中指定进程的 stdout 和 stderr 的相对路径或绝对路径。 相对路径与站点根目录相对。 以 |
aspnetcore-stdout |
②设置环境变量
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
ASPNETCORE_ENVIRONMENT:设置环境
CONFIG_DIR:用户定义的环境变量的一个示例,其中开发人员已写入可在启动时读取值的代码以便形成用于加载应用配置文件的路径
在不可访问不受信任的网络(如 Internet)的暂存服务器和测试服务器上,仅将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development。
3,app_offline.htm文件
将此文件放到程序根目录(不是wwwroot下的目录),存在 app_offline.htm 文件时,ASP.NET Core 模块会通过发送回 app_offline.htm 文件的内容来响应请求。 删除 app_offline.htm 文件后,下一个请求将启动应用
二、CentOS7部署asp.net core
1,安装Nginx
①添加Nginx存储库
要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令: sudo yum install epel-release
如果出现以下错误:

解决方法,输入一下两个命令:
yum clean all
yum makecache
②安装Nginx
现在Nginx存储库已经安装在您的服务器上,使用以下yum命令安装Nginx : sudo yum install nginx
在对提示回答yes后,Nginx将在服务器上完成安装
③启动Nginx
Nginx不会自行启动。要运行Nginx,请输入: sudo systemctl start nginx
如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
④如果想在系统启动时启用Nginx。请输入以下命令:
sudo systemctl enable nginx
其他命令:
systemctl disable nginx #禁止开机启动
systemctl status nginx #查看运行状态
systemctl restart nginx #重启服务
nginx -s reload 重启nginx
2,安装asp.net core运行时
https://www.microsoft.com/net/download/linux-package-manager/centos/runtime-current
3,配置nginx设置反向代理
①修改配置文件 /etc/nginx/nginx.conf
server {
listen 8054;
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;
}
}
修改完成之后执行 nginx -s reload 重启nginx
②由于SELinux保护机制所导致,我们需要将Nginx添加至SELinux的白名单,需要执行命令
yum install policycoreutils-python sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx sudo semodule -i mynginx.pp
③启动
第一步 dotnet <项目程序集dll>
第二步访问http://ip:8054就可以访问到网站了
4,Supervisor配置守护进程
使用Supervisor首先我们的asp.net core项目进程,实时监控进程状态,异常退出时能自动重启
①安装Supervisor
yum install python-setuptools
easy_install supervisor 请更换root用户,执行如下命令安装Supervisor:
②配置Supervisor
运行supervisord服务的时候,需要指定Supervisor配置文件,如果没有显示指定,默认会从以下目录中加载:
$CWD/supervisord.conf #$CWD表示运行supervisord程序的目录
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)
所以先要创建一个supervisor目录 mkdir /etc/supervisor
③加载目录有了,然后通过echo_supervisord_conf程序(用来生成初始配置文件)来初始化一个配置文件: echo_supervisord_conf > /etc/supervisor/supervisord.conf
④打开supervisord.conf文件,需要修改底部的配置,改为:
[include]
files = conf.d/*.conf
把注释去除、设置/etc/supervisor/conf.d为Supervisor进程配置文件加载目录
⑥创建进程配置加载目录: mkdir /etc/supervisor/conf.d
⑦在 /etc/supervisor/conf.d 目录下创建一个 netcore.conf 文件
⑧配置netcore.conf 文件
[program:SignalRDemo] ;自定义进程名称
command=dotnet SignalRDemo.dll ;程序启动命令
directory=/usr/share/nginx/publish ;命令执行的目录
autostart=true ;在Supervisord启动时,程序是否启动
autorestart=true ;程序退出后自动重启
startretries=5 ;启动失败自动重试次数,默认是3
startsecs=1 ;自动重启间隔
user=root ;设置启动进程的用户,默认是root
priority=999 ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/SignalRDemo.log ;标准错误日志
stdout_logfile=/var/log/SignalRDemo.log ;标准输出日志
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
stopsignal=INT ;请求停止时用来杀死程序的信号
⑨启动Supervisor服务,命令如下: supervisord -c /etc/supervisor/supervisord.conf
这时,在会发现我们部署的网站程序不在shell中通过dotnet xxx.dll启动,同样可以访问。
⑩设置Supervisor开机启动
第一步:在 /usr/lib/systemd/system/ 目录下创建 supervisor.service 文件
supervisor.service 文件内容如下:
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target
第二步:设置开机启动: systemctl enable supervisor
第三部:验证是否成功: systemctl is-enabled supervisor
如果输出enabled则表示设置成功,也可重启服务器验证。
5,Supervisorctl管理进程
进入supervisorctl交互终端: supervisorctl
输入help查询帮助:

问题:1,"unix:///tmp/supervisor.sock no such file" 错误处理
6,Supervisorctl错误
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
StackOverflowhttp://serverfault.com/questions/114477/supervisor-http-server-port-issue
sudo unlink /tmp/supervisor.sock
sudo unlink /var/run/supervisor.sock
This .sock file is defined in /etc/supervisord.conf's [unix_http_server]'s file config value (default is /tmp/supervisor.sock or /var/run/supervisor.sock).
Hope this helps someone in the future.
6,nginx代理signalR站点
编辑/etc/nginx/nginx.conf文件
map $http_upgrade $connection_upgrade{
default upgrade;
‘’ close;
}
server {
listen ;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
asp.net core 托管与部署的更多相关文章
- ASP.NET Core托管和部署Linux实操演练手册
一.课程介绍 ASP.NET Core 是一种全新的跨平台开源 .NET 框架,能够在 IIS.Nginx.Apache.Docker 上进行托管或在自己的进程中进行自托管. 作为一个.NET Web ...
- 翻译 - ASP.NET Core 托管和部署 - 在 Linux 上使用 Nginx 托管 ASP.NET Core 网站
翻译自 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0 本文介 ...
- asp.net core 2.1 部署IIS(win10/win7)
asp.net core 2.1 部署IIS(win10/win7) 概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器 ...
- ASP.NET Core使用TopShelf部署Windows服务
asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是 ...
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- ASP.NET Core 1.0 部署 HTTPS
ASP.NET Core 1.0 部署 HTTPS ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1) 提示 更新时间:2016年01月23日. 在目前介 ...
- ASP.NET Core开发期间部署到IIS自定义主机域名并附加进程调试
在.NET Framework环境下,我们经常会这么做 把一个web项目不经过发布直接部署到IIS里去,配置上主机名,修改一下hosts文件,就可以用自定义的域名来访问我们的应用程序,使用附加到进程( ...
- Asp.Net Core在CentOS部署与注意
部署具体步骤参考:将ASP.NET Core应用程序部署至生产环境中(CentOS7) 1.wwwroot是放静态文件的,Startup的配置里面要app.UseStaticFiles(); 2.在不 ...
随机推荐
- K-means聚类算法原理和C++实现
给定训练集$\{x^{(1)},...,x^{(m)}\}$,想把这些样本分成不同的子集,即聚类,$x^{(i)}\in\mathbb{R^{n}}$,但是这是个无标签数据集,也就是说我们再聚类的时候 ...
- jmeter中实现java请求实战日志
view code public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Co ...
- 【转】C语言正确使用extern关键字
利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数,下面就结合具体的实例,分类说明一下. 一.引用同一个文件中的变量 #include<stdio.h> int f ...
- 转载:编译安装Nginx(1.5.1)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19618.html 1.5 configure详解 可以看出,configure命令至关重要,下文将详细介绍如何使用configure ...
- shell脚本收集服务器基本信息并入库
# cat check_all.sh #!/bin/bash #create by hexm @2016.6 #date=`date +%Y%m%d` #DIST_FILE=/app/healthch ...
- react之shouldComponentUpdate简单定制数据更新
import React from 'react' class Demo extends React.Component{ constructor(props){ super(props) this. ...
- 【mysql】表备份
几个讲得比较好的资料: http://www.cnblogs.com/liangshaoye/p/5464794.html:讲解了热备,温备,冷备,增量备份,差异备份等多种概念. http://www ...
- 约数 求反素数bzoj1053 bzoj1257
//约数 /* 求n的正约数集合:试除法 复杂度:O(sqrt(n)) 原理:扫描[1,sqrt(N)],尝试d能否整除n,若能,则N/d也能 */ ],m=; ;i*i<=n;i++){ ){ ...
- 树链剖分边权模板spoj375
树链剖分是树分解成多条链来解决树上两点之间的路径上的问题 如何求出树链:第一次dfs求出树上每个结点的大小和深度和最大的儿子,第二次dfs就能将最大的儿子串起来并hash(映射)到线段树上(或者其他数 ...
- poj12482 扫描线+lazy-tag
采用扫描线的思想,其实是区间更新的题目 题解链接https://blog.csdn.net/shiqi_614/article/details/7819232 注意处理细节:1)因为边框上的点不算,所 ...