For LINUX platformsFor Windows platforms[16.0.0.3 and later]

使用部署 REST API 部署 Liberty 服务器

您可以使用 DeployService REST API 将 Liberty 服务器作为集合体的成员部署。

开始之前

创建打包要部署的 Liberty 服务器。
  1. 如果您没有要打包的现有服务器,请运行 create 命令来创建新的服务器。
    ./server create member1
  2. 如果您具有要打包的现有服务器,请确保要打包的服务器已停止。
  3. 运行 package 命令以创建服务器软件包。
    ./server package member1

    此命令用于创建服务器软件包,例如,member1.zip

确保为远程执行代理程序 (RXA) 设置了目标主机。请参阅设置 RXA 以执行 Liberty 集合体操作

此外,确保目标主机具有 cURL 实用程序和 unzip 实用程序,以及在对目标部署位置具有操作系统权限的用户的环境(路径)中包含对 jar 实用程序的 Java 支持。 此用户必须为注册主机期间为远程过程调用 (RPC) 用户 --rpcUser 指定的相同用户。在步骤 3 中注册主机。

过程

  1. collectiveController 语句添加到控制器 server.xml 文件。将 userpassword 值设置为控制器管理用户标识和密码。例如,使用控制器 server.xml 文件中 <quickStartSecurity userName="admin" userPassword="adminpwd" /> 语句中的值。
    <collectiveController user="admin" password="adminpwd" />
  2. 查看可用的部署规则。
    1. 调用用于以 JSON 结构返回可用部署规则的 REST API。 使用可调用 REST API 的工具获取可用部署规则。
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule 

      该调用将以 JSON 结构返回部署规则:

      {
      -"id": "Liberty Server Rule",
      -"description": "Deploy rule for Liberty servers.",
      -"type": "Liberty",
      -"deployCommands": "curl -X GET https://${wlp.admin.host}:${wlp.admin.port}/IBMJMXConnectorREST/file/${serverPackageDir}%2F${serverPackage} --user ${wlp.admin.user}:${wlp.admin.password} -k --create-dirs -o ${targetDir}/${serverPackage}.tmp --verbose && unzip ${targetDir}/${serverPackage}.tmp -d ${targetDir}/${serverPackage} && ${targetDir}/${serverPackage}/${binDir}/collective join ${serverName} --host=${wlp.admin.host} --port=${wlp.admin.port} --user=${wlp.admin.user} --password=${wlp.admin.password} --keystorePassword=${keystorePassword} --hostName=${wlp.deploy.host} --useHostCredentials --createConfigFile=${targetDir}/${serverPackage}/wlp/usr/servers/${serverName}/configDropins/defaults/additionalConfig.xml --autoAcceptCertificates",
      -"undeployCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName}; ${targetDir}/${serverPackage}/${binDir}/collective remove ${serverName} --host=${wlp.admin.host} --port=${wlp.admin.port} --user=${wlp.admin.user} --password=${wlp.admin.password} --autoAcceptCertificates --hostName=${wlp.deploy.host}",
      -"startCommands": "${targetDir}/${serverPackage}/${binDir}/server start ${serverName}",
      -"stopCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName}",
      -"restartCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName} && ${targetDir}/${serverPackage}/${binDir}/server start ${serverName}",
      -"inputVariables": [
      -{
      -"name": "targetDir",
      -"type": "filePath",
      -"description": "The target directory for the Liberty server package to be installed.",
      -"displayName": "Target Directory"},
      -{
      -"name": "keystorePassword",
      -"type": "password",
      -"description": "Password for keystores of the deployed server",
      -"displayName": "Keystore Password"},
      -{
      -"name": "serverPackage",
      -"type": "file",
      -"description": "Name of the Liberty server package to install.",
      -"displayName": "Server Package File"},
      -{
      -"name": "serverPackageDir",
      -"type": "filePath",
      -"description": "Location of directory on the controller containing the server package to deploy.",
      -"displayName": "Package directory"}],
      -"name": "Liberty Server",
      -"default": true,
      -"runtimeTypes": [
      -{
      -"displayName": "Liberty"}],
      -"packageType": "Server Package"}
    2. 必要时,通过将 DeployRules 添加到控制器配置来创建您自己的部署规则。请参阅部署规则 (deployRule)
    3. 使服务器软件包可用于控制器。

      完成以下某项操作:

      • 将服务器软件包放在其中一个缺省 readDir 目录(包括 ${wlp.install.dir}${wlp.user.dir}${server.output.dir}),或者放在缺省 readDir 目录的子目录中。
      • 向控制器 server.xml 文件添加指向服务器软件包位置的 remoteFileAccess 语句。第一个 readDir 语句提供服务器软件包的位置。此目录是在步骤 4 中指定的用于 deployService 部署的 serverPackageDir 输入变量。serverPackageDir 目录在控制器主机上。后续三个 readDir 语句重新启用缺省 readDir 目录;例如:
        <remoteFileAccess>
           <readDir>/tmp/serverPackageDir</readDir>
           <!-- The following statements are required to re-enable the default readDir directories. -->
           <readDir>${wlp.install.dir</readDir>
           <readDir>${wlp.user.dir}</readDir>
           <readDir>${server.output.dir}</readDir>
        </remoteFileAccess>
  3. 向集合体控制器注册要安装 Liberty 服务器的主机。

    注册主机使得集合体控制器可以访问该主机上的文件、命令和其他资源。可以使用 registerHost 命令来注册目标主机。如果已注册主机,那么可使用 updateHost 命令重置注册信息。

    要点: 请确保以稍后将用于部署成员服务器的用户身份运行 collective registerHostupdateHost 命令。例如,如果您以 root 用户身份运行此命令,而稍后以另一用户身份部署成员,那么部署将失败,原因是 DeployService 没有将文件推送到 /root/wlp 目录的权限。
    collective registerHost targetHost --host=controllerHost --port=controllerHTTPSPort 
    --user=controllerAdmin --password=controllerAdminPassword --rpcUser=osUser --rpcUserPassword=osUserPassword --autoAcceptCertificates --hostWritePath=targetDir
    • 需要 --host--port--user--password。要查找这些参数的值,请查看控制器的 server.xml 文件。
    • 如果远程目标主机不支持 SSH 或者您不想使用 SSH 密钥,例如,对于 Linux 或 Windows 操作系统上的目标主机,需要 --rpcUser--rpcUserPassword。将 --rpcUser 设置为操作系统登录用户,将 --rpcUserPassword 设置为密码。--rpcUser 指定的用户必须具有对目标部署位置的操作系统权限。
    • --autoAcceptCertificates 是必需的。
    • --hostWritePath=directory 是必需的。--hostWritePathdirectory 值必须为部署规则中指定的 targetDir,或者为要安装 Liberty 服务器的主机上 targetDir 的父目录。您可以指定多个 --hostWritePath 参数;例如:--hostWritePath=/dir1 --hostWritePath=/dir2

    有关 registerHostupdateHost 命令的更多信息,请参阅向 Liberty 集合体注册主机

  4. 部署 Liberty 服务器。

    使用可调用 REST API 的工具以部署 Liberty 服务器。部署规则包含可指定调用的输入值的变量,例如,要使用的 Liberty 服务器。返回主体包含可用来请求获取状态和结果的令牌。

    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
    
    {
       "rule":"Liberty Server Rule",
       "hosts":["target_host_name"],
       "variables": [
          { "name":"serverPackage","value":"member.zip" },
          { "name":"targetDir","value":"%2Fhome%2Fszhou%2Fdeploy" },
          { "name":"keystorePassword","value":"password" },
          { "name":"serverPackageDir","value":"%2Fusr%2Ftest%2Fsource" }
       ]
    }
    注意: targetDirserverPackageDir 变量是 UTF-8 编码的目录路径。serverPackageDir 变量是集合体控制器上 Liberty 服务器软件包 ZIP 文件所在的位置。

    使用返回令牌(可能类似于 {"id":3})获取状态和结果。 您可以采用 JSON 格式获取输出。

下一步做什么

请求获取并查看部署状态和结果。

  • 获取用于所请求部署操作的部署令牌的列表。
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
  • 获取部署操作的短状态。对 {token} 使用步骤 6 中的令牌。因此,对于步骤 6 中的返回令牌 {"id":3},请对 {token} 使用 3
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/status 
    部署期间,该 API 会返回 IN_PROGRESS
    {"status":{"target_host":"IN_PROGRESS"}}
    部署完成后,该 API 会返回 FINISHED
    {"status":{"target_host":"FINISHED"}}

    如果部署存在问题,那么您可能还会获得最终状态 ERROR。使用以下信息来获取完成结果。返回的 stdoutstderr 信息可帮助您诊断问题。

  • 获取部署操作的完成结果。对 {token} 使用步骤 6 中的令牌。因此,对于步骤 6 中的返回令牌 {"id":3},请对 {token} 使用 3
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/results
    部署完成后,结果将包含有关此操作的信息。以下示例显示 FINISHED 的结果:
    {"results":[{"host_name":"target_host","status":"FINISHED","result":0,"stdout":"deployment_stdout", "stderr":"deployment_stderr", "deployedArtifactName":"serverName_from_inputVars", "deployedUserDir":"target_host_directory_for_deployed_server"}]}
取消部署 Liberty 服务器。您无需指定部署规则。用于部署的规则在部署时已进行存储。可以将该规则用于取消部署。包含主机名、用户目录和服务器名称的服务器元组用于取消部署服务器。此元组显示在管理中心的“浏览”工具中的服务器页面上。
  • 取消部署 Liberty 服务器。
    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"myUserDir",     
       "serverName":"myServerName"
    }
  • 获取用于取消部署操作的令牌的列表。
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    要获取状态和结果,请完成类似于部署的步骤。

用于指示主题类型的图标 任务主题

文件名:twlp_deployservice_liberty.html