適用於 LINUX 平台適用於 Windows 平台[16.0.0.3 以及更新版本]

使用部署 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 支援。 這個使用者必須是在登錄主機期間,針對 --rpcUser 所指定的相同使用者(遠端程序呼叫 (RPC) 使用者)。您在步驟 3 登錄主機。

程序

  1. 新增 collectiveController 陳述式至控制器 server.xml 檔中。 將 userpassword 值設為控制器管理使用者 ID 和密碼。 例如,使用控制器 server.xml 檔的 <quickStartSecurity userName="admin" userPassword="adminpwd" /> 陳述式中的值。
    <collectiveController user="admin" password="adminpwd" />
  2. 檢閱可用的部署規則。
    1. 呼叫 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"}
    2. 必要的話,請將 DeployRules 新增至控制器配置,來建立您自己的部署規則。請參閱部署規則 (deployRule)
    3. 提供伺服器套件給控制器使用。

      完成下列一項動作:

      • 將伺服器套件放入其中一個預設 readDir 目錄中(包括 ${wlp.install.dir}${wlp.user.dir}${server.output.dir}),或放入預設 readDir 目錄的子目錄中。
      • 將指向伺服器套件位置的 remoteFileAccess 陳述式,新增至控制器 server.xml 檔。第一個 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 指令來重設登錄資訊。

    重要: 確保您執行群體 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
  • 取得部署作業的簡短狀態。將步驟 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。請利用下列資訊,來取得完整結果。所傳回的 stdoutstderr 資訊可協助您診斷問題。

  • 取得部署作業的完整結果。將步驟 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
    如果要取得狀態和結果,請遵循類似於部署的步驟。

指示主題類型的圖示 作業主題

檔名:twlp_deployservice_liberty.html