CentOS8.2+Supervisor部署.NET 5.0应用


前言:

  很久没写博客了,这两天工作比较少,脑袋“发热”买了台阿里云服务器,配置1核2G内存,系统选择CentOS8.2,还申请了个自己的域名,总共花了110块RMB。目的是想自己写点东西验证一下。

先简单写个demo部署到服务器上,验证环境和网络是否正常。

准备

  创建一个名称为Research.Web的ASP.NET Core项目,目标框架.NET Core5.0,发布后用xftp上传到服务器/prodic/research.web目标。  

使用xshell登录服务器,登录账号用root

安装aspnetcore运行时命令

sudo dnf install aspnetcore-runtime-5.0

  使用dotnet Research.Web.dll命令运行程序,一切正常,浏览器访问如下(建议大家发布的时候用该命令运行一下,避免因程序有问题造成发布后无法访问。)

  接下来需要一个守护进程工具管理进程,并且系统启动时自动启动我的web站点。因为以前在工作中使用过国内大牛宇内**写的jexus,所以一开始想用jexus,但又看到很多同行使用Supervisor来作为.NET Core站点的进程守护工具,看了介绍和几篇博客后觉得Supervisor简单易用,当然jexus用起来也很简单,而且功能强大。但是我没用过Supervisor,所以想用一用,最终决定选择Supervisor,官方网址:https://pypi.org/project/supervisor。

Supervisor官方介绍

  Supervisor是一个客户端/服务器系统,允许其用户控制类似UNIX的操作系统上的许多进程。

支持平台

  Supervisor已经过测试,并且已知可以在Linux(Ubuntu),Mac OS X(10.4、10.5、10.6)和Solaris(对于Intel为10)和FreeBSD 6.1上运行。在大多数UNIX系统上,它可能会正常工作。

  Supervisor将无法在任何Windows版本下运行。

  Supervisor旨在在Python 3版本3.4或更高版本以及Python 2版本2.7上工作。

Supervisor安装

注意,本文中因为使用root账号登录,所有命令前不需要加suto,不是root账号或者没有对应权限的请在命令前添加sudo,如sudo yum install supervisor。

安装命令

yum install supervisor

 安装完成可以看到版本号为4.2.1……

安装成功后,在/etc/目录下会自动生成supervisord.conf文件和supervisord.d目录,如下图所示

 说明:

supervisord.conf文件是supervisor自身的配置文件

supervisord.d目录是用来存放被守护进程的配置文件

配置守护进程配置目录

接下来添加并配置supervisor要守护的进程配置文件。

用命令vi打开supervisord.conf文件,在文件内容末尾找到

[include]
files = supervisord.d/*.ini

如果不是该配置请改为该配置,如果行前面有分号,则去掉分号。

意思就是包含supervisord.d目录下所有以ini结尾的配置文件。后面我们将会把需要守护的进程配置添加到这个目录中。

 然后敲Esc键,输入:wq退出。

添加被守护进程配置文件

接下来进入到supervisor.d目录,在supervisord.d目录中添加research.web.ini配置文件

添加文件命令

touch research.web.ini

  编辑research.web.ini文件,将以下内容添加到文件中

[program:research.web]
command=dotnet Research.Web.dll ; 运行程序的命令
directory=/prodic/research.web/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/researchweb/researchweb.err.log ; 错误日志文件
stdout_logfile=/var/log/researchweb/researchweb.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT

然后敲Esc键,输入:wq退出编辑。

执行以下命令使配置生效

systemctl enable supervisord.service

 执行以下命令重新载入配置,并重启supervisor服务

supervisorctl reload

 查看运行状态命令

supervisorctl status

 这里可以看到supervisor守护了两个进程,分别是pudefu.web和research.web(上文添加的被守护进程)。 

配置supervisor开机自动启动

执行命令检查开机配置是否已经存在

systemctl enable supervisord.service

返回Failed to enable unit:Unit file supervisord.service does not exist.表示不存在。

 定位到/lib/systemd/system目录下,并创建supervisord.service文件

创建supervisord.service文件命令

touch supervisord.service

 接着使用vi命令编辑supervisord.service文件,将以下代码复制到文件中

[Unit]
Description=Supervisor Process Monitoring and Control Daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/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 daemon-reload

systemctl start supervisord.service

 执行以下命令检查是否开机启动

systemctl enable supervisord.service

 如果没有返回Failed to enable unit:Unit file supervisord.service does not exist.表示开机启动已经配置成功。至此,配置完成。

supervisor常用命令

supervisord  //初始启动Supervisord,启动、管理配置中设置的进程。

supervisorctl status     //查看所有任务状态信息

supervisorctl reload   //重新启动并载入最新的配置文件,并按新的配置启动、管理所有进程。

supervisorctl shutdown    //关闭所有任务(关闭后用reload重启)

supervisorctl start all          //启动所有进程

supervisorctl stop all          //停止所有进程

supervisorctl restart all       //重启所有进程(restart不会重新载入最新的配置文件。可使用reload或者update命令)

supervisorctl start|stop|restart   //控制指定进程,name为进程名称

supervisorctl version  //查看版本号

supervisorctl pid  //查看进程id

supervisorctl tail [-f] [stdout | stderr](默认stdout)  //查看进程日志信息,stdout是普通日志,stderr是错误日志

supervisorctl clear  //清空指定进程的日志,name为进程名称

supervisorctl clear all //清空所有进程日志