Centos7.2部署.Net Core2.0 WebApi

部署前准备

1.VisualStudio2017+.netcore2.0SDK

2.Centos7.2

3.SecureCRT,Xftp(根据自己喜好)

 

创建WebApi项目

修改Program.cs中的BuildWebHost方法为(不改也可,core默认使用Kestrel作为Server)

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseUrls("http://localhost:5000")
                .UseStartup<Startup>()
                .Build();

 尝试使用IIS Express启动应用程序,启动项配置在

 一切正常,然后我们发布程序,右键项目-发布-发布到文件夹,发布完成后的应用程序位置在\bin\Release\CoreTest.WebApi\

 Xftp注意两处连接选项,使用Xftp将发布好的程序上传到服务器,位置在/home/wwwroot/

 

安装CentOS7下.NET Core SDK

(参考https://www.microsoft.com/net/core#linuxcentos)

sudo yum install libunwind libicu

curl -sSL -o dotnet.tar.gz https://aka.ms/dotnet-sdk-2.0.0-linux-x64 

mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet

sudo ln -s /root/dotnet/dotnet /usr/local/bin

输入命令dotnet --info查看sdk的安装信息,如下图

 输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll  出现下图信息表明运行成功,我们的程序正在监听localhost:5000,此时还不能通过外网访问,我们使用Nginx将外部请求转发到应用程序上

安装Centos7下Nginx

curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 
rpm -ivh nginx.rpm 
yum install nginx

启动: systemctl start nginx

设置开机启动:systemctl enable nginx

此时通过IP访问,出现Nginx的默认访问页面,表明安装成功

修改Nginx的配置文件,转发外部请求到应用程序

vi /etc/nginx/conf.d/default.conf

键入I 进入输入模式

将文件内容替换为

server {
    listen 80;
    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;
    }
}

 然后按Esc退出输入模式,进入命令模式,输入:wq回车,保存并退出

 保存成功后

 

 重新加载service nginx reload

 输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll启动应用程序

 此时再访问接口/api/values(创建项目的时候自带的)    Nginx监听80端口接收外部请求并将请求转发给应用程序

 

配置守护服务(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
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

vi /etc/supervisor/supervisord.conf

修改supervisord.conf文件,将文件尾部的配置

修改成(注意前面的两个分号去掉)

Esc后:wq回车,保存退出ps:如果服务已启动,修改配置文件后可用supervisorctl reload命令来使其生效

监听应用程序配置

创建conf.d文件夹:mkdir /etc/supervisor/conf.d

创建并编辑CoreTest.conf配置文件:vi /etc/supervisor/conf.d/CoreTest.conf

[program:CoreTest]
command=/bin/bash -c "dotnet CoreTest.WebApi.dll"
directory=/home/wwwroot/CoreTest.WebApi/
autorestart=true
stderr_logfile=/var/log/CoreTest.err.log
stdout_logfile=/var/log/CoreTest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root 
stopsignal=INT

 运行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf

ps -ef | grep CoreTest

 出现下图所示,则表示配置成功

此时不用手动dotnet CoreTest.WebApi.dll启动应用程序也能访问(由Supervisor进程在后台监听)

配置Supervisor开机启动

新建一个“supervisord.service”文件 vi /usr/lib/systemd/system/supervisord.service

# dservice 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 shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

设置开机启动:systemctl enable supervisord

验证开机启动是否成功:systemctl is-enabled supervisord

 重启服务器:reboot  此时不能访问

 

重启完成后,所有服务自动开启,正常访问

 部分内容参考:http://www.cnblogs.com/ants/p/5732337.html

 

 

标签智能推荐:

ASP.NET Core基于Socket实现消息推送实战演练

于ASP.NET&nbsp;Core中如何实现消息推送,我们已经学过了《ASP.NET&nbsp;Core基于SignalR实现消息推送实战演练》、《ASP.NET&nbsp;Core基于WebSocket实现消息推送实战演练》,《ASP.NET&nbsp;Core基于SuperWebSocket实现消息推送实战演练》今天我们要学习的是如何通过微软原生的System.Net.Sockets来实现消

ASP.NET Core - 开篇

&nbsp;由来ASP.NETCore是一个跨平台的高性能开源框架,ASP.NET&nbsp;Core第一次出现在我们眼前是以ASP.NETvNext命名的,然后又重新命名为ASP.NET5,为了表明它并不是ASP.NET的简单迭代升级,最终命名为ASP.NETCore。这是一个重新设计的Web开源框架,它最重要的特性是不再依赖IIS(依然可以部署在IIS上),支持跨平台,可以在任何平台上部署,这

简述关于ASP.NET MVC与.NET CORE 的区别

简述关于ASP.NETMVC与.NETCORE的区别1、关于ASP.NET关于MVC刚开始接触这个技术的时候我经常不理解他们的名字,我相信许多学ASP.NET开发人员开始接触MVC应该也和我一样产生很多为什么,也会误认为认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,深入学习后我才知道事实上ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级架

为支持ASP.NET5平台,Jexus再添新举措

x/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的支持。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是,由于ASP.NET5与之前的ASP.NET相比,不管是从运行环境还是部署方式都发生了革命性的变化,Jexus很难像“前ASP.NET时代”那样,把ASP.NET

.NET平台系列目录

NET平台发展历程以及.NET框架技术。包含.NETFramework、.NETCore、Xamarin、.NETStandrad等技术与应用。1、.NET平台系列2、.NET生态系列.NET生态系列1:.NET基金会(.NETFoundation&nbsp;)2021-7-23&nbsp;《ASP.NETCore修改开源协议为MIT,.NET全平台MIT协议开源了》.NET生态系列2:.NETC

.NET平台系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的选择建议

re/.NET5+中不提供的技术时,才需要使用.NETFramework。.NETFramework技术不可用于.NETCore/.NET5+某些.NETFramework技术在.NETCore/.NET5+中不可用。以下列表显示无法在.NETCore/.NET5+中找到的最常见技术:ASP.NETWeb窗体应用程序:ASP.NETWeb窗体仅在.NETFramework中可用。ASP.NETCo

ASP.NET Core系列(一): .NET Core简介及安装开发环境

跨平台的,.NET因为不具有跨平台的特性,被越来越多的开发者诟病,之前有各种间接的跨平台的方案,比如mono。但是由于各种兼容问题,最终.NETCore出现了,它可以让程序在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。同时,微软也正在逐步将.NETCore的相关技术开源,相信.netcore实现稳定高效的跨平台。所以,最近有

Asp.Net Core-----简介与安装

录Asp.NetCore-----简介与安装Asp.NetCore简介ASP.NETCore是一个全新的开源、跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web应用,IoT(InternetOfThings,物联网)应用和移动后端等。ASP.NETCore可以运行在.NETCore或完整的.NETFramework之上,其架构为发布到云端或本地运行的应用提供了一个最佳的开发框架,

.NET 开源项目集合

ed&nbsp;-.NET项目模板,包裹API,GraphQL,Orleans。&nbsp;aspnet-core-react-template&nbsp;-ASP.NETCore/ReactSPA应用程序模板。&nbsp;AspNetCoreSpa&nbsp;-Asp.NetCore和Angular8SPAFullstack应用程序模板。&nbsp;ASP.NET-MVC-Template&nb

Github上优秀的.NET Core开源项目的集合

;-StyleCop规则实现的.NET编译器平台。MetricsAppMetrics&nbsp;-用于记录和报告应用程序中的指标。Audit.NET&nbsp;-一个可扩展的框架,用于审核.NET和.NETCore中的执行操作。BenchmarkDotNet&nbsp;-用于基准测试的强大.NET库。coverlet&nbsp;-Coverlet是.NET的跨平台代码覆盖框架。MiniCover&