You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单台Linux版Azure App Service部署多个.NET Core API应用

在单台Linux版Azure App Service部署多个.NET Core API的方案

一、Blob存储挂载运行应用的可行性

不可行。Azure App Service的路径映射挂载Blob存储仅支持静态内容读取(如静态文件、配置文件),无法直接从Blob存储运行.NET Core应用:Blob存储是对象存储,不支持文件系统的执行权限、随机写入等特性,无法满足.NET Core应用运行的底层依赖要求。

二、规范实现方案

方案1:虚拟应用(限内置.NET运行时场景)

Linux版App Service的虚拟应用支持仅针对内置.NET运行时的场景,操作步骤如下:

  • 将每个.NET Core API独立发布为部署包,分别放置到/home/site/wwwroot下的子目录(如api1、api2)。
  • 在Azure门户进入App Service的「配置」→「路径映射」,添加虚拟应用规则:
    • 虚拟路径:/api1(对应API的访问路径前缀)
    • 物理路径:/home/site/wwwroot/api1
  • 确保每个API的appsettings.json中配置ASPNETCORE_URLS为http://0.0.0.0:端口(App Service会自动处理端口映射)。
  • 部署时将各API文件上传到对应子目录即可。

方案2:反向代理路由(推荐)

通过部署一个反向代理主应用,将不同路径的请求路由到对应的.NET Core API,实现步骤:

  1. 创建.NET Core空项目,集成YARP作为反向代理,配置路由规则:
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddReverseProxy()
        .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
    var app = builder.Build();
    app.MapReverseProxy();
    app.Run();
    
    对应的appsettings.json配置示例:
    {
      "ReverseProxy": {
        "Routes": {
          "api1": {
            "ClusterId": "api1",
            "Match": {
              "Path": "/api1/{**catch-all}"
            }
          },
          "api2": {
            "ClusterId": "api2",
            "Match": {
              "Path": "/api2/{**catch-all}"
            }
          }
        },
        "Clusters": {
          "api1": {
            "Destinations": {
              "api1": {
                "Address": "http://localhost:5001/"
              }
            }
          },
          "api2": {
            "Destinations": {
              "api2": {
                "Address": "http://localhost:5002/"
              }
            }
          }
        }
      }
    }
    
  2. 编写启动脚本startup.sh,启动所有API和代理服务:
    #!/bin/bash
    dotnet /home/site/wwwroot/Api1.dll --urls=http://0.0.0.0:5001 &
    dotnet /home/site/wwwroot/Api2.dll --urls=http://0.0.0.0:5002 &
    dotnet /home/site/wwwroot/Proxy.dll --urls=http://0.0.0.0:8080
    
  3. 在App Service配置中设置启动命令为./startup.sh,将所有应用文件部署到/home/site/wwwroot目录。

方案3:容器化部署(灵活度最高)

将多个.NET Core API打包为容器镜像,部署到App Service的容器环境:

  • 单镜像多服务:编写Dockerfile将所有API发布文件复制到镜像,通过启动脚本启动多个进程:
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    COPY Api1/. ./Api1/
    COPY Api2/. ./Api2/
    COPY startup.sh .
    RUN chmod +x startup.sh
    EXPOSE 80 5001 5002
    CMD ["./startup.sh"]
    
  • Docker Compose多服务:编写docker-compose.yml定义多个API服务和代理服务,在App Service中选择Docker Compose部署方式,指向容器注册表或上传配置文件。

内容的提问来源于stack exchange,提问作者Vinit Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:09:35