ETJava Beta | Java    注册   登录
  • 搜索:
  • .Net 5.0 WebAPI 发布至 Linux 系统

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos
    如有侵权 请联系我们删除  (页面底部联系我们)  

    〇、前言

    本文主要介绍了在 CentOS 7 上部署 WebAPI 项目的过程。

    先安装 .net 5.0 的环境,再创建一个示例项目并发布至 CentOS 上,同时列明了一些注意的点;最后将 dotnet 命令添加到系统自启动服务。

    一、Linux 环境准备

    1.1 CentOS 7.x 在线安装 .net 5.0

    第一行命令是添加包源,第二行命令是安装.Net Core版本的包
    首先,配置仓库:
    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    然后,执行安装命令,二者其一:

    sudo yum install dotnet-sdk-5.0 -y
    sudo dnf install dotnet-runtime-5.0 -y
    # 使用 dnf 命令时,会出现报错【sudo: dnf: command not found】
    # 这个错误表明你的系统中没有安装 dnf 包管理器,可以手动安装 dnf 的支持:sudo yum install dnf

    1.2 CentOS 8.x 在线安装 .net 5.0

    直接执行命令:
    sudo dnf install dotnet-sdk-5.0

    1.3 查看是否安装成功

    查看当前版本:dotnet --version;
    查看详情:dotnet --info。

    [root@localhost ~]# dotnet --info
    .NET SDK (reflecting any global.json):
     Version:   5.0.408
     Commit:    da985e2a23
    
    Runtime Environment:
     OS Name:     centos
     OS Version:  7
     OS Platform: Linux
     RID:         centos.7-x64
     Base Path:   /usr/share/dotnet/sdk/5.0.408/
    
    Host (useful for support):
      Version: 5.0.17
      Commit:  6a98414363
    
    .NET SDKs installed:
      5.0.408 [/usr/share/dotnet/sdk]
    
    .NET runtimes installed:
      Microsoft.AspNetCore.App 5.0.17 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
      Microsoft.NETCore.App 5.0.17 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
    
    To install additional .NET runtimes or SDKs:
      https://aka.ms/dotnet-download
    [root@localhost ~]#

    二、示例项目创建和发布

    2.1 创建一个测试项目

    下面简单创建一个测试项目:WebAPI.WebApplication.Test。

    选项(Enable OpenAPI support)选中,默认添加对 swagger 框架的支持。

    直接运行起来,看下目标效果:

    http://localhost:58268/swagger/index.html

    http://localhost:58268/WeatherForecast

    2.2 发布步骤

    选择发布至文件系统:

    然后找到发布文件夹:(需要将此文件夹中的文件全部上传至 CentOS 服务器)

    WebAPI.WebApplication.Test\bin\Release\net5.0\publish

    上传至 CentOS 的 /home/webapi.test 文件夹中,备用。(上传方法就略过了

    三、服务开启和配置自启动

    3.1 服务开启

    首先,在 Startup.cs 文件中将 Swagger 的配置放出来:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        // 如下两行,原来在 if 里边,放到外边,就无论是什么环境都可加载 Swagger
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI.WebApplication.Test v1"));
    
        app.UseRouting();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }       

    另外,文件 launchSettings.json,注意如下备注的两个配置项:

    {
      "$schema": "http://json.schemastore.org/launchsettings.json",
      "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iisExpress": {
          "applicationUrl": "http://localhost:25863",
          "sslPort": 0
        }
      },
      "profiles": {
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "launchUrl": "swagger",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        },
        "WebAPI.WebApplication.Test": {
          "commandName": "Project",
          "dotnetRunMessages": "true",
          "launchBrowser": true,
          // 配置路径参数,示例:http://localhost:5000/swagger
          // 路径上要加上 swagger 才能访问
          "launchUrl": "swagger",
          "applicationUrl": "http://localhost:5000",
          "environmentVariables": {
            // 环境变量配置,服务启动时,必须加上对应的环境变量"Development"
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      }
    }

    使用 dotnet 命令直接开启服务试试:

     dotnet /home/webapi.test/WebAPI.WebApplication.Test.dll -server.urls "http://*:5000" --environment Development

    3.2 将服务配置为系统自启动

    在 /etc/systemd/system/ 路径下,新增一个 webapi.test.service 文件,文件内容如下:

    # Unit 文件描述,webapi 为服务文件名
    [Unit]
    Description=weapi.test service
    
    # Service 配置参数
    [Service]
    Type=simple
    GuessMainPID=true
    
    # 自启动项目所在的位置路径
    WorkingDirectory=/home/webapi.test
    StandardOutput=journal
    StandardError=journal
    
    # 自启动项目的命令
    # 用 dotnet 启动,所以前面添加了 dotnet 的路径 /usr/bin/,后边就是 dotnet 命令的配置参数
    ExecStart=/usr/bin/dotnet /home/webapi.test/myProject.Test.dll --Urls=http://*:5000
    Restart=always
    RestartSec=30
    
    [Install]
    WantedBy=multi-user.target

    操作服务的相关命令: 

    # 启动
    systemctl start xxx.service
    # 查看当前状态
    systemctl status xxx.service
    # 重新启动
    systemctl restart xxx.service
    # 查看所有已启动的服务
    systemctl list-units --type=service
    
    # 设置开机自启动
    systemctl enable xxx.service 
    # 停止开机自启动
    systemctl disable xxx.service

    最后,可以执行 reboot 命令,重启服务器后,对服务进行验证。

    参考: https://blog.51cto.com/u_15050718/4565015   https://blog.csdn.net/u010476739/article/details/116710199     https://blog.csdn.net/Dominic_W/article/details/133277301