適用於 LINUX 平台適用於 Windows 平台

使用部署 REST API 來部署 Node.js 伺服器

您可以使用 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

[17.0.0.2 以及更新版本]Liberty 支援 Node 4.x 版和 6.x 版。

[16.0.0.x][17.0.0.1]Liberty 支援 Node 4.x 版。

安裝 Node.js 之後,請在 Node.js 安裝目錄從指令行執行 node --version,以確定您具有支援的 Node 版本;例如:

C:\nodejs>node --version
v4.7.3

每一個目標主機都需要 RXA 或 SSH。請參閱 設定 RXA 以執行 Liberty 群體作業

程序

  1. 在控制器 server.xml 檔中,設定群體控制器的使用者名稱與密碼;例如:
    <collectiveController user="admin" password="adminpwd" />
  2. 將 Node.js 應用程式新增至群體控制器。
    1. 選取要安裝的 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 指令說明。

    2. 提供 Node.js 應用程式給控制器使用。

      完成下列一項動作:

      • 將 Node.js 應用程式放入其中一個預設 readDir 目錄中(包括 ${wlp.install.dir}${wlp.user.dir}${server.output.dir}),或放入預設 readDir 目錄的子目錄中。
      • 將指向 Node.js 應用程式位置的 remoteFileAccess 陳述式,新增至控制器 server.xml 檔。第一個 readDir 陳述式提供 Node.js 應用程式的位置。 這個目錄是您在步驟 6 中,針對 deployService 部署所指定的 applicationDir 輸入變數。applicationDir 目錄位於控制器上。接下來的三個 readDir 陳述式會重新啟用預設 readDir 目錄;例如:
        <remoteFileAccess>
           <readDir>/tmp/nodejsApplications</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. 確定控制器 server.xml 檔中有定義部署變數的陳述式;例如:
       <deployVariable name="wlpn.appPort" value="9090" increment="1"/> 
       <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

    部署變數所設定的值,必須可讓每一個成員在目標主機上具有唯一的埠號。請參閱部署變數 (deployVariable)

  4. 向群體控制器登錄您要在其中安裝 Node.js 伺服器的主機。

    藉由登錄主機,可讓群體控制器存取主機上的檔案、指令和其他資源。請利用 wlpn-collective registerHost 指令,來登錄目標主機。如果主機已登錄,您可以使用 updateHost 指令來重設登錄資訊。

    重要: 請確定您是以之後部署成員伺服器時要使用的使用者身分,來執行 wlpn-collective registerHostupdateHost 指令。比方說,如果您以 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 指令

  5. 檢閱可用的部署規則。
    1. 呼叫 REST API,以便以 JSON 結構傳回可用的部署規則。 使用可呼叫 REST API 的工具來取得可用的部署規則。
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule 

      這項呼叫會以 JSON 結構傳回部署規則;例如:

      [16.0.0.3 以及更新版本]
      {"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"
       }
      ]}
    2. 必要的話,請將 DeployRules 新增至控制器配置,來建立您自己的部署規則。請參閱部署規則 (deployRule)
  6. 部署 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。請利用下列資訊,來取得完整結果。所傳回的 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"}]}
取消部署 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
    如果要取得狀態和結果,請遵循類似於部署的步驟。

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

檔名:twlp_deployservice_nodejs.html