一、使用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 模块版本中,使用小时数、分钟数和秒数指定 requestTimeout

00:02:00
shutdownTimeLimit

可选的整数属性。

检测到 app_offline.htm 文件时,模块等待可执行文件正常关闭的持续时间(以秒为单位)。

10
startupTimeLimit

可选的整数属性。

模块等待可执行文件启动端口上侦听的进程的持续时间(以秒为单位)。 如果超出了此时间限制,模块将终止该进程。 模块在收到新请求时尝试重新启动该进程,并在收到后续传入请求时继续尝试重新启动该进程,除非应用在上一回滚分钟内无法启动 rapidFailsPerMinute 次。

120
stdoutLogEnabled

可选布尔属性。

如果为 true,processPath 中指定的 进程的 stdout 和 stderr 将重定向到 stdoutLogFile 中指定的文件。

false
stdoutLogFile

可选的字符串属性。

指定在其中记录 processPath 中指定进程的 stdout 和 stderr 的相对路径或绝对路径。 相对路径与站点根目录相对。 以 . 开头的任何路径均与站点根目录相对,所有其他路径被视为绝对路径。 路径中提供的任何文件夹都必须存在,以便模块创建日志文件。 使用下划线分隔符,将时间戳、进程 ID 和文件扩展名 (.log) 添加到 stdoutLogFile 路径的最后一段。 如果 .\logs\stdout 作为值提供,则在示例 stdout 日志使用进程 ID 1934 于 2018 年 2 月 5 日 19:41:32 保存时,将在 logs 文件夹中保存为 stdout_20180205194132_1934.log。

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 托管与部署的更多相关文章

  1. ASP.NET Core托管和部署Linux实操演练手册

    一.课程介绍 ASP.NET Core 是一种全新的跨平台开源 .NET 框架,能够在 IIS.Nginx.Apache.Docker 上进行托管或在自己的进程中进行自托管. 作为一个.NET Web ...

  2. 翻译 - 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 本文介 ...

  3. 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服务器 ...

  4. ASP.NET Core使用TopShelf部署Windows服务

    asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是 ...

  5. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  6. 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= ...

  7. 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日. 在目前介 ...

  8. ASP.NET Core开发期间部署到IIS自定义主机域名并附加进程调试

    在.NET Framework环境下,我们经常会这么做 把一个web项目不经过发布直接部署到IIS里去,配置上主机名,修改一下hosts文件,就可以用自定义的域名来访问我们的应用程序,使用附加到进程( ...

  9. Asp.Net Core在CentOS部署与注意

    部署具体步骤参考:将ASP.NET Core应用程序部署至生产环境中(CentOS7) 1.wwwroot是放静态文件的,Startup的配置里面要app.UseStaticFiles(); 2.在不 ...

随机推荐

  1. winform程序生成条形码并且并且保存到本地文件中。

    今天公司让做一个输入数字.字母生成条形码并且可以以图片格式保存到本地.当看到这个需求时候感觉很搞笑,明明可以用文本框搞定的东西非得做个程序.哎,寄人篱下,不多说了,这就是养兵千日用兵一时. 我在网上找 ...

  2. weblogic中部署SSH项目遇到的坑

    总结将SSH项目部署到weblogic遇到的坑.项目中是SSH,另外还用到了webservice.quartz等框架.在tomcat部署是可以的,现在总结部署到weblogic遇到的坑. 在这里说一下 ...

  3. WinEdt 和 Sumatra 双向关联设置

    (1)配置PDF Viewer,在菜单栏选Options -> Execution Modes ->PDF Viewer ->点击右侧的"Browse"按钮,在弹 ...

  4. C++学习7-面向对象编程基础(多态性与虚函数、 IO文件流操作)

    多态 多态性是指对不同类的对象发出相同的消息将返回不同的行为,消息主要是指类的成员函数的调用,不同的行为是指不同的实现: 函数重载 函数重载是多态性的一种简单形式,它是指允许在相同的作用域内,相同的函 ...

  5. eclipse中运行项目出现空白错误提示解决办法

    别人所给出的解决办法:https://blog.csdn.net/fzdg2019/article/details/79384539 两个办法: 方法一:配置环境变量 方法二:修改eclipse安装目 ...

  6. eclipse自定义工具栏

    设置:1.Window2.Customize Perspective说明:Tool Bar Visibility定义菜单栏,Shortcuts定义右键new菜单

  7. Python poll IO多路复用

    一.poll介绍 poll本质上和select没有区别,只是没有了最大连接数(linux上默认1024个)的限制,原因是它基于链表存储的. 本人的另一篇博客讲了 python  select : ht ...

  8. centos6.5下编译安装mariadb-10.0.20

    源码编译安装mariadb-10.0.20.tar.gz 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关 ...

  9. sipML5聊天功能实现

    一.环境说明:在阅读sipML5的API文档时,发现它具有聊天的功能,于是在sipML5的源码中进行设定,实现了注册之后可以英文聊天(中文聊天需要在FreeSWITCh中进行设定). 二.具体配置: ...

  10. Ex 5_32 一台服务器当前有n个等待服务的顾客...第八次作业

    设第i个客户需要等待的时间为ti,则n个客户需要总的等待时间为 ,因此,要使T最小,则要使 即可,所以,对所有的ti按升序进行排序和服务将得到最小的等待时间. package org.xiu68.ch ...