更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 在Rocky/CentOS/AlmaLinux上托管ASP.NET应用程序

在Rocky/CentOS/AlmaLinux上托管ASP.NET应用程序

更新时间:2023-02-07 09:14:35浏览次数:835+次

本文介绍使用Apache在Rocky/CentOS/AlmaLinux上托管ASP.NET应用程序的方法。内容包括安装.NET、创建ASP.NET、发布ASP.NET应用程序、安装和配置Apache代理、创建systemd服务及访问ASP.NET应用程序。

简介

ASP.NET是一个免费的web框架,您可以使用HTML、CSS和JavaScript构建令人惊叹的网站。它还可以用于创建Web API,并使用Web套接字等实时技术。它提供了3个用于创建web应用程序的框架,分别是web窗体、ASP.NET MVC和ASP.NET网页。

首选ASP.NET,因为它具有以下功能和优点:

活跃的社区和开源:活跃的开发者社区如Stack Overflow、Microsoft问答等问题提供快速答案。

构建安全应用程序:它支持具有内置功能的行业标准身份验证协议,以帮助保护您的应用程序免受跨站点脚本(XSS)和跨站点请求伪造(CSRF)的影响。

快速且可扩展:在独立的TechEmpower基准测试中,它的性能比任何流行的web框架都快。

Azure上的免费托管:Microsoft Azure上有10个ASP.NET网站的免费托管。您还可以将其部署到任何主要的云平台,或自己的Linux或Windows服务器。

托管ASP.NET应用程序的方法

1、在Rocky/CentOS/AlmaLinux上安装.NET

为了能够使用ASP.NET创建网站,我们需要在Rocky/CentOS/AlmaLinux上安装.NET。在本指南中,我将提供两种实现这一目标的方法。此处介绍的方法包括:使用YUM存储库、使用安装程序脚本。

选项1、使用YUM安装.NET

首先,将Microsoft包签名密钥添加到受信任密钥列表中,并将Microsoft包存储库添加到系统中:

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

添加后,安装.NET SDK,该SDK允许您使用.NET开发应用程序:

sudo yum install dotnet-sdk-7.0

返回信息:

Install  10 Packages

Total download size: 182 M

Installed size: 504 M

Is this ok [y/N]: y

安装后,您不需要安装相应的运行时。ASP.NET核心运行时允许您运行使用.NET制作的未提供运行时的应用程序:

sudo yum install aspnetcore-runtime-7.0

ASP.NET核心运行时的另一种选择是.NET运行时,它不支持ASP.NET核心。可以使用以下命令安装:

sudo yum install dotnet-runtime-7.0

安装后,使用以下命令检查版本:

$ dotnet --version

7.0.101

选项2、使用安装程序脚本安装.NET

此安装程序脚本自动为您安装和配置系统。地址在https://dot.net/v1/dotnet-install.sh。您还可以使用以下命令来拉动Dotnet 7的脚本:

wget https://dot.net/v1/dotnet-install.sh

下载后,使脚本可执行:

sudo chmod +x ./dotnet-install.sh

该脚本将安装最新的长期支持(LTS)SDK版本,地址在https://dotnet.microsoft.com/platform/support/policy/dotnet-core。要安装.NET,请运行以下命令:

./dotnet-install.sh --version latest

您还可以使用以下命令安装最新的主版本,例如7.0:

./dotnet-install.sh --channel 7.0

完成后,导出DOTNET_ROOT和PATH:

export DOTNET_ROOT=$HOME/.dotnet

export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools

现在验证安装:

$ dotnet --version

6.0.404

2、创建ASP.NET应用程序

一旦安装了.NET,我们就可以继续并创建一个示例web应用程序。对于本指南,我们将创建一个名为my-app的示例应用程序:

dotnet new web --output my-app

样本输出:

The template "ASP.NET Core Empty" was created successfully.

Processing post-creation actions...

Running 'dotnet restore' on /home/rocky9/my-app/my-app.csproj...

  Determining projects to restore...

  Restored /home/rocky9/my-app/my-app.csproj (in 85 ms).

Restore succeeded.

之后,您将创建一个应用程序目录my-app,其中包含所有必需的依赖项。这是一个从模板创建的简单Hello World web应用程序。

现在,您可以根据需要修改应用程序。例如,通过删除HTTPS URL,还可以为HTTP提供所需的端口,如下所示:

$ vim my-app/Properties/launchSettings.json

....

  "profiles": {

    "my_app": {

      "commandName": "Project",

      "dotnetRunMessages": true,

      "launchBrowser": true,

      "applicationUrl": "http://localhost:5000",

      "environmentVariables": {

        "ASPNETCORE_ENVIRONMENT": "Development"

.....

如果希望应用程序在不安全的端点上运行,请在开发环境中停用HTTPS重定向中间件,然后通过添加以下行来修改Program.cs文件:

if (!app.Environment.IsDevelopment())

{

    app.UseHttpsRedirection();

}

要运行应用程序,我们将使用以下命令:

dotnet run --project my-app

样本输出:

Building...

info: Microsoft.Hosting.Lifetime[14]

      Now listening on: http://localhost:5000

info: Microsoft.Hosting.Lifetime[0]

      Application started. Press Ctrl+C to shut down.

info: Microsoft.Hosting.Lifetime[0]

      Hosting environment: Development

info: Microsoft.Hosting.Lifetime[0]

      Content root path: /home/rocky9/my-app/

现在,在另一个shell上,验证应用程序是否在提供的端口上运行:

$ curl http://localhost:5000

Hello World!

这表明web应用程序正在按预期工作。因此,我们可以使用CRTL+C停止进程并终止端口上的服务:

sudo killall -9 my-app

3、发布ASP.NET应用程序

一旦应用程序运行,我们就可以发布它。发布可以定义为将应用程序打包到所需的目录中。

发布应用程序的可用方法有:

单文件应用程序:它是自包含的,可以作为单个可执行文件部署,所有依赖文件都包含在单个二进制文件中。

依赖于框架的部署(FDD):应用程序使用共享的系统范围的.NET版本。

自包含部署(SCD):此方法使用Microsoft构建的.NET运行时。

对于本指南,我们将发布一个依赖于框架的应用程序。创建要将应用程序发布到的目录:

sudo mkdir -p /var/www/html/my-app

sudo chown -R $USER /var/www/html/my-app

使用以下命令发布应用程序:

dotnet publish my-app -f net7.0 -c Release -o /var/www/html/my-app

继续之前,请记住提供已安装的.NET版本(net7.0)。

另外,您还可以将应用程序作为自包含部署发布,以减少依赖关系。例如,仅对于RHEL,命令可以是:

dotnet publish my-app -f net7.0 -c Release -o /var/www/html/my-app -r rhel.8-architecture --self-contained false

4、安装和配置Apache代理

使用以下命令在Rocky/CentOS/AlmaLinux上安装Apache web服务器:

sudo yum -y install httpd mod_ssl

安装后,为应用程序创建虚拟主机文件:

sudo vim /etc/httpd/conf.d/helloapp.conf

添加以下行:

<VirtualHost *:*>

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

</VirtualHost>

<VirtualHost *:80>

    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:5000/

    ProxyPassReverse / http://127.0.0.1:5000/

    ServerName www.test.computingforgeeks.com

    ServerAlias *test.computingforgeeks.com

    ErrorLog /var/log/httpd/helloapp-error.log

    CustomLog  /var/log/httpd/helloapp-access.log common

</VirtualHost>

确保相应地将主机名添加到/etc/hosts中。现在重新启动服务:

sudo systemctl restart httpd

sudo systemctl enable httpd

允许端口80通过防火墙:

#用于UFW

sudo ufw allow 80

##用于Firewalld

sudo firewall-cmd --add-port=80/tcp --permanent

sudo firewall-cmd --reload

5、为应用程序创建systemd服务

现在可以为ASAP.NET应用程序创建系统服务文件:

sudo vim /etc/systemd/system/helloapp.service

在文件中,根据需要添加以下行替换:

[Unit]

Description=Example .NET Web API App running on CentOS/Rocky/Alma

[Service]

WorkingDirectory=/var/www/html/my-app

ExecStart=/usr/bin/dotnet /var/www/html/my-app/my-app.dll

Restart=always

# Restart service after 10 seconds if the dotnet service crashes:

RestartSec=10

KillSignal=SIGINT

SyslogIdentifier=dotnet-example

User=computingforgeeks

Group=apache

Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]

WantedBy=multi-user.target

确定.NET安装的确切路径,并在继续之前在ExecStart中替换它:

$ which dotnet

/usr/bin/dotnet

如果使用了安装程序脚本,还可能需要提供系统用户:

$ echo $USER

computingforgeeks

禁用SELinux或将其设置为许可模式:

sudo setenforce 0

保存文件,启动并启用服务:

sudo systemctl start helloapp.service

sudo systemctl enable helloapp.service

验证服务是否正在运行:

$ systemctl status helloapp.service

\

现在,您将在设置的端口上运行服务:

$ sudo ss -plunt|grep 5000

tcp   LISTEN 0      512        127.0.0.1:5000       0.0.0.0:*    users:(("dotnet",pid=76804,fd=114))

tcp   LISTEN 0      512            [::1]:5000          [::]:*    users:(("dotnet",pid=76804,fd=116))

通过SELinux允许此服务:

sudo semanage port -a -t http_port_t -p tcp 5000

6、访问ASP.NET应用程序

您现在可以使用URL访问应用程序,地址格式为http://domain_name,如果一切正常,您将看到您的应用程序,如下所示:

\

至此,已成功完成使用Apache在Rocky/CentOS/AlmaLinux上托管ASP.NET应用程序的操作。现在,您已经将apache设置为转发来自http://127.0.0.1:5000到http://localhost:80,我们还有一个systemd服务,可用于启动和监视ASP.NET应用程序。