Linux部署.Net Core 3.1服务,并使用Nginx托管

准备.NET Core环境

1.注册 Microsoft 密钥和源

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

 

 2.安装 .NET Core SDK

sudo yum install dotnet-sdk-3.1

 3.安装 ASP.NET Core 运行时

sudo yum install aspnetcore-runtime-3.1

 

 站点部署

1.创建目录

mkdir /usr/dotnet

2.将发布文件上传到服务器目录,我使用的是WinSCP工具上传的文件,这里不做介绍

3.启动服务

进入站点目录 cd /usr/dotnet
启动服务 dotnet *****.dll

启动成功后我们可以看到服务端口号

4.访问站点

 5.如果访问失败,需要检查防火墙是否有开放端口及阿里云是否有配置端口

开放端口:sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent

如果是FirewallD is not running状态,则执行:systemctl start firewalld,执行成功后,再重新配置端口


查服务进程:ps -aux | grep   "TuoKeWeb.dll"   强制杀掉进程:kill -9 进程ID 
重启防火墙 sudo firewall
-cmd --reload 查看防火墙开放的端口 sudo firewall-cmd --list-ports

 安装配置Nginx

1.安装Nginx

sudo yum -y install nginx 

2.启动Nginx并查看Nginx状态

systemctl enable nginx --设置开机启动
service nginx start  --启动nginx
ps -ef | grep nginx --查看端口号

 3.为.NET Core服务站点配置反向代理

找到nginx配置文件,我的路径是:/etc/nginx/nginx.conf,将以下配置复制到配置文件

worker_processes 1; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;
#下面是server虚拟主机的配置
server
{
listen 80;
server_name core.yz0735.cn;


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;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}

}

4.重新加载配置,访问站点

service nginx reload

配置好后,我们就可以通过域名+端口号访问服务了

5.通过域名不带端口访问需要进行如下配置,端口为站点端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5000

另外如果防火墙重新启动,该命令就会失效,可以使用下面的命令把该规则保存到iptables里面。

service iptables save

配置好后,我们可以直接通过域名不带端口号访问站点

创建Supervisor进程守护监控

1.先安装epel,软件包更丰富点

yum install epel-release

2.安装Supervisor

yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务

3.创建.Net Core项目的Supervisor配置文件

#进入supervisord.d目录
cd /etc/supervisord.d

#新建NetCore进程配置文件
sudo touch DemoNetCore.ini

#查看和编辑DemoNetCore.ini配置文件
sudo vim DemoNetCore.ini

#进入文件后,按“i”或者“a”进入插入模式,插入下面的配置信息

将以下配置复制到刚创建的DemoNetCore.ini配置文件

#配置程序名称,
[program:DemoNetCore]
#运行程序的命令
command=dotnet TuoKeWeb.dll --urls="http://*:5000;"
#命令执行的目录
directory=/usr/dotnet
#进程环境变量
environment=ASPNETCORE_ENVIRONMENT=Production
#进程执行的用户身份
user=root
#进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected,非必须设置
stopsignal=INT
#如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置
autostart=true
#这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
autorestart=true
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了,默认值为1 。非必须设置
startsecs=1
#错误日志文件
stderr_logfile=/var/log/DemoNetCore.err.log
#输出日志文件
stdout_logfile=/var/log/DemoNetCore.out.log
#按ESC,输入命令保存配置文件
:wq   (保存编辑操作退出)
:wq!  (保存编辑强制退出)
:w ! sudo tee %
#通过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf

#启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf

#重新加载配置文件
reload

#查看运行的状态
status
#查看相关进行
ps -aux | grep "TuoKeWeb.dll"

#访问启动的站点
curl http://localhost:5000/Home/Test

如下图所示,Supervisor已经开启了dotnet进程,访问接口地址,返回数据成功

 

 

 5.配置Supervisor开机自启动

#进入system目录
cd /usr/lib/systemd/system

#编辑supervisord.service文件
sudo vim supervisord.service

supervisord.service文件内容如下

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.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=42

[Install]
WantedBy=multi-user.target

编辑好后保存退出,然后执行命令,查看是否启动成功

#启动服务
systemctl enable supervisord

#验证一下是否为开机启动
systemctl is-enabled supervisord

 

 6.验证进程守护监控效果

#查看dotnet进程
ps -aux|grep dotnet

#强制杀死dotnet进程
kill -9 %PID

#再次查看dotnet进程
ps -aux|grep dotnet

Supervisor常用命令

# 启动所有
supervisorctl start all

# 重启所有
supervisorctl restart all

# 停止所有
supervisorctl stop all

#PS:要操作某个服务,把all换成服务名即可

#查看服务状态
supervisorctl status

posted on 2021-09-30 11:02  辛勤的代码搬运工  阅读(827)  评论(0编辑  收藏  举报

导航