详解将ASP.NET Core应用程序部署至生产环境中(C

准备你的ASP.NET Core应用程序

安装CentOS7

安装.NET Core SDK for CentOS7。

部署ASP.NET Core应用程序

配置Nginx

配置守护服务(Supervisor)

这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试、压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天就跟大家分享一下如何将ASP.NET Core应用程序以生产的标准部署在CentOS上。

环境说明

服务器系统:CentOS 7.2.1511

相关工具:Xshel、Xftp

服务器软件软件:.netcore、nginx、supervisor、policycoreutils-python

准备你的ASP.NET Core应用程序

首先将你的应用程序以便携的模式进行发布。

ps:这边我使用一个空的Web项目来进行演示,因为本篇主要介绍生产环境的部署,与应用无关。

命令为:

dotnet publish –c release

详解将ASP.NET Core应用程序部署至生产环境中(C

确保这份发布应用可以在windows上运行,以减少后续的问题。

详解将ASP.NET Core应用程序部署至生产环境中(C

为什么不用自宿主的方式进行部署?

自宿主的发布方式进行部署会简单很多,为什么生产环境要使用便携的方式进行发布呢?

原因1:性能比便携式的低(主)。

原因2:微软给出的建议(次)。

口说无凭,有图有真相。

详解将ASP.NET Core应用程序部署至生产环境中(C

参考地址:https://docs.microsoft.com/zh-cn/dotnet/articles/core/app-types

so,既然是用于生产环境的,当然我们要追求更高的性能。

安装CentOS7

这个就不细说了,网上教程很多,这边我使用了Hyper-V来虚拟化了CentOS7。

安装.NET Core SDK for CentOS7。

sudo yum install libunwind libicu

(安装libicu依赖)

详解将ASP.NET Core应用程序部署至生产环境中(C

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(创建链接)

详解将ASP.NET Core应用程序部署至生产环境中(C

输入 dotnet –info 来查看是否安装成功

详解将ASP.NET Core应用程序部署至生产环境中(C

如果可以执行则表明.NET Core SDK安装成功。

参考资料:

部署ASP.NET Core应用程序

上传之前发布的文件夹至/home/wwwroot/。

这边我使用了Xftp进行文件的上传。

详解将ASP.NET Core应用程序部署至生产环境中(C

检查是否能够运行

命令:

dotnet /home/wwwroot/WebApplication1/WebApplication1.dll

详解将ASP.NET Core应用程序部署至生产环境中(C

如果出现这些信息则表示成功运行。

这时候我们是无法访问到这个页面的,这时候我们需要部署一个web容器来进行转发。

配置Nginx

安装Nginx

curl -o nginx.rpm

详解将ASP.NET Core应用程序部署至生产环境中(C

rpm -ivh nginx.rpm yum install nginx

详解将ASP.NET Core应用程序部署至生产环境中(C

安装成功!

输入:systemctl start nginx 来启动nginx。

输入:systemctl enable nginx 来设置nginx的开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令)。

配置防火墙

命令:firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口)

命令:systemctl restart firewalld(重启防火墙以使配置即时生效)

测试nginx是否可以访问。

详解将ASP.NET Core应用程序部署至生产环境中(C

配置nginx对ASP.NET Core应用的转发

修改 /etc/nginx/conf.d/default.conf 文件。

将文件内容替换为

server { listen 80; location / { proxy_pass :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; } }

上传至CentOS进行覆盖。

执行:nginx –s reload 使其即时生效

运行ASP.NET Core应用程序

详解将ASP.NET Core应用程序部署至生产环境中(C

命令:

dotnet /home/wwwroot/WebApplication1/WebApplication1.dll

这时候再次尝试访问。

详解将ASP.NET Core应用程序部署至生产环境中(C

想哭的心都有。。。经过后续了解,这个问题是由于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

详解将ASP.NET Core应用程序部署至生产环境中(C

再次尝试访问。

详解将ASP.NET Core应用程序部署至生产环境中(C

至此基本完成了部署。

配置守护服务(Supervisor)

目前存在三个问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjyyjj.html