你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

部署 Web 静态文件

注意

Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。

本文适用于:❌ 基本版/标准版 ✔️ 企业版

本文介绍如何使用 Tanzu Web Server buildpack 将静态文件部署到 Azure Spring Apps Enterprise 计划实例。 如果你的应用程序纯粹用于保存使用所选 JavaScript 框架生成的静态文件(如 HTML、CSS 或前端应用程序),则此方法非常有用。 可以使用自动配置的 Web 服务器(HTTPD 和 NGINX)直接部署这些应用程序来为这些资产提供服务。

先决条件

  • 已预配的 Azure Spring Apps Enterprise 计划实例。 有关详细信息,请参阅 快速入门:使用企业计划生成应用并将其部署到 Azure Spring Apps。
  • 在 Azure Spring Apps 中运行的一个或多个应用程序。
  • Azure CLI 2.45.0 或更高版本。
  • 静态文件或动态前端应用程序 - 例如 React 应用。

部署静态文件

注意

本文重点介绍特定于 Web 静态文件部署的部署配置和故障排除。 若要了解 Azure Spring Apps Enterprise 计划的常规生成和部署方案,请参阅使用 Tanzu 生成服务以及如何部署 polyglot 应用的按需生成服务部分

可以通过以下方式使用 Nginx 或 httpd Web 服务器将静态文件部署到 Azure Spring 应用程序:

  • 可以直接部署静态文件。 Azure Spring Apps 会自动配置指定的 Web 服务器来提供静态文件。
  • 可以在所选的 JavaScript 框架中创建前端应用程序,然后从源代码部署动态前端应用程序。 Azure Spring Apps 将应用构建为静态内容,并使用配置的 Web 服务器为静态文件提供服务。

还可以创建服务器配置文件来自定义 Web 服务器。

部署示例

本部分中的 Azure CLI 示例演示了为两个容器注册表方案生成和部署静态文件:

  • Azure Spring Apps 托管容器注册表。
  • 用户托管容器注册表。

直接生成和部署静态文件

此示例使用自动生成的默认服务器配置文件直接部署静态文件。

以下命令部署静态文件:

az spring app deploy
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <app-name> \
    --source-path <path-to-source-code> \
    --build-env BP_WEB_SERVER=nginx

有关使用环境变量的信息,请参阅“ 配置自动生成的服务器配置文件 ”部分。

生成前端应用程序并将其部署为静态内容

此示例从源代码部署动态前端应用程序。

以下命令部署应用程序:

az spring app deploy \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <app-name> \
    --source-path <path-to-source-code> \
    --build-env BP_WEB_SERVER=nginx BP_NODE_RUN_SCRIPTS=build BP_WEB_SERVER_ROOT=build

使用自定义配置文件生成和部署静态文件

此示例使用自定义的服务器配置文件部署静态文件。

以下命令部署应用程序:

az spring app deploy \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <app-name> \
    --source-path <path-to-source-code>

有关详细信息,请参阅本文的“ 使用自定义服务器配置文件 ”部分。

示例代码

注意

示例代码由 Paketo 开源社区维护。

Paketo BuildPack 示例演示了几种不同应用程序类型的常见用例,包括以下用例:

  • 使用 BP_WEB_SERVER 通过默认服务器配置文件提供静态文件,可选择 HTTPDNGINX
  • 使用 Node 程序包管理器将 React 应用构建到 Web 服务器可以提供的静态文件中。 使用以下步骤:
    1. 在 package.json 文件的 scripts 属性下定义一个脚本,用于生成生产就绪静态资产。 对于 React,它是 build
    2. 了解运行生成脚本后静态资产的存储位置。 对于 React,静态资产默认存储在 ./build 中。
    3. BP_NODE_RUN_SCRIPTS 设置为生成脚本的名称。
    4. BP_WEB_SERVER_ROOT 设置为生成输出目录。
  • 使用 HTTPDNGINX,通过你自己的服务器配置文件提供静态文件。

配置自动生成的服务器配置文件

可以使用环境变量来修改自动生成的服务器配置文件。 下表显示了支持的环境变量。

环境变量 支持的值 说明
BP_WEB_SERVER nginx 或 httpd 指定 Web 服务器类型,对于 Nginx,类型为 nginx,对于 Apache HTTP 服务器,类型为 httpd。 使用自动生成的服务器配置文件时是必需的。
BP_WEB_SERVER_ROOT 绝对文件路径或相对于 /workspace 的文件路径。 设置静态文件的根目录。 默认为 public
BP_WEB_SERVER_ENABLE_PUSH_STATE truefalse 为应用程序启用推送状态路由。 无论请求的路由如何,始终提供 index.html。 对于单页 Web 应用程序非常有用。
BP_WEB_SERVER_FORCE_HTTPS truefalse 通过将所有请求重定向为使用 HTTPS 协议,可对服务器连接强制执行 HTTPS.

不支持以下环境变量。

  • BP_LIVE_RELOAD_ENABLED
  • BP_NGINX_VERSION
  • BP_HTTPD_VERSION

使用自定义的服务器配置文件

可以使用自定义的服务器配置文件来配置 Web 服务器。 下表显示了配置文件路径:

Web 服务器 默认配置文件路径 如何自定义服务器配置文件路径
nginx 源代码根路径下的 nginx.conf 使用环境变量 BP_NGINX_CONF_LOCATION 指定配置文件名称。 将文件置于源代码的根路径下。
httpd 源代码的根路径下的 httpd.conf 不支持。

配置文件必须符合下表中所述的限制。

配置 说明 Nginx 配置 Httpd 配置
正在侦听端口 Web 服务器必须侦听端口 8080。 服务将检查 TCP 上的端口以获取准备情况以及是否上线。 必须在配置文件中使用模板化变量 PORT。 Web 服务器启动时,会注入相应的端口号。 listen {{PORT}} Listen "${PORT}"
日志路径 控制台的配置日志路径。 access_log /dev/stdout, error_log stderr ErrorLog /proc/self/fd/2
具有写权限的文件路径 Web 服务器被授予对 /tmp 目录的写入权限。 配置完整路径需要 /tmp 目录下的写入权限。 例如:client_body_temp_path /tmp/client_body_temp
客户端请求可接受的的最大正文大小 Web 服务器位于网关后面。 客户端请求的最大接受正文大小在网关中设置为 500 米,Web 服务器的值必须小于 500 m。 client_max_body_size 应小于 500 米。 LimitRequestBody 应小于 500 米。

Buildpack 绑定

将静态文件部署到 Azure Spring Apps Enterprise 计划支持 Dynatrace buildpack 绑定。 不支持 htpasswd BuildPack 绑定。

有关详细信息,请参阅如何配置 APM 集成和 CA 证书

常见的生成和部署错误

将静态文件部署到 Azure Spring Apps Enterprise 实例可能会生成以下常见生成错误:

  • ERROR: No buildpack groups passed detection.
  • ERROR: Please check that you're running against the correct path.
  • ERROR: failed to detect: no buildpacks participating

这些错误的根本原因是没有指定 Web 服务器类型。 要解决这些错误,请将 BP_WEB_SERVER 环境变量设置为 nginxhttpd

下表介绍了将静态文件部署到 Azure Spring Apps Enterprise 时的常见部署错误。

错误消息 根本原因 解决方案
112404: Exit code 0: purposely stopped, please refer to https://aka.ms/exitcode Web 服务器无法启动。 验证服务器配置文件以查看是否存在配置错误。 然后,检查配置文件是否符合“使用自定义服务器配置文件”部分中所述的限制。
mkdir() "/var/client_body_temp" failed (13: Permission denied) Web 服务器对指定的路径没有写入权限。 在 /tmp 目录下配置路径;例如 /tmp/client_body_temp。

后续步骤