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