您可以使用 DeployService REST API,將 Node.js 應用程式部署成群體的成員。在本說明文件中,Node.js 群體成員稱為
Node.js server。
開始之前
決定要在其中安裝 Node.js 伺服器的目標主機。安裝 Node.js 第 4 版和
apiconnect-collective-member npm 套件至目標主機。在 Linux 上安裝 Node.js 伺服器支援的指令如下:
npm install -g apiconnect-collective-member
Liberty 支援 Node 4.x 版和 6.x 版。
![[16.0.0.x]](../ng_v1600x.gif)
Liberty 支援 Node 4.x 版。
安裝 Node.js 之後,請在 Node.js 安裝目錄從指令行執行 node --version,以確定您具有支援的 Node 版本;例如:
C:\nodejs>node --version
v4.7.3
每一個目標主機都需要 RXA 或 SSH。請參閱 設定 RXA 以執行 Liberty 群體作業。
程序
- 在控制器 server.xml 檔中,設定群體控制器的使用者名稱與密碼;例如:
<collectiveController user="admin" password="adminpwd" />
- 將 Node.js 應用程式新增至群體控制器。
- 選取要安裝的 Node.js 應用程式。應用程式必須已解析其相依關係。
您會將節點應用程式 TAR 壓縮保存檔(副檔名為
.tgz)部署至
Liberty。應用程式通常具有下列的目錄結構:
package/
app.js
package.json
node_modules/..
server.json
- app.js 是應用程式。
- 依照 Node.js npm 的要求,package.json 含有應用程式的相依關係。
- node_modules/.. 目錄提供應用程式使用的併入項目,這些併入項目是從 package.json 產生。
- 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)。
- 向群體控制器登錄您要在其中安裝 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 指令。
- 檢閱可用的部署規則。
- 呼叫 REST API,以便以 JSON 結構傳回可用的部署規則。 使用可呼叫 REST API 的工具來取得可用的部署規則。
GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule
這項呼叫會以 JSON 結構傳回部署規則;例如:
![[16.0.0.3 以及更新版本]](../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
- 取得部署作業的簡短狀態。將步驟 6 中的記號用於
{token}。因此,以步驟 6 中的 {"id":3} 回覆記號來說,請將 3 用於
{token}。
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 資訊可協助您診斷問題。
- 取得部署作業的完整結果。將步驟 6 中的記號用於
{token}。因此,以步驟 6 中的 {"id":3} 回覆記號來說,請將 3 用於
{token}。
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
如果要取得狀態和結果,請遵循類似於部署的步驟。