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

部署 Web 静态文件

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

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

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

先决条件

部署静态文件

注意

本文重点介绍特定于 Web 静态文件部署的部署配置和故障排除。 若要了解 Azure Spring Apps 企业计划的常规生成和部署方案,请参阅使用 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
  • 使用节点包管理器将 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 源代码根路径下的 nginx.conf。 不支持。

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

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

Buildpack 绑定

将静态文件部署到 Azure Spring Apps 企业计划便可支持 Dynatrace 生成包绑定。 不支持 htpasswd BuildPack 绑定。

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

常见的生成和部署错误

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

  • 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 企业时的常见部署错误。

错误消息 根本原因 解决方案
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。

后续步骤