简介

本文详细介绍了在CentOS 7系统上部署.NET 8网站项目的完整流程,主要内容包括:系统版本更新与检查、PostgreSQL数据库的安装配置(含防火墙设置、数据库初始化及远程访问配置)、Nginx Web服务的安装与防火墙配置。文章通过分步命令演示和效果截图,详细说明了关键操作步骤,如服务启动与自启设置、数据库密码修改、Nginx反向代理配置等,为在Linux环境下部署.NET项目提供了完整的技术参考。

1、更新系统版本

yum -y update

2、查看Centos系统版本

lsb_release -a

命令执行效果如下:
查看Centos系统版本

2.1、使用 hostnamectl 命令检查 CentOS 版本

要获取 CentOS 操作系统的分支号,可以使用 hostnamectl 命令,如下所示。此命令将打印 CentOS 操作系统所需的所有详细信息:

hostnamectl

命令执行效果如下:
使用 hostnamectl 命令检查 CentOS 版本

3、安装PostgreSQL

PostgreSQL是一个功能强大的 开源 的关系型数据库,底层基于C实现。
PostgreSQL使用的开源协议是PostgreSQL许可证,也被称为PostgreSQL开放源码许可证。这是一种自由软件许可证,基于BSD许可证。该许可证允许用户自由地使用、修改和分发PostgreSQL数据库管理系统的源代码。它还允许用户将PostgreSQL用于商业目的,并且没有强制性的要求或限制。这使得PostgreSQL成为一个受欢迎的开源数据库解决方案。
PostgreSQL的名字由两部分组成:Post和SQL。
"Post"是指Postgres,这是PostgreSQL的前身。Postgres是由Michael Stonebraker和他的团队在加州大学伯克利分校开发的一个关系数据库管理系统。它是早期关系数据库系统的一个重要研究项目。
"SQL"代表结构化查询语言(Structured Query Language),它是一种用于管理和操作关系数据库的标准语言。PostgreSQL是一个完全支持SQL的关系数据库管理系统。
因此,将这两个部分合并在一起,就得到了PostgreSQL这个名字。

3.1、设置防火墙

3.1.1、开启防火墙

sudo systemctl start firewalld

3.1.2、开放PostgreSQL默认端口防火墙

sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent

命令执行效果如下:
开放PostgreSQL默认端口防火墙

3.1.3、重启防火墙服务

sudo firewall-cmd --reload

命令执行效果如下:
重启防火墙服务

3.2、查看所有可用的软件包和版本

PostgreSQL 软件仓库包含所有可用的 PostgreSQL 版本的信息。您可以使用以下命令查看所有可用的软件包和版本:

sudo yum list postgresql*

命令执行效果如下:查看所有可用的软件包和版本

3.3、使用命令查看PostgreSQL是否已安装

3.3.1、使用rpm命令(适用于Red Hat/CentOS系统)查看PostgreSQL是否已安装

对于基于Red Hat/CentOS的系统,可以使用rpm命令来检查某个软件包是否已安装。可以通过执行以下命令来检查PostgreSQL是否已安装:
如果该命令返回带有”postgresql”关键字的软件包列表,则表示PostgreSQL已安装。否则,没有任何输出表示未安装。

rpm -qa | grep postgresql

3.3.2、使用pg_config命令

pg_config是一个用于获取关于当前已安装的PostgreSQL的信息的命令。我们可以在终端中执行以下命令来检查是否安装了PostgreSQL:

pg_config --version

如果该命令返回版本号,则表示PostgreSQL已安装。否则,将显示命令未找到或包括PostgreSQL的相关信息。

3.4、安装

sudo yum install postgresql-server

3.5、初始化PostgreSQL数据库

sudo -u postgres initdb -D /var/lib/pgsql/data

命令执行效果如下:
初始化PostgreSQL数据库

3.6、重新启动 PostgreSQL 服务

sudo systemctl restart postgresql

3.7、设置开机自启(如果尚未设置)

sudo systemctl enable postgresql

3.8、验证安装

登录到 PostgreSQL 数据库,以验证安装是否成功。

sudo -u postgres psql

命令执行效果如下:
登录到 PostgreSQL 数据库,以验证安装是否成功

3.9、修改postgres用户的登录密码

因为安装之后,用户“postgres”默认没有登录密码,所以我们需要使用命令进行密码修改。

alter user postgres with password 'a12345678@';

命令执行效果如下:
在这里插入图片描述

3.10、设置外部IP能够连接本机的PostgreSQL数据库

3.10.1、修改pg_hba.conf配置文件

执行命令,按“i”进入编辑模式:将postgresql.conf配置文件中的,新增一行“host all all 0.0.0.0/0 trust”,设置完成之后,按“ESC”,在输入“:wq”进行强制保存并退出。

vi /var/lib/pgsql/data/pg_hba.conf

命令执行效果如下:
修改pg_hba.conf配置文件

3.10.1、修改postgresql.conf配置文件

执行命令,按“i”进入编辑模式:将postgresql.conf配置文件中的listen_addresses属性设置为"*",设置完成之后,按“ESC”,在输入“:wq”进行强制保存并退出。

vi /var/lib/pgsql/data/postgresql.conf

命令执行效果如下:修改postgresql.conf配置文件

3.11、重新启动 PostgreSQL 服务

sudo systemctl restart postgresql

3.12、命令集

# 检查服务状态
sudo systemctl status postgresql# 启动服务
sudo systemctl start postgresql# 停止服务
sudo systemctl stop postgresql# 重启服务
sudo systemctl restart postgresql# 设置开机自启动
sudo systemctl enable postgresql# 禁用开机自启动
sudo systemctl disable postgresql

4、安装Nginx Web 服务

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

4.1、在root权限下配置防火墙

sudo firewall-cmd --add-service=http --permanent

命令执行效果如下:
在root权限下配置防火墙

sudo firewall-cmd --reload

命令执行效果如下:
重启防火墙

4.2、在root权限下安装Nginx

sudo yum install nginx

在这里插入图片描述
在此处输入“y”,回车等待安装完成即可。
在这里插入图片描述

4.3、启动Nginx

sudo systemctl start nginx

4.4、将Nginx服务设置为开机自启(尚未设置的话)

sudo systemctl enable nginx

命令执行效果如下:
将Nginx服务设置为开机自启

4.5、设置Nginx文件上传的大小

在使用 Nginx 进行文件上传时,为了防止用户上传过大的文件,导致服务器负载过高,需要对上传文件的大小进行限制。
要调整Nginx允许的最大上传文件大小,主要使用的是client_max_body_size指令。该指令可以放置在不同的配置块中,影响其作用范围:

  1. http块:全局生效,适用于所有虚拟主机;
  2. server块:仅对该站点生效;
  3. location块:仅对特定路径生效

4.5.1、修改 Nginx 配置文件

要设置文件上传大小限制,我们需要修改 Nginx 的配置文件。打开 Nginx 的配置文件,在config目录下面有个nginx.conf文件,找到 http 块,添加以下内容:

http {client_max_body_size 800m;
}

client_max_body_size 指定了上传文件的最大大小,这里设置为:800MB。

4.6、重启Nginx服务

sudo systemctl restart nginx

4.7、验证web服务

Web服务器搭建完成后,可以通过如下方式验证是否搭建成功。

4.7.1、在root权限下查看服务器的IP地址

ip a

命令执行效果如下:
查看服务器的IP地址

4.7.2、验证web服务器是否搭建成功,用户可选择Linux或Windows系统进行验证

执行如下命令,查看是否可以访问网页信息,服务搭建成功时,该网页可以正常访问

4.7.2.1、使用Linux系统验证
curl http://10.1.12.3

命令执行效果如下:使用Linux系统验证web服务器是否搭建成功

执行如下命令,查看命令返回值是否为0,返回值为0,说明nginx服务器搭建成功。

echo $?

命令执行效果如下:
在这里插入图片描述

4.7.2.2、使用Windows系统验证

打开浏览器,在地址栏输入公网地址IP,如果能正常访问网页,说明nginx服务器搭建成功。
使用Windows系统验证web服务器是否搭建成功

4.8、配置Nginx后无法访问上级

错误日志: 1 connect() to 127.0.0.1:5163 failed (13: Permission denied) while connecting to upstream, client:
问题原因:

SELinux 限制导致的问题,因为:

  1. 服务仅监听 IPv6(:::5163),但 Nginx 默认尝试使用 IPv4 连接;
  2. SELinux 可能阻止 Nginx 通过 IPv4 访问 IPv6 服务(即使是本地回环)

解决方案
永久配置 SELinux 允许 Nginx 网络连接:

# 1、允许 Nginx 进行网络连接(包括连接本地服务)
sudo setsebool -P httpd_can_network_connect 1# 2、允许 Nginx 使用网络套接字
sudo setsebool -P httpd_can_network_relay 1# 3、重启防火墙
sudo firewall-cmd --reload

5、安装配置 .NET 环境

5.1、安装.NET 8的SDK以及运行时

.NET 8下载官网链接:Download .NET 8.0 (Linux, macOS, and Windows) (microsoft.com)

5.2、查看系统支持的可用.NET 版本(通过官方源)

要查看 CentOS 7 官方源中可用的.NET 版本,可以使用以下命令:

# 安装Microsoft官方源
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm# 列出可用的.NET SDK包
sudo yum list available dotnet-sdk*# 列出可用的.NET运行时包
sudo yum list available aspnetcore-runtime*
sudo yum list available dotnet-runtime*

5.3、新建存放安装.NET的文件夹“software”

mkdir /自定义的目录路径/software

再向“software”文件夹中新建一个存放.NET SDK的安装目录“dotnet8”以及一个存放.NET 运行时的安装目录“dotnet8run”;

mkdir /自定义的目录路径/software/dotnet8 && mkdir /自定义的目录路径/software/dotnet8run

5.4、解压并安装.NET SDK

tar -zxvf bak/dotnet-sdk-你下载SDK的版本号-linux-x64.tar.gz -C /自定义的目录路径/software/dotnet8

5.4.1、添加环境变量

全局永久、所有用户有效,执行以下命令进行环境变量文件修改:

sudo vi /etc/profile

在输入命令之后,按“i”进行插入操作,在文件末尾,添加一下内容:

export PATH=$PATH:/自定义的目录路径/software/dotnet8

确认无误之后,按“ESC”,再输入:“:wq”保存并退出。(如果错了,或者想重新写入,可以按“ESC”,再输入:“:q!”不保存并强制退出)。

5.4.2、更新profile文件

source /etc/profile

5.4.3、查看环境变量

echo $PATH

5.5、解压安装.NET 运行时

tar -zxvf bak/aspnetcore-runtime-你下载运行时的版本号-linux-x64.tar.gz -C /自定义的目录路径/software/dotnet8run

安装完成之后,可使用命令“dotnet --info”查看SDK以及运行时。

5.6、错误解决

1、dotnet: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by dotnet) dotnet: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21’ not found (required by dotnet)

这可能是因为CentOS版本太低或者缺少libstdc++.so.6 版本 GLIBCXX_3.4.20 和 GLIBCXX_3.4.21

解决方案如下:

cd /usr/local/lib64/# 下载最新版本的`下载最新版本的libstdc.so_.6.0.26`
wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip# 解压
unzip libstdc.so_.6.0.26.zip# 将下载的最新版本拷贝到 /usr/lib64
cp libstdc++.so.6.0.26 /usr/lib64
cd  /usr/lib64# 查看 /usr/lib64下libstdc++.so.6链接的版本
ls -l | grep libstdc++# 使用 cp -a 保留软链接属性(不跟随链接复制目标文件),备份为 libstdc++.so.6.bak
sudo cp -a /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak# 删除原先的软连接(不放心可以备份)
rm libstdc++.so.6# 使用最新的库建立软连接
ln -s libstdc++.so.6.0.26 libstdc++.so.6# 查看新版本,成功
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

6、部署.NET Core Web网站项目

将.NET Web网站项目进行发布,再使用XFTP上传至服务器下自己创建的目录下。

6.1、修改Nginx的配置文件

sudo vi /etc/nginx/nginx.conf
  • 在“location”下添加以下内容:

location / {proxy_pass http://localhost:5163;  #自己发布的.NET 项目所运行的url,若不知道在哪里查看,可在Windows发布的文件夹中找到项目.exe的文件,双击后,会弹出控制台窗口,里面有个urlproxy_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;root   /自定义目录/wwwroot;    #自己的项目路径,.NET Core的Web项目需要定位到“wwwroot”文件
}
  • 将“server_name”修改成:公网IP、域名或_(“_”表示任意域名或IP)即可;
  • 将“proxy_pass http”修改成:自己发布的.NET 项目所运行的url即可(若不知道在哪里查看,可在Windows发布的文件夹中找到项目.exe的文件,双击后,会弹出控制台窗口,里面有个url);
  • 确认无误之后,按“ESC”,再输入:“:wq”保存并退出。(如果错了,或者想重新写入,可以按“ESC”,再输入:“:q!”不保存并强制退出)。

6.2、重启Nginx

sudo systemctl restart nginx

6.3、创建.NET Core Web项目系统服务

mkdir:创建文件夹;touch:创建文件
在“/etc/systemd/system/”目录下创建一个新的服务文件,例如 web.service:

touch /etc/systemd/system/自定义的web服务名称.service

6.3.1、修改服务文件内容

sudo vi /etc/systemd/system/自定义的web服务名称.service

在输入命令之后,按“i”进行插入操作,在“ExecStart”末尾,添加以下内容: /自定义的目录路径/software/dotnet8/dotnet

[Unit]
Description=ASP.NET Core applications
After=network.target[Service]
WorkingDirectory=/自定义的网站项目目录路径/
ExecStart=/自定义的目录路径/software/dotnet8/dotnet  自定义的网站项目目录路径/netproject.dll --urls "http://*:5163"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=project
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false[Install]
WantedBy=multi-user.target

下面是此内容的一些关键方面:

  • WorkingDirectory 是发布应用程序的目录。
  • ExecStart 是启动应用程序的实际命令。
  • Restart=always 不言而喻。 如果由于某种原因(无论是手动还是崩溃)而停止,则始终会启动此过程。
  • RestartSec=10 也是不言而喻的。 进程停止后,它将在经过 10 秒后启动。
  • SyslogIdentifier 很重要。 它表示“系统日志标识符”。 有关守护程序的信息以此名称记录在系统日志中。 还可以使用此标识符来查找进程的 PID。
  • User 是管理服务的用户。 它应存在于系统中,并具有应用程序文件的相应所有权。
  • 可以在服务文件中设置任意数量的环境变量。

6.3.2、重载配置文件

sudo systemctl daemon-reload

6.3.3、启动Web服务

执行以下命令启动 web 服务:

sudo systemctl start 自定义的web服务名称.service

6.3.4、设置Web服务开机自启动

如果你希望 web 在系统启动时自动启动,可以执行以下命令设置开机自启动:

sudo systemctl enable 自定义的web服务名称.service

6.3.5、其他命令

#1、开机自启
sudo systemctl enable 自定义的web服务名称.service#2、启动服务
sudo systemctl start 自定义的web服务名称.service#3、查看状态
sudo systemctl status 自定义的web服务名称.service#4、关闭服务
sudo systemctl stop 自定义的web服务名称.service#5、重启服务
sudo systemctl restart 自定义的web服务名称.service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917083.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917083.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917083.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 11下IDEA中使用git突然变得卡慢及解决办法

1. 表象 使用idea的git进行update、commit、push等操作时,极度卡慢。需等待几十秒到几分钟。修改文件后,git刷新也不及时。update命令有时候无法点击。 2.解决方法 停止PC Manager ServiceCtrl shift esc : 打开任务管理器找到服务: 服务中…

MyBatis 的两级缓存机制

现实分布式项目中会不会开启mybatis的二级缓存? 在分布式项目中,是否开启MyBatis的二级缓存需结合具体场景和技术方案综合评估。 以下是关键考量因素: 一、默认二级缓存的局限性 隔离性问题:MyBatis默认的二级缓存基于HashMap实…

分布式原子序列(Distributed Atomic Sequence)

这段内容是关于 Apache Ignite 中的 分布式原子序列(Distributed Atomic Sequence),也就是一个分布式 ID 生成器。我们来一步步深入理解它的原理、用途和使用方式。🔹 一、核心概念:什么是分布式 ID 生成器&#xff1f…

VSCode——插件分享:Markdown PDF

该插件可以将markdown编写内容转成PDF。 ✅ 支持渲染图表、代码高亮、表格等 Markdown 内容 安装 Visual Studio Code安装插件:Markdown PDF 打开扩展商店,搜索 Markdown PDF 并安装 打开你的 .md 文件右键 → 点击 Markdown PDF: Export (pdf)自动生成 …

rust-模块树中引用项的路径

模块树中引用项的路径 为了告诉 Rust 在模块树中如何找到某个项,我们使用路径,就像在文件系统中导航时使用路径一样。要调用一个函数,我们需要知道它的路径。 路径有两种形式: 绝对路径是从 crate 根开始的完整路径&#xff1b…

mac n切换node版本报错Bad CPU type in executable

该node版本仅支持intel芯片,不支持Apple 芯片(M1/M2/M3/M4),所以需要下载Rosetta 2 ,让node可以在搭载 Apple 芯片的 Mac 上运行。 env: node: Bad CPU type in executable /opt/homebrew/bin/n: line 753: /usr/local…

经典算法之美:冒泡排序的优雅实现

经典算法之美:冒泡排序的优雅实现基本概念工作原理介绍具体实现代码实现总结基本概念 冒泡排序是一种简单的排序算法,通过重复比较相邻的元素并交换它们的位置来实现排序。它的名称来源于较小的元素像气泡一样逐渐“浮”到数组的顶端。 工作原理 介绍…

click和touch事件触发顺序 糊里糊涂解决的奇怪bug

问题详情 在嵌入式硬件设备里,测试 “点击input密码框,弹出第三方自带键盘,点击密码框旁的小眼睛,切换输入内容加密状态,键盘收起/弹出状态不变” 的功能逻辑;实际情况却是 “点击键盘或input框之外的任何地…

【0基础PS】Photoshop (PS) 理论知识

目录前言一、Photoshop 核心概念与定位​二、图像基础理论​三、图层理论:PS 的核心工作机制​四、选区与蒙版​五、调色核心理论​六、常用文件格式​学习建议​总结前言 在数字图像编辑领域,Photoshop(简称 PS)无疑是行业标杆级…

数据库 设计 pdm comment列表显示和生成建表sql

按如下步骤 生成见建表语句 comment非空使用comment 生成字段注释, 空的时候使用name 生成字段注释 sql脚本模板编辑 参考 PowerDesigner生成mysql字段comment 注释-腾讯云开发者社区-腾讯云 版本不同这边的设置不同 这个勾打上

嵌入式基础知识复习(C语言)

知识扩展7.28 嵌入式产品特点、开发环境、计算机组成、Linux终端初识1、嵌入式产品。特点:低功耗、根据用户需求定制。硬件:arm处理器。软件:Linux操作系统arm架构:精简指令集、低功耗(移动/嵌入式)。 …

LeetCode Hot 100 寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。示例 1:输入:nums1 [1,3], nums2 [2] 输出:2.00000 解释&#x…

监控场景视频质量异常修复:陌讯动态增强算法实战解析

原创声明:本文为原创技术解析,核心技术参数与架构引用自《陌讯技术白皮书》,禁止未经授权转载。一、行业痛点:视频质量异常的连锁难题在安防监控、智慧交通等场景中,视频质量异常已成为 AI 分析的主要瓶颈。据行业报告…

一个简单的mvvm示例与数据双向绑定

这就是一个简单的数据双向绑定的demo,参考即可(cmakelist我没按他的写,但是大差不差) 目录 1.示例demo File: CMakeLists.txt File: main.cpp File: model/physiologymodel.cpp File: viewmodel/physiologyviewmodel.h Fil…

哈希的概念及其应用

哈希的概念及其应用哈希概念常见的哈希其他哈希字符串哈希(算法竞赛常用)字符串哈希OJP3370 【模板】字符串哈希 - 洛谷P10468 兔子与兔子 - 洛谷哈希冲突哈希函数设计原则哈希冲突解决方法—闭散列闭散列的线性探测闭散列的二次探测哈希冲突解决方法—开…

【分布式的个人博客部署】

综合项目-搭建个人博客一、运行环境二、基础配置三、业务需求第一步:准备工作1、配置静态IP2、修改hosts映射3、开启防火墙4、时间同步5、配置免密ssh登录第二步:环境搭建1、Server-web端安装LNMP环境软件2、Server-NFS-DNS端上传博客软件3、Server-NFS-…

蓝桥杯----DS18B20温度传感器

(二)、温度传感器1、One-Wire总线One-Wire总线利用一根线实现双向通信。因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。基本的时序包括复位及应答时序、写一位时序读一位时序。单总线即只有一根数据线,系统中的数…

科技赋能成长 脑力启迪未来

——西安臻昊科技与秦岭云数智共筑脑科学教育新生态 2025年6月26日,西安臻昊科技(集团)有限责任公司与秦岭云数智(陕西)科技有限公司正式签署脑象评测技术战略合作协议,双方将依托技术互补与资源协同&#…

Docker部署的PostgreSQL慢查询日志配置指南

目录 1. 核心步骤 1.1 修改配置文件 1.2 动态加载配置(无需重启容器) 1.3 验证配置生效 1.3.1 查看参数 1.3.2 执行测试慢查询 2. 高级用法 2.1 使用分析工具 2.2 启用扩展 3. 注意事项 3.1 日志目录权限 3.2 性能影响 配置Docker部署的Pos…

C# 入门教程(四)委托详解

文章目录1、什么是委托2、委托的声明(自定义委托)3、委托的使用3.1 实例:把方法当作参数传给另一个方法3.2 注意:难精通易使用功能强大东西,一旦被滥用则后果非常严重4、委托的高级使用4.1 多播(multicast)委托4.2隐式…