For LINUX platformsFor Windows platforms

デプロイメント REST API を使用した Node.js サーバーのデプロイ

DeployService REST API を使用して、Node.js アプリケーションを、集合のメンバーとしてデプロイできます。 この資料では、Node.js 集合メンバーを Node.js サーバー と呼びます。

始める前に

Node.js サーバーのインストール場所となるターゲット・ホストを決定します。ターゲット・ホストに Node.js V4 をインストールし、apiconnect-collective-member npm パッケージをインストールします。Node.js サーバーのサポートを Linux にインストールするためのコマンドは、次のとおりです。

npm install -g apiconnect-collective-member

[17.0.0.2 and later]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 が必要です。Liberty 集合操作用 RXA のセットアップを参照してください。

手順

  1. 集合コントローラーの server.xml ファイル内に、集合コントローラー用のユーザー名とパスワードを設定します。以下に例を示します。
    <collectiveController user="admin" password="adminpwd" />
  2. Node.js アプリケーションを集合コントローラーに追加します。
    1. インストールする Node.js アプリケーションを選択します。アプリケーションに含まれる依存関係は解決されていることが必要です。
      Liberty にデプロイするのは、ノード・アプリケーションの圧縮 tar アーカイブ (拡張子は .tgz) です。このアプリケーションは、一般に次のようなディレクトリー構造になっています。
      package/
            app.js
            package.json
            node_modules/.. 
            server.json
      • app.js は、アプリケーションです。
      • package.json には、Node.js npm で必要とされるアプリケーションの依存関係が含まれています。
      • 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 ディレクトリーは、コントローラー上にあります。その次の 3 つの 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 (deployVariable) を参照してください。

  4. Node.js サーバーのインストール先となるホストを、集合コントローラーに登録します。

    ホストを登録すると、集合コントローラーがそのホスト上のファイル、コマンド、およびその他のリソースにアクセスできるようになります。 wlpn-collective registerHost コマンドを使用してターゲット・ホストを登録します。ホストが既に登録されている場合は、updateHost コマンドを使用して登録情報をリセットすることができます。

    重要: wlpn-collective registerHost (または updateHost) コマンドは、後でメンバー・サーバーのデプロイに使用するユーザーで実行するようにしてください。例えば、このコマンドを root ユーザーで実行し、後で別のユーザーとしてメンバーをデプロイすると、DeployService にはファイルを /root/wlpn ディレクトリーにプッシュする権限がないため、デプロイメントが失敗します。

    コントローラーの server.xml ファイルで、 コマンド --host--port--user、および --password の各パラメーターの値を見つけます。Linux や Windows などのオペレーティング・システム上のターゲット・ホストの場合などに、SSH 秘密鍵ファイルを使用しない場合は、 --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. 使用可能なデプロイメント・ルールを JSON 構造で返す REST API を起動します。 REST API を起動できるツールを使用して、使用可能なデプロイメント・ルールを取得します。
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule 

      この起動により JSON 構造のデプロイメント・ルールが返されます。以下に例を示します。

      [16.0.0.3 and later]
      {"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
  • デプロイメント操作の簡略状況を取得します。{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 サーバーをアンデプロイします。デプロイ・ルールを指定する必要はありません。デプロイメントで使用されるルールはデプロイ時に保管されました。 そのアンデプロイメント用のルールを使用できます。ホスト名、ユーザー・ディレクトリー、およびサーバー名からなるサーバー・タプルを使用して、サーバーをアンデプロイします。このタプルは、Admin Center の探索ツール内のサーバー・ページに表示されます。
  • 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