关于将ASP.NET核心应用程序部署到生产环境(CentOS7)的详细说明
将ASP.NET核心应用程序部署到生产环境(CentOS7)
阅读目录
环境说明准备您的ASP.NET核心应用程序来安装CentOS7并安装。面向CentOS7的. NET Core SDK。在部署ASP.NET核心应用配置Nginx配置主管的同时,已经用Rabbit RPC重构了公司的一个系统(与微信相关)。近期已完成相关测试(逻辑测试和压力测试),接近部署到在线生产环境,从而对CentOS上ASP.NET核心应用的部署方案进行了修补。今天,我想和大家分享一下如何根据生产标准在CentOS上部署ASP.NET核心应用。
环境描述
服务器系统:CentOS 7.2.1511
相关工具:Xshel、Xftp
服务器软件:netcore,nginx,supervisor,policycoreutils-python
准备您的ASP.NET核心应用程序
首先,以可移植模式发布您的应用程序。
在ps:上,我用一个空的Web项目来演示,因为本文主要介绍的是生产环境的部署,与应用无关。
命令是:
dotnet publishc发行版
请确保此发行版应用程序可以在windows上运行,以减少后续问题。
为什么不以自托管方式部署?
自托管发布部署起来要简单得多,那么为什么生产环境要以可移植的方式发布呢?
原因1:性能低于便携式(主)。
原因二:微软给出的建议(时报)。
没有证据,但有图有真相。
参考地址:https://docs . Microsoft.com/zh-cn/dotnet/articles/core/app-types
所以,既然用在生产环境中,就必须追求更高的性能。
安装CentOS7
这个我就不细说了。网上有很多教程。这里我使用Hyper-V来虚拟化CentOS7。
安装。面向CentOS7的. NET Core SDK。
Sudo yum安装lib undle libicu(安装libi Cu依赖项)
curl-SsL-o dotnet.tar.gz https://go.microsoft.com/fwlink/? LinkID=809131(下载sdk压缩包)sudo mkdir-p/opt/dotnet sudo tar zxf dotnet . tar . gz-c/opt/dotnet(解压缩)sudo ln-s/opt/dotnet/dotnet/usr/local/bin(创建链接)
输入dotnet -info查看安装是否成功。
那个。NET Core SDK如果可以执行,则安装成功。
参考文献:https://www.microsoft.com/net/core#centos
部署ASP.NET核心应用程序
将以前发布的文件夹上传到/home/wwwroot/。
在这里,我使用Xftp上传文件。
检查它是否能运行
命令:
dotnet/home/wwwroot/webapplication 1/webapplication 1 . dll
如果出现这些消息,则表明操作成功。
目前,我们无法访问此页面。此时,我们需要部署一个用于转发的web容器。
配置Nginx
安装Nginx
curl-o nginx . rpm http://nginx . org/packages/centos/7/no arch/RPMS/nginx-release-centos-7-0 . El 7 . ngx . no arch . rpm
rpm -ivh nginx.rpmyum安装nginx
安装成功!
输入:systemctl start nginx启动nginx。
输入:systemctl使nginx能够设置nginx的启动(linux在关闭或重新启动时会自动运行nginx,无需将其连接到输入命令)。
配置防火墙
命令:防火墙-cmd-区域=公共-添加-端口=80/TCP-永久
命令:systemctl重新启动防火墙(重新启动防火墙以使配置立即生效)
测试nginx是否可访问。
配置nginx以转发ASP.NET核心应用程序
修改/etc/nginx/conf.d/default.conf文件。
将文件内容替换为
服务器{ listen 80location/{ proxy _ pass http://localhost :5000;proxy _ http _ version 1.1proxy _ set _ header Upgrade $ http _ Upgrade;代理集头连接保持活动;proxy _ set _ header Host $ hostproxy _ cache _ bypass $ http _ upgrade;}}上传到CentOS进行覆盖。
执行:nginx -s重新加载,使其立即生效
运行ASP.NET核心应用程序
命令:
请尝试在此时再次访问dotnet/home/wwwroot/web application 1/web application 1 . dll。
我想哭。经过进一步了解,这个问题是SELinux保护机制造成的,所以我们需要在SELinux的白名单中加入nginx。
接下来,我们通过一些命令来解决这个问题。
yum install policy coreutils-pytonsudo cat/var/log/audit/audit . log | grep nginx | grep denied | audit 2 allow-M mynginxsudo semodule-I mynginx . PP
尝试再次访问。
至此,部署基本完成。
配置守护程序服务(主管)
目前有三个问题
问题1:ASP.NET核心应用程序在外壳中运行。如果关闭shell,您会发现ASP.NET Core应用程序已关闭,这使得该应用程序不可访问。当然我们也不想遇到这种情况,生产环境对这种情况是零容忍的。
问题2:如果ASP.NET Core进程意外终止,则需要手动连接到shell来重新启动,这通常不够及时。
问题3:如果服务器宕机或需要重启,我们仍然需要连接到shell才能启动它。
为了解决这个问题,我们需要一个程序来监控ASP.NET核心应用程序的状态。当应用程序停止运行时,立即重新启动它。这里我们使用Python开发的工具Supervisor。
安装主管
Yum安装python-设置工具轻松安装supervisor配置Supervisor
mkdir/etc/supervisor echo _ supervisor d _ conf/etc/supervisor/superversor d . conf修改supervisord.conf文件并更改文件末尾的配置
修改为
Ps:如果服务已启动,请使用“supervisorctl reload”命令修改配置文件以使其生效
配置ASP.NET核心应用程序的监护人
创建一个包含以下内容的WebApplication1.conf文件
[program : webapplication 1]command=dotnet WebApplication1.dll;运行程序目录的命令=/home/wwwroot/web application 1/;命令执行目录自动重新启动=真;自动重新启动stderr _ log file=/var/log/web application 1 . err . log;错误日志文件stdout _ log file=/var/log/web application 1 . out . log;输出日志文件环境=aspnetcore _ environment=production;过程环境变量user=root流程执行的用户标识stopsignal=INT将文件复制到"/etc/supervisor/conf . d/web application 1 . conf "
运行supervisord以查看它是否生效
supervisord-c/etc/supervisord . confps-ef | grep web application 1
如果DotNet WebApplication1.dll进程存在,说明它运行成功,此时被浏览器访问。
至此,ASP.NET核心应用的配置完成。
配置主管引导
创建一个新的“supervisord.service”文件
# system d(CentOS 7.0)的数据服务# by ET-CS(https://github.com/ET-CS)[Unit]Description=Supervisor守护程序[Service]Type=forkingExecStart=/usr/bin/superversord-c/etc/Supervisor/superversord . confexecstop=/usr/bin/superversorctl shuttonsecreload=/usr/bin/superverstorctl reloaddillmode=进程重新启动=on-failure restart sec=42s[install]by=multi
执行命令:systemctl enable supervisord
执行命令:system ctlis-enabled supervisor d #以验证它是否是引导
试验
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:关于将ASP.NET核心应用程序部署到生产环境(CentOS7)的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。