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.在不 ...
随机推荐
- SpringMVC的JSON数据交互(七)-@Response,@RestController,@RequestBody用法
1.@RequestBody (自动将请求的数据封装为对象) 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConve ...
- curl命令下载jdk
第一步:找到下载地址 第二步:下载
- Windows Server2008各版本区别
Windows Server 2008 是专为强化下一代网络.应用程序和 Web 服务的功能而设计,是有史以来最先进的 Windows Server 操作系统.拥有 Windows Server 20 ...
- Raw Socket vs Stream Socket vs datagram socket,原始套接字与流式套接字与数据报套接字
https://opensourceforu.com/2015/03/a-guide-to-using-raw-sockets/ In this tutorial, lets take a look ...
- saltstack自动化运维系列12配置管理安装redis-3.2.8
一.准备redis自动化配置的文件(即安装一遍redis,然后获取相关文件和配置在salt中执行上线) 1.源码安装redis3.2.8并注册为系统服务 安装依赖yum install -y tcl ...
- html dom之iframe对象
当从父页面中需要获取使用iframe嵌入的内容时,可以使用图中后面的两个属性 var sonDocument = document.getElementById('iframe_id').conten ...
- 560. Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarra ...
- Lodash JavaScript 实用工具库
地址:https://www.lodashjs.com/ Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.
- Java基础93 JDBC连接MySQL数据库
本文知识点(目录): 1.什么是jdbc 2.jdbc接口的核心API 3.使用JDBC技术连接MySQL数据库的方法 4.使用Statement执行sql语句(DDL.DML. ...
- 深度学习Bible学习笔记:第六章 深度前馈网络
第四章 数值计算(numerical calculation)和第五章 机器学习基础下去自己看. 一.深度前馈网络(Deep Feedfarward Network,DFN)概要: DFN:深度前馈网 ...