Centos7.2部署.Net Core2.0 WebApi

2021-09-16 21:12

阅读:650

标签:file   tor   位置   .gz   好的   请求转发   自动   viso   ring   部署前准备 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() .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.onf 修改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          Centos7.2部署.Net Core2.0 WebApi标签:file   tor   位置   .gz   好的   请求转发   自动   viso   ring   原文地址:http://www.cnblogs.com/GreedyL/p/7422796.html


评论


亲,登录后才可以留言!