问题描述
我在 Visual Studio 解决方案中有两个 ASP.NET Core 应用程序(API 和 UI),想要部署到 Linux 上的单个 AWS Elastic Beanstalk 并使用 Kestrel 服务器(单个 URL 和不同端口)。我怎样才能做到这一点?
解决方法
AWS Elastic Beanstalk 支持在 Linux 上的 .NET Core 中运行多个应用程序。 Elastic Beanstalk 的 Linux 上的 .NET Core 文档包含一个关于 Bundling applications 的有用部分,其中包括一个示例 zip 文件,其中包含两个要一起部署在一个 Elastic Beanstalk 实例上的应用程序:dotnet-core-linux-multiple-apps.zip。
您可以将 dotnet-core-linux-multiple-apps.zip
文件直接部署到 Elastic Beanstalk 以查看它的运行情况。有关如何将 zip 文件部署到 Elastic Beanstalk 的明确说明,请参阅 Tutorial - .NET Core on Linux 指南。在您的情况下,您需要上传示例 dotnet-core-linux-multiple-apps.zip
而不是教程引用的单个应用 zip。
每个部署的应用程序都将在每个应用程序的 launchSettings.json
文件中定义的本地端口上的 Elastic Beanstalk 应用程序服务器实例上运行。请注意,此文件在 dotnet-core-linux-multiple-apps.zip
存档中包含的任一示例应用程序中均不可见,因为这些应用程序在包含在 zip 文件中之前已使用 dotnet publish
命令进行编译。
告诉 Elastic Beanstalk 哪些路径映射到每个正在运行的应用程序的本地端口的相关配置位于 platform/nginx/conf.d/elasticbeanstalk/01_custom.conf
文件中,该文件位于 dotnet-core-linux-multiple-apps.zip
中。有关此文件包含的内容的更多信息,请参阅 Linux proxy server config documentation 上的 .NET Core。请注意,默认情况下,Elastic Beanstalk 会将 /
映射到端口 5000
,因此您只需为其他应用程序指定额外的反向代理映射,假设您的应用程序之一配置为在默认情况下运行端口 5000
。
总结一下:
-
通过查看每个应用的
launchSettings.json
文件,确保您知道每个应用将在哪个本地端口上运行。 -
构建您的每个 .NET Core 应用程序并将它们放在一个文件夹中,您将压缩该文件夹以创建要部署到 Elastic Beanstalk 的工件。为了便于论证,我们将此文件夹称为
build
。 -
在您的
build
文件夹(示例名称,见上文)中,创建一个platform/nginx/conf.d/elasticbeanstalk/01_custom.conf
文件,该文件描述了如何将每个应用的端口映射到您想要的路径。 -
压缩您的“build”文件夹。有关此步骤的帮助,请参阅 Configure an application source bundle documentation
-
将您的源包部署到 Elastic Beanstalk。如需此步骤的帮助,请参阅 Managing application versions 文档。