将ASP.NETCore应⽤程序部署⾄⽣产环境中(CentOS7)
这段时间在使⽤重构公司的⼀套系统(相关),⽽最近相关检验(逻辑测试、压⼒测试)已经完成,接近部署⾄线上⽣产环境从⽽捣⿎了ASP.NET Core应⽤程序在CentOS上的部署⽅案,今天就跟⼤家分享⼀下如何将ASP.NET Core应⽤程序以⽣产的标准部署在CentOS上。
环境说明
服务器系统:CentOS 7.2.1511
相关⼯具:Xshel、Xftp
服务器软件软件:core、nginx、supervisor、policycoreutils-python
准备你的ASP.NET Core应⽤程序
⾸先将你的应⽤程序以便携的模式进⾏发布。
ps:这边我使⽤⼀个空的Web项⽬来进⾏演⽰,因为本篇主要介绍⽣产环境的部署,与应⽤⽆关。
命令为:dotnet publish –c release
具体的可以看:,这篇博⽂介绍了以便携与⾃宿主⽅式发布web应⽤。
确保这份发布应⽤可以在windows上运⾏,以减少后续的问题。
为什么不⽤⾃宿主的⽅式进⾏部署?
⾃宿主的发布⽅式进⾏部署会简单很多,为什么⽣产环境要使⽤便携的⽅式进⾏发布呢?
原因1:性能⽐便携式的低(主)。
原因2:微软给出的建议(次)。
⼝说⽆凭,有图有真相。
so,既然是⽤于⽣产环境的,当然我们要追求更⾼的性能。
安装CentOS7
这个就不细说了,⽹上教程很多,这边我使⽤了Hyper-V来虚拟化了CentOS7。
安装.NET Core SDK for CentOS7。
sudo yum install libunwind libicu(安装libicu依赖)
sudo mkdir -p /opt/dotnet && sudo tar zxf -C /opt/dotnet(解压缩)
sudo ln -s /opt/dotnet/dotnet /usr/local/bin(创建链接)
输⼊ dotnet –info 来查看是否安装成功
如果可以执⾏则表明.NET Core SDK安装成功。
部署ASP.NET Core应⽤程序
上传之前发布的⽂件夹⾄/home/wwwroot/。
这边我使⽤了Xftp进⾏⽂件的上传。
检查是否能够运⾏
命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll
如果出现这些信息则表⽰成功运⾏。
这时候我们是⽆法访问到这个页⾯的,这时候我们需要部署⼀个web容器来进⾏转发。
配置Nginx
安装Nginx
rpm -ivh nginx.rpm
yum install nginx
安装成功!
输⼊:systemctl start nginx 来启动nginx。
输⼊:systemctl enable nginx 来设置nginx的开机启动(linux宕机、重启会⾃动运⾏nginx不需要连上去输⼊命令)。
配置防⽕墙
命令:firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端⼝)
命令:systemctl restart firewalld(重启防⽕墙以使配置即时⽣效)
测试nginx是否可以访问。
配置nginx对ASP.NET Core应⽤的转发
修改 /etc/nginx/conf.f ⽂件。
将⽂件内容替换为
上传⾄CentOS进⾏覆盖。
执⾏:nginx –s reload 使其即时⽣效
运⾏ASP.NET Core应⽤程序
命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll
这时候再次尝试访问。
想哭的⼼都有。。。经过后续了解,这个问题是由于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
再次尝试访问。
⾄此基本完成了部署。
配置守护服务(Supervisor)
⽬前存在三个问题
问题1:ASP.NET Core应⽤程序运⾏在shell之中,如果关闭shell则会发现ASP.NET Core应⽤被关闭,从⽽导致应⽤⽆法访问,这种情况当然是我们不想遇到的,⽽且⽣产环境对这种情况是零容忍的。
问题2:如果ASP.NET Core进程意外终⽌那么需要⼈为连进shell进⾏再次启动,往往这种操作都不够及时。
问题3:如果服务器宕机或需要重启我们则还是需要连⼊shell进⾏启动。
为了解决这个问题,我们需要有⼀个程序来监听ASP.NET Core 应⽤程序的状况。在应⽤程序停⽌运⾏的时候⽴即重新启动。这边我们⽤到了Supervisor这个⼯具,Supervisor使⽤Python开发的。
安装Supervisor
yum install python-setuptools
easy_install supervisor
配置Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/f
修改f⽂件,将⽂件尾部的配置
修改为
ps:如果服务已启动,修改配置⽂件可⽤“supervisorctl reload”命令来使其⽣效
配置对ASP.NET Core应⽤的守护
创建⼀个 f⽂件,内容⼤致如下
[program:WebApplication1]
command=dotnet WebApplication1.dll ; 运⾏程序的命令
directory=/home/wwwroot/WebApplication1/ ; 命令执⾏的⽬录
autorestart=true ; 程序意外退出是否⾃动重启
stderr_logfile=/var/log ; 错误⽇志⽂件
stdout_logfile=/var/log/WebApplication1.out.log ; 输出⽇志⽂件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执⾏的⽤户⾝份
stopsignal=INT
将⽂件拷贝⾄:“/etc/supervisor/conf.f”下
运⾏supervisord,查看是否⽣效
supervisord -c /etc/f
ps -ef | grep WebApplication1
如果存在dotnet WebApplication1.dll 进程则代表运⾏成功,这时候在使⽤浏览器进⾏访问。
⾄此关于ASP.NET Core应⽤程序的守护即配置完成。
配置Supervisor开机启动
nginx停止命令新建⼀个“supervisord.service”⽂件
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/f
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
将⽂件拷贝⾄:“/usr/lib/systemd/system/supervisord.service”
执⾏命令:systemctl enable supervisord
执⾏命令:systemctl is-enabled supervisord #来验证是否为开机启动测试
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论