Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

前言:

  本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器。因为公司的项目一直都是托管在Window服务器IIS上,对于Linux服务器上托管.NET Core项目十分好奇。因为好奇,因此就有了这篇文章关于如何在Linux CentOS7系统中配置.NET Core运行环境,部署项目和反向代理服务器的配置。

一、开发工具介绍

Xshell:

  是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。

Xftp:

  是一个功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS Windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。

当然这两个工具提供了非商业用途的免费使用权限,你只需要填写对应的信息即可。

下载地址:https://www.netsarang.com/en/free-for-home-school/

二、.NET Core环境搭建

环境下载地址:Download .NET (Linux, macOS, and Windows)

查看操作系统版本:

lsb_release -a

Install .NET Core SDK【安装.Net Core SDK】:

概述:.NET Core SDK 是一组库和工具,开发人员可用其创建 .NET Core 应用程序和库。

它包含以下用于构建和运行应用程序的组件:

.NET Core CLI 工具。
.NET Core 库和运行时。
DotNet 驱动程序(.NET CLI | Microsoft Learn)。

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

sudo yum install dotnet-sdk-2.2

官网最新安装教程:

Download .NET (Linux, macOS, and Windows)

 

查看安装环境版本信息:

dotnet --info

三、项目发布并部署到CentOS服务器中

使用Visual Studio发布项目:

部署方式选择框架依赖

原因:因为前面我们已经安装好了.Net Core应用程序运行所需要的运行环境和对应的SDK了。

目标运行时选中可移植的

原因:可以适用所有操作系统。

将发布好的文件使用xftp上传到服务器:

使用xshell查看项目是否上传成功:

运行项目:

首先要进入项目目录:

cd MyDotNetApplication/

运行项目:

dotnet FirstCore.dll -d &

查看后台是否能够运行:

wget http://localhost:5000

或者

curl  http://localhost:5000

运行程序提示问题:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

出现这个警告的话,IPV6s回送的时候不可达,也就是说你只能够在服务器内部通过本地访问,但是无法通过外网ip对网站进行访问。

 解决方法:

首先停止网站:
查看运行程序端口:jobs -l

结束当前程序:kill 端口号

重新运行程序,最后设置如下访问方式【当然这样子做只是为了看运行效果,下面我们需要配置Nginx以及守护服务】:
dotnet FirstCore.dll --server.urls="http://*:5000"

然后在输入外网ip+5000端口号进行访问,访问成功,页面如下图所示:

四、配置Nginx反向代理:

使用反向代理服务器的优势:

Kestrel 非常适合从 ASP.NET Core 提供动态内容。 但是,Web 服务功能不像服务器(如 IIS、Apache 或 Nginx)那样功能丰富。 反向代理服务器可以卸载 HTTP 服务器的工作负载,如提供静态内容、缓存请求、
压缩请求和 HTTPS 终端。 反向代理服务器可能驻留在专用计算机上,也可能与 HTTP 服务器一起部署。

反向代理服务器接收来自网络的 HTTP 请求,并将这些请求转发到 (边缘服务器)Kestrel,请求流程图如下所示:

下载、安装、启动Nginx命令:

首先添加CentOS 7 EPEL源:
sudo yum install epel-release 
(拓展)添加EPEL源的作用:

  EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区打造的、为 RHEL 及其衍生发行版(如 CentOS 等)提供高质量软件包的项目。安装了 EPEL 源之后,就像在 Fedora 上一样,通过“yum install 软件包名”,即可安装很多之前需要编译安装的软件、常用的软件以及一些比较流行的软件,比如现在流行的 nginx、redis 等。安装了EPEL源之后,都可以使用 EPEL 很方便的安装更新。

使用以下yum命令安装Nginx :
sudo yum install nginx
因为是首次安装 Nginx,通过运行以下命令显式启动: 
sudo service nginx start

或者: 

sudo systemctl start nginx
查看Nginx是否启动: 

查看Nginx的运行状态: 

systemctl status nginx 

用ps -ef列出进程列表,然后通过grep过滤nginx:

ps -ef | grep nginx

 设置系统启动时启用Nginx:
sudo systemctl enable nginx
查看系统防火墙状态:
service iptables status

如下图所示我的防火墙是关闭的: 

 如果系统中的防火墙未关闭,请输入以下命令来允许 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://123.xx.xx.88/来验证 Nginx 是否成功运行:

如下图所示能看到 Nginx 的默认转发网页则说明Nginx运行成功了:

修改 Nginx 配置文件:

使用Vim命令打开Nginx默认配置:

若要将 Nginx 配置为反向代理服务器用来将请求转接到 ASP.NET Core 应用,请修改Nginx的默认配置文件 /etc/nginx/nginx.conf 在文本编辑器中打开它,并将内容替换为以下内容:

 vim /etc/nginx/nginx.conf
将原server中的默认配置内容替换成以下内容:

 替换的内容:

server {
    listen 80;
    server_name   example.com *.example.com;
    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;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
} 
保存编辑,并退出文本编辑器:
esc+:wq  保存修改并退出vim编辑器
验证Nginx的默认文件配置是否正确:
nginx -t

 

查看端口在实例中是否正常被监听:
netstat -an | grep 80

重启Nginx:
nginx -s reload
最后直接通过服务器ip地址访问ASP.NET Core应用程序:

提示502 Bad Gateway:

原因:Linux CentOs中的项目没有运行!

到对应的项目目录,运行项目,输入以下命令:
进入项目目录:
cd MyDotNetApplication/  

运行项目:
dotnet FirstCore.dll -d &  

再次访问服务器Ip,项目成功运行:

 

五、配置Supervisor守护服务:

为什么要配置Supervisor:

  使用Linux部署过ASP.NET Core应用程序的小伙伴都清楚,我们在部署项目都是通过Shell进行项目启动运行的。有时候我们会发现当我们关闭了Shell后,应用程序会立马宕机无法访问,需要我们重新进入服务器连接Shell输入dot命令重启应用程序。在生成环境中对于这种没有对应用程序进行任何的守护和监听的部署是非常的糟糕的,因此我们需要守护服务或者容器(推荐使用Docker)来对应用程序进行监听保护作用,当监听到应用进程停止,Supervisor会自动重启该应用程序。

Supervisor简单概述:

  首先简单了解下Supervisor, Supervisor(Supervisor: A Process Control System — Supervisor 4.2.5 documentation)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

安装Supervisor:

yum install python-setuptools

easy_install supervisor

配置Supervisor

 //新建指定目录,为了避免默认配置会在某些更新覆盖掉
mkdir /etc/supervisor

//这里是在新建好的目录新建conf文件,这里关键。默认文件会建立在/etc目录下
echo_supervisord_conf > /etc/supervisor/supervisord.conf
新建成功如下图所示:

打开supervisord.conf,要将文件的结尾部分替换掉以便后面能读取到我们的配置文件

打开supervisord.conf配置文件:

vim supervisord.conf  

在文件的结尾找到以下配置代码:

;[include]
;files = relative/directory/*.ini

将代码替换为如下,注意前后不能带 ;和空格符号

 [include]
 files = conf.d/*.conf

配置对ASP.NET Core应用的守护:

进入目录 /etc/supervisor/ 新建 conf.d文件夹:
mkdir conf.d 
在【/etc/supervisor/conf.d/】目录下新建一个AspNetCoreWebApi.conf配置文件:
vim AspNetCoreWebApi.conf 

直接复制以下内容:

[program:AspNetCoreWebApi]
command=dotnet FirstCore.dll;
directory=/root/MyDotNetApplication/;
autorestart=true;
stderr_logfile=/var/log/AspNetCoreWebApi.err.log;
stdout_logfile=/var/log/AspNetCoreWebApi.out.log;
environment=ASPNETCORE_ENVIRONMENT=Production;
user=root;
stopsignal=INT;

配置说明:  

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

注意:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效。

运行supervisord,查看是否生效,命令如下:
supervisord -c /etc/supervisor/supervisord.conf

ps -ef | grep AspNetCoreWebApi   //AspNetCoreWebApi是上面配置的program名称:[program:AspNetCoreWebApi]

配置Supervisor开机启动

新建一个“supervisord.service”文件
[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文件拷贝至:
/usr/lib/systemd/system/   #系统目录下

执行命令:systemctl enable supervisord #激活开机启动命令

执行命令:systemctl is-enabled supervisord #来验证是否为开机启动

下面是一些常用的 Supervisor 的命令 (参考滑动验证页面):
               命令                                               说明
supervisord初始启动Supervisord,启动、管理配置中设置的进程
supervisorctl stop myproject停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon
supervisorctl start myproject启动某个进程
supervisorctl restart myproject重启某个进程
supervisorctl stop groupworker重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all停止全部进程,注:start、restart、stop都不会载入最新的配置文件
supervisorctl reload载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl update根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。注意:显示用stop停止掉的进程,用reload或者update都不会自动重启

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单学生信息管理系统

简单,单表; https://download.csdn.net/download/bcbobo21cn/89251742

【QT学习】12.UDP协议,广播,组播

一。Udp详细解释 UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。与TCP相比,UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能,但由于其简单性和低开销&#x…

Java | Leetcode Java题解之第64题最小路径和

题目: 题解: class Solution {public int minPathSum(int[][] grid) {if (grid null || grid.length 0 || grid[0].length 0) {return 0;}int rows grid.length, columns grid[0].length;int[][] dp new int[rows][columns];dp[0][0] grid[0][0]…

《罪与罚》读后感

陀思妥耶夫斯基和列夫托尔斯泰是公认的俄国文学黄金时代的两座高峰,分别代表着俄国文学的“深度”和“广度”。列夫托尔斯泰的鸿篇巨著《复活》《安娜卡列尼娜》等等都已经拜读过,但陀思妥耶夫斯基的作品却一本也没有看过,实在是有点遗憾。这…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下,确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术,具有灵活状态切换功能的智能仿真三相电能表,旨在通过技术创新提高电能计量人员的培训…

Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了

Flutter笔记 谈Material状态属性-为什么FlatButton等旧版按钮就废弃了 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this artic…

MySQL-逻辑架构

1、MySQL服务器处理客户端请求 MySQL是典型的C/S架构,服务端程序使用 mysqld。实现效果:客户端进程像服务端发送(SQL语句),服务器进程处理后再像客户端进程发送 处理结果。 2、connectors 指不同语言中与SQL的交互…

Vue3+ts(day05:ref、props、生命周期、hook)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

OpenMLDB v0.9.0 发布:SQL 能力大升级覆盖特征上线全流程

发布日期 25 April 2024 Release note https://github.com/4paradigm/OpenMLDB/releases/tag/v0.9.0 亮点特性 增加最新版 SQLAlchemy 2 的支持,无缝集成 Pandas 和 Numpy 等常用 Python 框架。支持更多数据后端,融合 TiDB 的分布式文件存储能力以及…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

自古应用程序均从 Hello World 开始,你我所写的 Go 语言亦然: import "fmt"func main() {fmt.Println("hello world.") }这段程序的输出结果为 hello world.,就是这么的简单又直接。但这时候又不禁思考了起来&#xff0…

vue3 ——笔记 (表单输入,监听器)

表单输入 在Vue 3中,v-model指令的用法稍有不同于Vue 2。在Vue 3中,v-model指令实际上是一个语法糖,它会自动将value属性和input事件绑定到组件或元素上,以实现双向数据绑定。 在自定义组件中使用v-model时,需要在组…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作,有助于更好理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

Codeforces Round 943 (Div. 3) (A-G1) C++题解

目录 比赛链接 : A. Maximize? B. Prefiquence C. Assembly via Remainders D. Permutation Game E. Cells Arrangement F. Equal XOR Segments G1. Division LCP (easy version) G2. Division LCP (hard version) 比赛链接 : Dashboard - Codeforces Round 943 (…

用vim或gvim编辑程序

vim其实不难使用&#xff0c;学习一下就好了。简单功能很快学会。它有三种模式&#xff1a;命令模式&#xff0c;编辑模式&#xff0c;视模式。打开时在命令模式。在命令模式下按 i 进入编辑模式&#xff0c;在编辑模式下按<Esc>键退出编辑模式。在命令模式按 :wq 保存文…

Python-100-Days: Day08 Object-oriented programming(OOP) basics

OOP definition 把一组数据结构和处理它们的方法组成对象&#xff08;object&#xff09;&#xff0c;把相同行为的对象归纳为类&#xff08;class&#xff09;&#xff0c;通过类的封装&#xff08;encapsulation&#xff09;隐藏内部细节&#xff0c;通过继承&#xff08;in…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下&#xff08;我是将其放在了D盘的一个software的文件中管理&#xff09; 2.…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

魔方阵(C语言)

一、魔方阵规律&#xff1b; 8 1 6 3 5 7 4 9 2 魔方阵中各数的排列规律如下&#xff1a; (1)将1放在第1行中间一列。 (2)从2开始直到nn止&#xff0c;各数依次按此规则存放&#xff1a;每一个数存放的行比前一个数的行数减1&#xff0c;列数加1(例如上…

QT5带UI的常用控件

目录 新建工程&#xff0c;Qmainwindow带UI UI设计器 常用控件区 Buttons 按钮 containers 容器 控件属性区域 对象监视区 布局工具区 信号与槽区 简单例子1 放置一个按钮控件&#xff0c;改文本为发送&#xff0c;该按键为Button1&#xff1b; 按钮关联信号和…