Centos 7部署.NET 8网站项目

发布于:2025-08-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

简介

本文详细介绍了在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的文件,双击后,会弹出控制台窗口,里面有个url
    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;
    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

网站公告

今日签到

点亮在社区的每一天
去签到