您可以使用 DeployService REST API 部署 Node.js 应用程序作为集合体的成员。在本文档中,Node.js 集合体成员称为
Node.js 服务器。
开始之前
确定要安装 Node.js 服务器的目标主机。在目标主机上安装 Node.js V4 和
apiconnect-collective-member npm 包。用于在 Linux 上安装对 Node.js 服务器的支持的命令如下:
npm install -g apiconnect-collective-member
Liberty 支持节点 V4.x 和 V6.x。
![[16.0.0.x]](../ng_v1600x.gif)
Liberty 支持节点 V4.x。
安装 Node.js 之后,在 Node.js 安装目录中从命令行运行 node --version 以确保您具有受支持的节点版本;例如:
C:\nodejs>node --version
v4.7.3
每个目标主机都需要 RXA 或 SSH。请参阅设置 RXA 以执行 Liberty 集合体操作。
过程
- 在控制器 server.xml 文件中设置集合体控制器用户名和密码;例如:
<collectiveController user="admin" password="adminpwd" />
- 将 Node.js 应用程序添加到集合体控制器。
- 选择要安装的 Node.js 应用程序。该应用程序的依赖关系必须已进行解析。
您将向
Liberty 部署一个扩展名为
.tgz 的节点应用程序压缩 TAR 归档。该应用程序通常具有以下目录结构:
package/
app.js
package.json
node_modules/..
server.json
- app.js 表示应用程序。
- package.json 具有应用程的依赖项,这些依赖项是 Node.js npm 所必需的。
- node_modules/.. 目录提供应用程序所使用的在 package.json 中生成的 includes。
- server.json 是一个可选文件,它用于配置端口和其他设置。
有关要部署的应用程序的更多信息,请参阅 apiconnect-collective-member wlpn-server 和 wlpn-collective 命令中的
pack 命令描述。
- 使 Node.js 应用程序可用于控制器。
完成以下某项操作:
- 确保控制器 server.xml 文件包含用于定义部署变量的语句;例如:
<deployVariable name="wlpn.appPort" value="9090" increment="1"/>
<deployVariable name="wlpn.adminPort" value="9453" increment="1"/>
部署变量必须设置使每个成员都能够在目标主机上具有唯一端口号的值。请参阅 DeployVariable (deployVariable)。
- 向集合体控制器注册要安装 Node.js 服务器的主机。
注册主机使得集合体控制器可以访问该主机上的文件、命令和其他资源。可以使用 wlpn-collective
registerHost 命令来注册目标主机。如果已注册主机,那么可使用
updateHost 命令重置注册信息。
要点: 请确保以稍后将用于部署成员服务器的用户身份运行 wlpn-collective registerHost 或
updateHost 命令。例如,如果您以 root 用户身份运行此命令,然后以另一用户身份部署成员,那么部署将失败,原因是 DeployService 没有将文件推送到 /root/wlpn目录的权限。
请查看控制器的 server.xml
文件以查找命令 --host、--port、--user 和 --password 参数的值。要避免使用 SSH 专用密钥文件(例如,对于 Linux 或 Windows 操作系统上的目标主机),请通过设置 --rpcUser 和 --rpcUserPassword 参数来添加操作系统登录用户和密码。--rpcUser
指定的用户必须具有对目标部署位置的操作系统权限。请确保此命令包含 --autoAcceptCertificates。
wlpn-collective registerHost targetHost --host=controllerHost --port=controllerHTTPSPort
--user=controllerAdmin --password=controllerAdminPassword --rpcUser=osUser --rpcUserPassword=osUserPassword --autoAcceptCertificates
有关更多信息,请参阅apiconnect-collective-member wlpn-server 和 wlpn-collective 命令。
- 查看可用的部署规则。
- 调用用于以 JSON 结构返回可用部署规则的 REST API。 使用可调用 REST API 的工具获取可用部署规则。
GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule
该调用将以 JSON 结构返回部署规则;例如:
![[16.0.0.3 and later]](../ng_v16003plus.gif)
{"rules":
[
{"rules":[
{"id":"Node.js Server Rule","description":"Deploy rule for Node.js servers.","type":"Node.js",
"deployCommands":"curl https://${wlp.admin.host}:${wlp.admin.port}/IBMJMXConnectorREST/file/${applicationDir}%2F${applicationPackage}
--user ${wlp.admin.user}:${wlp.admin.password} -k
--create-dirs -o ${WLPN_USER_DIR}/${serverName}/${applicationPackage} --verbose && ${NODE_BIN}
${WLPN_INSTALL_DIR}/wlpn-server unpack ${serverName} ${WLPN_USER_DIR}/${serverName}/${applicationPackage} && ${NODE_BIN}
${WLPN_INSTALL_DIR}/wlpn-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} --clusterName=${clusterName} --genDeployVars --autoAcceptCertificates",
"undeployCommands":"${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-server stop ${serverName};
${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-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": "${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-server start ${serverName}",
"stopCommands":"${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-server stop ${serverName}",
"restartCommands":"${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-server stop ${serverName} &&
${NODE_BIN} ${WLPN_INSTALL_DIR}/wlpn-server start ${serverName}",
"inputVariables":[
{"name":"applicationPackage","type":"file","description":"Name of the application package (.tgz) to install.","displayName":"Server Package File"},
{"name":"keystorePassword","type":"password","description":"Password for keystores of the deployed server","displayName":"Keystore Password"},
{"name":"serverName","type":"String","description":"Name of the server to run the application.","displayName":"Server Name"},
{"name":"applicationDir","type":"filePath","description":"Location of directory containing the application to deploy.","displayName":"Application Directory"},
{"name":"clusterName","type":"String","description":"Name of the Liberty Node.js cluster.","displayName":"Cluster Name"}
],
"name":"Node.js Server","default":true,"runtimeTypes":[{"displayName":"Node.js"}],"packageType":"Application Package"
}
]}
- 必要时,通过将 DeployRules 添加到控制器配置来创建您自己的部署规则。请参阅部署规则 (deployRule)。
- 部署 Node.js 服务器。
使用可调用 REST API 的工具部署 Node.js 服务器。部署规则包含可用来指定调用的输入值(例如,要使用的 Node.js 服务器和要创建的容器名称)的变量。返回主体包含可用来请求获取状态和结果的令牌。
POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
{
"rule":"Node.js Server Rule",
"hosts":["localhost"],
"variables": [
{ "name":"applicationPackage","value":"express-example-app-1.0.2.tgz" },
{ "name":"serverName","value":"ds-member-ctrl5" },
{ "name":"clusterName","value":"MyCluster" },
{ "name":"keystorePassword","value":"password" },
{ "name":"applicationDir","value":"%2Ftmp%2FnodejsApplications" }
]
}
注意: applicationDir 变量是 UTF-8 编码的目录路径。applicationDir 变量是集合体控制器上 Node.js 应用程序所在的位置。
使用返回令牌(可能类似于 {"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"}]}
取消部署 Node.js 服务器。您无需指定部署规则。用于部署的规则在部署时已进行存储。可以将该规则用于取消部署。包含主机名、用户目录和服务器名称的服务器元组用于取消部署服务器。此元组显示在
管理中心的“浏览”工具中的服务器页面上。
- 取消部署 Node.js 服务器。
POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
{
"host": "myHostName",
"userDir":"/root/wlpn",
"serverName":"myServerName"
}
- 获取用于取消部署操作的令牌的列表。
GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
要获取状态和结果,请完成类似于部署的步骤。