虚拟机 CentOS+Nginx+Supervisor 部署Net Core

  • Post author:
  • Post category:其他




一、

CentOS配置.NET

Core环境


官网教程

sudo rpm -Uvh

https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm


sudo yum update

sudo yum install dotnet-sdk-2.2



二、

创建.NET

Core项目(两种方式)



1、通过命令创建

dotnet new webapi -n ProjectName

进入ProjectName,执行dotnet run



2、通过Visual Studio创建发布,WinSCP上传到CentOS

进入上传目录,执行dotnet run



三、安装Nginx


参考



Step1:添加Nginx存储库

要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令:

sudo yum install epel-release


Step2:安装Nginx

现在Nginx存储库已经安装在您的服务器上,请使用以下yum命令安装Nginx:

sudo yum install nginx


Step3:启动Nginx

Nginx不会自行启动。要运行Nginx,请输入:

sudo systemctl start nginx

如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:

sudo firewall-cmd –permanent –zone=public –add-service=http

sudo firewall-cmd –permanent –zone=public –add-service=https

sudo firewall-cmd –reload

此时,可以在浏览器中访问服务器的IP地址http://192.168.83.128来验证Nginx是否成功运行。

如果拒绝访问,考虑服务器80端口是否开放。可尝试通过下面两条命令开放80端口、重启防火墙使修改即时生效。

firewall-cmd –zone=public –add-port=80/tcp –permanent

systemctl restart firewalld



设置Nginx开机启动

避免开机需要手动开启Nginx,可以通过如下快捷命令把Nginx配置成系统服务,并设置为开机启动:

systemctl enable nginx #设置开机启动

其他命令:

systemctl disable nginx #禁止开机启动

systemctl status nginx #查看运行状态

systemctl restart nginx #重启服务



修改Nginx配置文件

新建一个配置文件netcore.conf,内容如下:

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;

}

}

保存并上传到Nginx的配置加载目录/etc/nginx/conf.d,最后执行命令nginx -s reload重启Nginx即可。


在本地浏览器上访问服务器地址,运行结果如下:

在这里插入图片描述

这个问题是由于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配置守护进程

Supervisor是用Python开发的Linux/Unix系统下的一个进程管理工具。它可以使进程脱离终端,变为后台守护进程(daemon)。实时监控进程状态,异常退出时能自动重启。

Supervisor不支持任何版本的Window系统;仅支持在Python2.4或更高版本,但不能在任何版本的Python 3下工作。

其主要组成部分:

supervisord:Supervisor的守护进程服务,用于接收进程管理命令;

supervisorctl:Supervisor命令行工具,用于和守护进程通信,发送管理进程的指令;

Web Server:Web端进程管理工具,提供与supervisorctl类似功能,管理进程;

XML-RPC Interface:提供XML-RPC接口,请参阅

XML-RPC API文档

1.安装Supervisor

联网状态下,官方推荐首选安装方法是使用easy_install,它是setuptools(Python包管理工具)的一个功能。所以先执行如下命令安装 setuptools:

yum install python-setuptools

请更换root用户,执行如下命令安装Supervisor:

easy_install supervisor

2.配置Supervisor#

运行supervisord服务的时候,需要指定Supervisor配置文件,如果没有显示指定,默认会从以下目录中加载:


KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 23: …ervisord.conf #̲

CWD表示运行supervisord程序的目录

$CWD/etc/supervisord.conf

/etc/supervisord.conf

/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)

…/etc/supervisord.conf (Relative to the executable)

…/supervisord.conf (Relative to the executable)

所以,先通过如下命令创建目录,以便让Supervisor成功加载默认配置:

mkdir /etc/supervisor

加载目录有了,然后通过echo_supervisord_conf程序(用来生成初始配置文件)来初始化一个配置文件:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

打开supervisord.conf文件,可以看到echo_supervisord_conf已经帮我们初始化好了一个样例配置,我们需要简单修改一下。

尾部找到如下文本片段:

;[include]

;files = relative/directory/*.ini

改为:

[include]

files = conf.d/*.conf

即,把注释去除、设置/etc/supervisor/conf.d为Supervisor进程配置文件加载目录。

这样,Supervisor会自动加载该目录下.conf后缀的文件作为共同服务配置。Supervisor管理的每个进程单独写一个配置文件放在该目录下,supervisord.conf配置文件中保留公共配置。

创建进程配置加载目录:

mkdir /etc/supervisor/conf.d

接下来就需要为我们已经部署的ASP .NET Core程序的宿主进程创建一个进程配置文件netcore.conf,保存并上传到/etc/supervisor/conf.d目录。

配置文件netcore.conf内容如下:

[program:Scorpio.WebApi] ;自定义进程名称

command=dotnet Scorpio.WebApi.dll ;程序启动命令

directory=/home/wwwroot/scorpio ;命令执行的目录

autostart=true ;在Supervisord启动时,程序是否启动

autorestart=true ;程序退出后自动重启

startretries=5 ;启动失败自动重试次数,默认是3

startsecs=1 ;自动重启间隔

user=root ;设置启动进程的用户,默认是root

priority=999 ;进程启动优先级,默认999,值小的优先启动

stderr_logfile=/var/log/Scorpio.WebApi.err.log ;标准错误日志

stdout_logfile=/var/log/Scorpio.WebApi.out.log ;标准输出日志

environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量

stopsignal=INT ;请求停止时用来杀死程序的信号

启动Supervisor服务,命令如下:

supervisord -c /etc/supervisor/supervisord.conf

这时,在会发现我们部署的网站程序不在shell中通过dotnet xxx.dll启动,同样可以访问。

3.设置Supervisor开机启动#

首先为Supervisor新建一个启动服务脚本supervisor.service,然后保存并上传至服务器/usr/lib/systemd/system/目录。

脚本内容如下:

#supervisord service 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 $OPTIONS shutdown

ExecReload=/usr/bin/supervisorctl $OPTIONS reload

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

设置开启启动:

systemctl enable supervisor

验证是否成功:

systemctl is-enabled supervisor

如果输出enabled则表示设置成功,也可重启服务器验证。

4.Supervisorctl管理进程

Supervisor服务启动后,受其管理的进程会在后台运行。可以通过supervisorctl客户端管理进程。

输入如下命令进入supervisorctl交互终端,按Ctrl+C键退出:

supervisorctl

输入help查询帮助:

supervisor> help

default commands (type help ):

=====================================

add exit open reload restart start tail

avail fg pid remove shutdown status update

clear maintail quit reread signal stop version

输入help ****查询详细命令,比如输入help stop:

supervisor> help stop

stop Stop a process

stop : * Stop all processes in a group

stop Stop multiple processes or groups

stop all Stop all processes

如何启动、停止、重启进程等命令,我这里就不在记录,大家自行查找吧。

除此之外,Supervisor还提供了Web管理界面用来管理进程,如何配置启动请参考官方文档。

至此,

我们已经完成了ASP.NET

Core应用程序在CentOS7服务器上的部署。



问题


参考


第一种:出现502错误

在这里插入图片描述

原因是由于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

第二种:访问centos服务IP地址的时候,被location重定向到5001端口,而5001端口是系统分配给这个站点的Https端口

在这里插入图片描述

在net core官网文档查到Startup类默认是建议使用HTTPS的,解决方法有二、一是你在centos上安装好HTTPS证书,二是注释掉app.UseHttpsRedirection(); 重新发布。

在这里插入图片描述

参考:


官方环境配置教程


https://blog.csdn.net/Tomato2313/article/details/79693438


https://www.cnblogs.com/gdsblog/p/8795871.html


https://www.cnblogs.com/waynechan/p/9437934.html


tcpdump在Ubuntu和CentOS下的安装和使用


centos7 开启关闭服务


centos关机与重启命令