托管的目标任务

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

<ph type="x-smartling-placeholder">

取消部署 Hosted Targets 代理

当您取消部署包含 Hosted Targets 应用的 Edge 代理时,关联的 Hosted Targets 应用已取消部署,但未删除底层应用映像。如果您 重新部署代理,则 Hosted Targets 应用也会重新部署。

删除 Hosted Targets 代理

删除 Hosted Targets 代理后,底层运行时实例将停止运行 进行预热不过,应用代码会保留下来。

访问日志文件

日志文件对于调试和问题排查非常有用。您可以查看每种类型的 Hosted Targets 部署:

  • 构建日志 - 显示与部署和构建 Hosted Targets 应用相关的输出。
  • 运行时日志 - 显示与正在运行的 Hosted Targets 应用相关的输出。运行时日志 范围限定为环境,并显示当前部署的代理修订版本的日志信息。

从 Edge 界面访问日志

  1. 访问:apigee.com/edge
  2. 输入您的登录凭据,然后点击 Sign In(登录)。
  3. 选择开发 >API 代理
  4. 选择要查看其日志的代理。
  5. 点击开发标签页。
  6. 要查看构建日志,请点击构建日志
  7. 如需查看运行时日志,请点击运行时日志

通过 API 访问日志

您还可以使用 Edge API 检索 Hosted Targets 日志。有关详情,请参阅 获取缓存的 Node.js 日志

使用专用 npm 代码库

本部分介绍了在以下情况下,如何将 Node.js 代理部署到托管目标: 使用专用 NPM 代码库 开发环境

关于使用私有代码库的注意事项

将 Node.js 应用部署到 Edge 时,项目的所有依赖项都会自动导入 在部署过程中应用 从本质上讲,托管目标会在部署代码时对其运行 npm install。 不过,如果您在开发环境中使用私有 NPM 代码库,则私有 依赖项无法在云端解析。在 在这种情况下,解决方法是在使用--bundled-dependencies 部署实用程序 apigeetool。另请参阅 将 Node.js 从系统部署到 Edge。

apigeetool 上使用 --bundled-dependencies 标志时,您的 Node.js 应用将上传到 Hosted Targets 以及列出的所有本地/私有文件 在 bundledDependencies 数组package.json 中的文件已压缩并与 bundle 一起上传。

请注意,如果您在内部镜像公共 NPM 代码库,部署将失败,不过这种情况并不常见。 如果您的部署包包含指向.npmrcpackage-lock.json 添加到你的私人镜像中在这种情况下,请务必省略 .npmrcpackage-lock.json 从您要部署的代理软件包中选择。

使用专用 NPM 代码库进行部署

如需使用私有 NPM 代码库提供的模块,请按以下步骤操作:

  1. 登录 npm:
    npm login
  2. 获取 npm 身份验证令牌:
    1. 找到您的 .npmrc(应该位于 ~/.npmrc 中)。
    2. 在您的 .npmrc 中,记下如下所示的行末尾的令牌:

      //registry.npmjs.org/:_authToken=****
    3. 或者使用npm token <list | create | revoke>命令列出 或撤消身份验证令牌。请参阅 npm-token 文档了解详情。
  3. 访问键值映射配置页面,如下所述。

    Edge

    如需使用 Edge 界面访问“键值对映射”配置页面,请执行以下操作:

    1. 登录 apigee.com/edge
    2. 选择管理 >环境 >键值对映射

    传统 Edge(私有云)

    如需使用传统版 Edge 界面访问“键值对映射”配置页面,请执行以下操作:

    1. 登录 http://ms-ip:9000,其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。
    2. 选择 API >环境配置 >键值对映射
  4. 点击 + 键值对映射
  5. 在“新建键值对映射”对话框中,输入名称并选择已加密
  6. 点击添加
  7. 在每个 KVM 中,将您之前找到或创建的身份验证令牌添加为新条目 刚刚创建的应用
  8. app.yaml 文件中,添加一个引用 KVM 和密钥的条目 npm 身份验证令牌相关联的数据。代码应如下所示:
  9. env:
    - name: NPM_TOKEN
     valueRef:
       name: npm_store
       key: private_token

    其中:

    • 顶级 name 属性对应于环境的名称 变量。
    • valueRef 下的 name 对应于您要创建的 KVM 创建 Deployment
    • key 属性对应于映射到您所使用的 npm 令牌的键 添加到 KVM 的
  10. 在 package.json 所在的同一目录中创建一个 .npmrc 文件。这个 文件的内容应如下所示:
    //registry.npmjs.org/:_authToken=${NPM_TOKEN}
    如果您没有使用registry.npmjs.org,则可以设置 (在 .npmrc 文件中) 添加一行代码(如 @myscope:registry=https://mycustomregistry.example.org) 另请参阅 npmrc 文档
  11. 上传或更新 Node.js 代理(包含 .npmrc 文件和 app.yaml 文件)。
  12. 确保新的代理或更新后的代理能够部署并支持所需的私有代码库 模块。
  13. 如果代理未部署,请检查构建日志,确认其在安装 .private npm 模块中。如果是:
    1. 在“开发”标签页下,确保存在 .npmrc
    2. 确保您的令牌有效(请尝试在本地安装模块并提供令牌) 在 kvm 中)。
    3. 如果您使用的是自定义范围,请确保已设置该范围。

为捆绑的依赖项指定 NPM 版本

默认情况下,NPM v4 用于在 Hosted Targets 环境中安装捆绑的依赖项。 但是,如果您想使用其他 NPM 版本,可以在 NPM_VERSION 环境变量。您可以在应用的清单文件中设置此变量。如需了解详情,请参阅清单文件元素

如果您使用捆绑式依赖项,并且未指定 NPM_VERSION,则托管目标 默认使用 NPM v4。如果您不使用捆绑的依赖项,则使用随附的 NPM 版本 。

捆绑的依赖项示例

有关通过托管目标演示捆绑依赖项功能的示例,请参阅 如何使用自定义模块通过托管函数创建 Node.js 应用

添加健康检查端点

您可以选择为 Node.js 应用实现健康检查端点。如果您的实例 Node.js 应用开始检查该应用是否已在容器中启动并运行。

默认情况下,Apigee 预期的端点为 /health。你可以更改 方法是在名称为 HOSTED_TARGET_HEALTH_CHECK_PATH。您可以在应用的清单中设置此变量 文件。如需了解详情,请参阅清单文件元素

无需实现健康检查端点。但是,如果您在执行健康检查时 端点,请注意以下事项:

  • 如果您的应用在 Apigee 到达端点时退出,该应用将无法按预期启动。
  • 即使端点返回 404 Not Found HTTP 状态也没关系。/healthHOSTED_TARGET_HEALTH_CHECK_PATH 仅用于检查应用是否正在运行。 系统会忽略实际响应。

更改 NPM 缓存位置

较新版本的 Node.js 使用的 NPM 版本使用 /root/.npm 作为 NPM 缓存。 此位置给托管目标带来了问题,因为该目录位置是只读的 因为托管目标运行时使用的 tmpfs 文件系统中只有 /tmp 可写入。 如需解决此问题,您可以在以下位置设置 npm_config_cache 环境变量: 应用的 app.yaml 文件(清单文件) /tmp 中的某个目录。例如:

  runtime: node
  application: my-express-app
  env:
    - name: npm_config_cache
      value: /tmp/.npm
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  

在不使用 NPM 的情况下运行应用

默认情况下,Hosted Targets 使用 npm start 运行您的 Hosted Target 应用。但是 在上一项任务中,我们讨论了使用 NPM 时遇到的问题,因为较新版本将尝试使用 /root/.npm(针对 NPM 缓存),不可写入,且会导致托管目标 无法启动。虽然上一个任务可以解决这个问题,但另一个选项是 在不使用 NPM 的情况下运行应用为此,您可以使用 commandargsapp.yaml 文件(清单文件) 直接使用 node index.js 运行您的托管目标。例如:

  runtime: node
  application: my-express-app
  command: node
  args:
    - index.js
  env:
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  
当然,您可以使用您认为合适的任何命令,node index.js 只是 示例。