1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - Linux系统 - centos - 正文

君子好学,自强不息!

前置博客(博客中使用的项目来自于此):

【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)

 

环境:.Net Core 3.1 , Centos7.6

工具:连接工具MobaXterm,阿里云服务器一台

 

1.安装微软签名,不安装不能使用net。

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

 

2.安装.net环境,也可以单独安装 dotnet-runtime ,但是缺少很多方便的工具包,不推荐。

yum install dotnet-sdk-3.1

 

3.先修改要发布的端口号,再右键项目发布,然后修改信息,发布。

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 

 发布完,到目标文件夹把文件拖到  /home/xxx(随意取名)   目录下

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)      【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

dotnet Test.dll

使用donet XXX运行项目,Test.dll是项目名。 运行后此项目只能本机访问,没有任何作用

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

  PS.运行的时候当前目录一定要在项目文件夹 , 比如 在 /home/dotnet/Test 下执行 Test.dll ,如果在外部文件夹执行命令会有BUG。

 

下面使用nginx进行代理转发请求,使外网也能访问。

如果启动的端口是5000,Nginx 可把5000端口映射到其他端口。

 

4.添加 Nginx 存储库

在某些Centos版本要添加 CentOS 7 EPEL 仓库,实测Centos7.8不需要 :

yum install epel-release

 

5.安装 Nginx

yum install nginx

 

6.启动 Nginx

 systemctl enable nginx  #设置nginx为开机启动

 systemctl start nginx  #启动nginx服务

 // 其他

 systemctl stop nginx     #停止 nginx 服务

 systemctl restart nginx  #重启 nginx 服务

 systemctl nginx reload   #重新加载配置文件。

 systemctl status nginx   #查看服务器状态

 ps -ef | grep nginx      #查看Nginx是否启动

 

 

7.修改 Nginx 配置文件

两种方法,第一种是把 /etc/nginx/nginx.conf 文件中直接改 server 配置信息

第二种是把 /etc/nginx/nginx.conf 文件中server注释掉,然后在 /etc/nginx/conf.d/ 添加一个 xxx.conf 配置文件,如下所示

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

  红色画圈部分的意思是加载这个文件夹下面的所有 .conf 配置文件

 新建一个xxx.conf配置文件

 【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 netcore.conf 配置如下

server {
    listen 80;
    location / {
        proxy_pass http://localhost:8001;
        
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection keep-alive;

        proxy_set_header Host $http_host;
 
        proxy_cache_bypass $http_upgrade;
    }
}

保存后重启nginx

systemctl restart nginx  #重启 nginx 服务

或者刷新配置

sudo nginx -t    #检查配置文件
sudo nginx -s reload    #重新加载配置文件

访问站点80端口(80端口是默认端口自动隐藏),此端口会被nginx转发至 8001端口

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 再看看项目配置的swagger文档

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 

 

 

8.配置守护进程Supervisor

项目启动只能前台运行,不能进行其他操作,所以要建一个守护进程,使得项目后台运行

安装 supervisor

yum install supervisor

 检查 /etc/supervisord.conf 配置文件,如果不为圈中代码,请修改为圈中代码。

意思是 supervisord.d 文件夹下的所有 ini 类型的文件都是配置文件

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 

 

 

到/etc/supervisord.d 目录下 新建 xxx.ini文件,文件配置内容如下 自己定义,记得一定要改运行命令和程序路径。

[program:TestNetCore]
command=dotnet Test.dll                       #运行命令
directory=/home/dotnet/Test                    #程序路径
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=root        #设置启动进程的用户,默认是root
stopsignal=INT   #请求停止时用来杀死程序的信号
autostart=true   #自动启动
autorestart=true #3秒自动重启
startsecs=3      #自动重启间隔
stderr_logfile=/var/log/ossoffical.err.log  #标准错误日志 路径可以自定义
stdout_logfile=/var/log/ossoffical.out.log  #标准输出日志  路径可以自定义

保存配置文件,启动守护进程,然后设置开机启动

supervisord -c /etc/supervisord.conf  #启动服务
supervisorctl reload #重新加载配置
systemctl enable supervisord #开机启动
systemctl disable supervisord #取消开机启动

其他相关操作

supervisorctl shutdown #关闭
supervisorctl reload      #重启
systemctl is-enabled supervisord #验证是否开机启动
systemctl status supervisord.service #执行命令,查看服务器启动失败的原因
supervisorctl status                     #查看服务状态
supervisorctl stop TestNetCore     #停止某个服务
supervisorctl start TestNetCore    #开始某个服务
supervisorctl restart TestNetCore # 重启某个服务

测试一下是不是进程停止后supervisor使之自动启动。

【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 

 

—– 分割线  —–   2020/12/23号补充 ——-

最近在公司管服务器,新学会一种运行方式,特此分享,就是在dotnet xx.dll之前+nohup   后+ &

nohup dotnet Test.dll--urls="http://*:8001" > /dev/null 2>&1 &

 > /dev/null 2>&1   : 将日志输出至 /dev/null , 2>&1 把错误输出日志和标准输出日志合并输出

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

 

写一个简单Shell脚本,每次发布项目,重启项目都使用这个脚本

脚本名定为: restartApi.sh

kill -9 $(ps -ef | grep 'dotnet Test.dll--urls=http://\*:8001' | grep -v grep | awk '{print $2}')

cd ./Test && nohup dotnet Test.dll--urls="http://*:8001" &

echo "重启Test.Api执行完成"

说明:

1:搜索到名为 XXX 的进程,过滤掉grep本身进程,再选取输出结果中的第二条数据(即PID),根据PID杀死这个进程。

2:   进入Test目录下(项目在./home/dotnet/Test ,restartApi.sh在./home/dotnet), 运行项目。

3:输出提示

使用 chmod u+x  赋予文件执行权限, 也可以使用 chmod 777 给所有权限。

chmod 777 restartApi.sh

执行脚本

./restartApi.sh

 【.Net Core】使用 Nginx  发布 .Net Core 3.1 项目至LInux(Centos7)

 

 

 如果出现Killed提示,Ctrl+C退出就可以

 

本文来源:1818IP

本文地址:https://www.1818ip.com/post/32660.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。