CentOS 7.9 部署.net 6.0 Web应用

1 .net环境安装

1.1 使用包管理器安装

添加仓储指令

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

执⾏安装命令:

1、如果不需要在linux上编译源码

yum install dotnet-runtime-6.0

2、如果需要在linux上编译源码

yum install dotnet-sdk-6.0

3、如果是有webapi接⼝或者⽹页

yum install aspnetcore-runtime-6.0

安装完成后输⼊指令

dotnet --info 查看是否安装正确

Centos7中安装Net5.0运⾏时,只需要把6.0替换为5.0

1.2 下载安装

SDK及运行时下载地址:

下载 .NET 6.0 (Linux、macOS 和 Windows) (microsoft.com)

https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0

(1)文件下载:Linux上可以采用wget等下载,对于局域网实际服务器,考虑不可上外网,那么下载到本地,在通过ssh、sftp等方式传到服务器。

以本次部署为例,运行时压缩包上传至远程服务器/data/dotnet目录下。

(2)解压文件:

sudo tar zxvf dotnet-runtime-6.0.8-linux-x64.tar.gz
sudo tar zxvf aspnetcore-runtime-6.0.8-linux-x64.tar.gz

(3)配置环境变量:

[root@localhost dotnet]# vi /etc/profile

在文件末尾添加dotnet相关环境变量

export PATH=$PATH:/data/dotnet
export DOTNET_ROOT=/data/dotnet

2 部署Web应用

拷贝到特定目录

[root@localhost ~]# dotnet /data/xxx.JWT/xxx.JWT.dll

运行报错,提示包缺失。

Process terminated. Couldn't find a valid ICU package installed on the system. Please install libicu using your package manager and try again. Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support. Please see https://aka.ms/dotnet-missing-libicu for more information.

   at System.Environment.FailFast(System.String)

   at System.Globalization.GlobalizationMode+Settings..cctor()

   at System.Globalization.CultureData.CreateCultureWithInvariantData()

   at System.Globalization.CultureData.get_Invariant()

   at System.Globalization.CultureInfo..cctor()

   at System.Globalization.CultureInfo.get_CachedCulturesByName()

   at System.Globalization.CultureInfo.GetCultureInfo(System.String)

   at System.Reflection.RuntimeAssembly.GetLocale()

   at System.Reflection.RuntimeAssembly.GetName(Boolean)

   at System.Reflection.Assembly.GetName()

   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.Configure(System.Action`2<Microsoft.AspNetCore.Hosting.WebHostBuilderContext,Microsoft.AspNetCore.Builder.IApplicationBuilder>)

   at Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.Configure(Microsoft.AspNetCore.Hosting.IWebHostBuilder, System.Action`2<Microsoft.AspNetCore.Hosting.WebHostBuilderContext,Microsoft.AspNetCore.Builder.IApplicationBuilder>)

   at Microsoft.AspNetCore.Builder.WebApplicationBuilder+<>c__DisplayClass7_0.<.ctor>b__1(Microsoft.AspNetCore.Hosting.IWebHostBuilder)

   at Microsoft.Extensions.Hosting.GenericHostBuilderExtensions+<>c__DisplayClass0_0.<ConfigureWebHostDefaults>b__0(Microsoft.AspNetCore.Hosting.IWebHostBuilder)

   at Microsoft.Extensions.Hosting.GenericHostWebHostBuilderExtensions.ConfigureWebHost(Microsoft.Extensions.Hosting.IHostBuilder, System.Action`1<Microsoft.AspNetCore.Hosting.IWebHostBuilder>, System.Action`1<Microsoft.Extensions.Hosting.WebHostBuilderOptions>)

   at Microsoft.Extensions.Hosting.GenericHostWebHostBuilderExtensions.ConfigureWebHost(Microsoft.Extensions.Hosting.IHostBuilder, System.Action`1<Microsoft.AspNetCore.Hosting.IWebHostBuilder>)

   at Microsoft.Extensions.Hosting.GenericHostBuilderExtensions.ConfigureWebHostDefaults(Microsoft.Extensions.Hosting.IHostBuilder, System.Action`1<Microsoft.AspNetCore.Hosting.IWebHostBuilder>)

   at Microsoft.AspNetCore.Builder.WebApplicationBuilder..ctor(Microsoft.AspNetCore.Builder.WebApplicationOptions, System.Action`1<Microsoft.Extensions.Hosting.IHostBuilder>)

   at Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder(System.String[])

   at Program.<Main>$(System.String[])

Aborted

因缺失libicu出问题了,那就安装libicu

[root@localhost ~]# yum install libicu

运行成功

[root@localhost ~]# dotnet /data/xxx.JWT/xxx.JWT.dll --urls http://*:4600

出现找不到数据库连接的问题,这是因为dotnet运行在别的目录,不能找到应用目录下的appsettings.json导致,为了解决在Linux中找不到appsettings.json的问题,在Program.cs中添加#region中的内容,若在Linux服务器中注册为服务,指定执行目录,则可以自行找到配置文件,无需一下配置:

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
#region 部署到Linux服务器配置
//以CentOS 7为例,若部署为服务,且指定了执行目录,则不需要本段,若需要单独执行,则要考虑。
builder.Services.AddControllers();
builder.Configuration.SetBasePath(AppContext.BaseDirectory);
builder.Configuration.AddJsonFile("appsettings.json", true, true);
#endregion
JWTStartup.CustomJWTConfigureServices(builder.Services, builder.Configuration);
var app = builder.Build();
// Configure the HTTP request pipeline.
JWTStartup.CustomJWTConfigure(app);
app.MapControllers();
app.Run();

使编译生成的Gzmedri.Coop.JWT文件可执行:

chmod +x /data/xxx.JWT/xxx.JWT

运行命令

/data/xxx.JWT/xxx.JWT --urls http://*:4600

防火墙设置:

[root@localhost /]# sudo firewall-cmd –-permanent –-add-port=4600/tcp
[root@localhost /]# sudo firewall-cmd --reload

防火墙的端口操作:

[root@localhost /]# sudo firewall-cmd --permanent --remove-port 4060/tcp

success

[root@localhost /]# sudo firewall-cmd --reload

success

[root@localhost /]# sudo firewall-cmd --list-ports

4600/tcp 4700/tcp

注册为服务,注意dotnet路径要写全,要执行的dll也需要:

[root@localhost /]# vi /etc/systemd/system/epcapijwt.service

[Unit]

Description=EpcApiJWT

[Service]

WorkingDirectory=/data/xxx.JWT

ExecStart=/data/dotnet/dotnet /data/xxx.JWT/xxx.JWT.dll --urls http://*:4600

Restart=always

RestartSec=10

SyslogIdentifier=epcapijwt

User=root

#Environment=ASPNETCORE_ENVIRONMENT=Production

#Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false


[Install]

WantedBy=multi-user.target

[root@localhost /]# systemctl status epcapijwt

● epcapijwt.service - EpcApiJWT

   Loaded: loaded (/etc/systemd/system/epcapijwt.service; disabled; vendor preset: disabled)

   Active: inactive (dead)

[root@localhost /]# systemctl start epcapijwt

[root@localhost /]# systemctl status epcapijwt

● epcapijwt.service - EpcApiJWT

   Loaded: loaded (/etc/systemd/system/epcapijwt.service; disabled; vendor preset: disabled)

   Active: active (running) since Tue 2022-09-13 06:29:26 EDT; 4s ago

 Main PID: 18362 (dotnet)

   CGroup: /system.slice/epcapijwt.service

           └─18362 /data/dotnet/dotnet /data/xxx.JWT/xxx.JWT.dll --urls http://*:4600

Sep 13 06:29:26 localhost.localdomain systemd[1]: Started EpcApiJWT.

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: info: Microsoft.Hosting.Lifetime[14]

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: Now listening on: http://[::]:4600

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: info: Microsoft.Hosting.Lifetime[0]

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: Application started. Press Ctrl+C to shut down.

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: info: Microsoft.Hosting.Lifetime[0]

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: Hosting environment: Production

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: info: Microsoft.Hosting.Lifetime[0]

Sep 13 06:29:27 localhost.localdomain epcapijwt[18362]: Content root path: /data/Gzmedri.Coop.JWT/

实测可行:

https配置的appsettings.json参考

{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5000"
      },
      "HttpsInlineCertFile": {
        "Url": "https://localhost:5001",
        "Certificate": {
          "Path": "<path to .pfx file>",
          "Password": "$CREDENTIAL_PLACEHOLDER$"
        }
      },
      "HttpsInlineCertAndKeyFile": {
        "Url": "https://localhost:5002",
        "Certificate": {
          "Path": "<path to .pem/.crt file>",
          "KeyPath": "<path to .key file>",
          "Password": "$CREDENTIAL_PLACEHOLDER$"
        }
      },
      "HttpsInlineCertStore": {
        "Url": "https://localhost:5003",
        "Certificate": {
          "Subject": "<subject; required>",
          "Store": "<certificate store; required>",
          "Location": "<location; defaults to CurrentUser>",
          "AllowInvalid": "<true or false; defaults to false>"
        }
      },
      "HttpsDefaultCert": {
        "Url": "https://localhost:5004"
      }
    },
    "Certificates": {
      "Default": {
        "Path": "<path to .pfx file>",
        "Password": "$CREDENTIAL_PLACEHOLDER$"
      }
    }
  }
}

参考文章:

https://blog.csdn.net/g313105910/article/details/125290024

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-6.0

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Humbunklung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值