部署.netcore服务

在centos上部署基于.netcore 2.x的开发的服务

Posted by matt.h on 2023/02/10

按顺序安装即可

dotnet相关安装与配置

安装依赖项

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

安装.NET SDK

sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.105

安装完.net sdk之后,运行程序的方法

dotnet ApplicationName.dll

到这里,centos上就能运行dotnet程序了,端口默认为5000;然而,只是在linux本地能运行,外网还不能访问。这时候,我们还需要将我们服务器上的5000端口映射到80端口上!需要用到Nginx!

Nginx相关安装与配置

安装

以下三个命令完成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

当终端上显示“完毕”,Nginx就安装完毕了

启动和配置

以下命令启动Nginx
systemctl start nginx 
设置自启,当系统宕机重启后,我们就不用手动去启动Nginx了
systemctl enable nginx

Nginx启动后,试着用浏览器访问centos的公网地址,如果出现以下界面,可以跳过下面的“防火墙配置”:

图片加载失败
Nginx默认首页
如果访问不到,那么需要接着配置防火墙

防火墙配置
firewall-cmd --zone=public --add-port=80/tcp --permanent //开放80端口

systemctl restart firewalld //重启防火墙

修改Ngnix配置,转发5000端口

修改 /etc/nginx/conf.d/default.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使其立即生效

nginx –s reload

这个时候,通过命令dotnet xxx.dll启动我们的dotnet应用后,访问服务器公网地址(80端口),就可以访问到我们的应用了。

安装和配置守护程序(Supervisor)

通过上边的配置,我们的程序虽然能跑起来了,但是,其会一直占据我们的终端。这个时候,我们需要安装守护程序,让其在后台运行。

安装守护程序Supervisor

逐条运行以下命令安装

yum install python-setuptools
easy_install supervisor
配置守护程序

为守护程序添加一个用于保存配置文件的目录

mkdir /etc/supervisor

输出守护程序的默认配置文件到刚刚新建的目录

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改默认配置文件supervisord.conf 将

图片加载失败
修改前
修改为

图片加载失败
修改后
修改配置文件后,可以重启使其立刻生效

supervisorctl reload

在/etc/supervisor/目录下,新建一个conf.d目录,在conf.d目录下新建一个配置文件,命名为WebApplication1.conf,并写入下面的内容

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

根据自己的情况修改,其中command后边的参数,为我们需要后台执行的命令,这里输入dotnet+程序名, directory参数为你程序所在的目录.修改完之后保存!使用以下命令,使配置立即生效。

supervisord -c /etc/supervisor/supervisord.conf

如果,运行该命令报错,不用理会,说明我们的进程已经在运行了!我们可以用以下命令查看

ps -ef | grep WebApplication1

出现以下结果,说明dotnet程序正在后台运行

图片加载失败
后台运行

将守护程序添加到开机自启

在/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

执行以下命令,使supervisord.service生效:

systemctl enable supervisord

验证守护程序时候开机自启:

systemctl is-enabled supervisord