您可以使用 DeployService REST API 将 Liberty 服务器作为集合体的成员部署。
开始之前
创建并
打包要部署的
Liberty 服务器。
- 如果您没有要打包的现有服务器,请运行 create 命令来创建新的服务器。
./server create member1
- 如果您具有要打包的现有服务器,请确保要打包的服务器已停止。
- 运行 package 命令以创建服务器软件包。
./server package member1
此命令用于创建服务器软件包,例如,member1.zip。
确保为远程执行代理程序 (RXA) 设置了目标主机。请参阅设置 RXA 以执行 Liberty 集合体操作。
此外,确保目标主机具有 cURL 实用程序和 unzip 实用程序,以及在对目标部署位置具有操作系统权限的用户的环境(路径)中包含对 jar 实用程序的 Java 支持。
此用户必须为注册主机期间为远程过程调用 (RPC) 用户 --rpcUser 指定的相同用户。在步骤 3 中注册主机。
过程
- 将 collectiveController 语句添加到控制器 server.xml 文件。将 user 和 password 值设置为控制器管理用户标识和密码。例如,使用控制器 server.xml 文件中 <quickStartSecurity userName="admin"
userPassword="adminpwd" /> 语句中的值。
<collectiveController user="admin" password="adminpwd" />
- 查看可用的部署规则。
- 调用用于以 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"}
- 必要时,通过将 DeployRules 添加到控制器配置来创建您自己的部署规则。请参阅部署规则 (deployRule)。
- 使服务器软件包可用于控制器。
完成以下某项操作:
- 向集合体控制器注册要安装 Liberty 服务器的主机。
注册主机使得集合体控制器可以访问该主机上的文件、命令和其他资源。可以使用
registerHost 命令来注册目标主机。如果已注册主机,那么可使用
updateHost 命令重置注册信息。
要点: 请确保以稍后将用于部署成员服务器的用户身份运行 collective registerHost 或 updateHost 命令。例如,如果您以 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 是必需的。--hostWritePath 的 directory 值必须为部署规则中指定的 targetDir,或者为要安装 Liberty 服务器的主机上 targetDir 的父目录。您可以指定多个 --hostWritePath 参数;例如:--hostWritePath=/dir1 --hostWritePath=/dir2
有关 registerHost 和 updateHost 命令的更多信息,请参阅向 Liberty 集合体注册主机。
- 部署 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" }
]
}
注意: targetDir 和 serverPackageDir 变量是 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。使用以下信息来获取完成结果。返回的
stdout 和 stderr 信息可帮助您诊断问题。
- 获取部署操作的完成结果。对 {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
要获取状态和结果,请完成类似于部署的步骤。