您可以使用 DeployService REST API,將 Liberty 伺服器部署成群體的成員。
開始之前
建立和
包裝要部署的
Liberty 伺服器。
- 如果沒有現有的伺服器可套裝,請執行 create 指令,建立新的伺服器。
./server create member1
- 如果有現有的伺服器可套裝,請確定您要套裝的伺服器已停止。
- 執行 package 指令,建立伺服器套件。
./server package member1
該指令會建立名為 member1.zip(舉例)的伺服器套件。
確保已設定「遠端執行代理程式 (RXA)」的目標主機。請參閱 設定 RXA 以執行 Liberty 群體作業。
針對在目標部署位置具有作業系統權限的使用者,也請確保目標主機在該使用者的環境(路徑)中,具有 cURL 公用程式、unzip 公用程式,以及 jar 公用程式的 Java 支援。
這個使用者必須是在登錄主機期間,針對 --rpcUser 所指定的相同使用者(遠端程序呼叫 (RPC) 使用者)。您在步驟 3 登錄主機。
程序
- 新增 collectiveController 陳述式至控制器 server.xml 檔中。
將 user 和 password 值設為控制器管理使用者 ID 和密碼。
例如,使用控制器 server.xml 檔的 <quickStartSecurity userName="admin" userPassword="adminpwd" /> 陳述式中的值。
<collectiveController user="admin" password="adminpwd" />
- 檢閱可用的部署規則。
- 呼叫 REST API,以便以 JSON 結構傳回可用的部署規則。 使用可呼叫 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 指令來重設登錄資訊。
重要: 確保您執行群體 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
- 取得部署作業的簡短狀態。將步驟 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"}]}
取消部署
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
如果要取得狀態和結果,請遵循類似於部署的步驟。