For LINUX platformsFor Windows platforms

배치 REST API를 사용한 Node.js 서버 배치

DeployService REST API를 사용하여 Node.js 애플리케이션을 집합체의 멤버로서 배치할 수 있습니다. Node.js 집합체 멤버를 이 문서에서는 Node.js 서버라고 합니다.

시작하기 전에

Node.js 서버를 설치할 대상 호스트를 판별하십시오. 대상 호스트에 Node.js V4apiconnect-collective-member npm 패키지를 설치하십시오. Linux에서 Node.js 서버에 대한 지원을 설치할 명령은 다음과 같습니다.

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 버전이 지원되는지 확인하려면 Node.js를 설치한 후 명령행의 Node.js 설치 디렉토리에서 node --version을 실행하십시오. 예를 들면 다음과 같습니다.

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 애플리케이션을 선택하십시오. 애플리케이션은 해당 종속 항목이 해결되어야 합니다.
      사용자는 .tgz 확장자가 있는 노드 애플리케이션 압축 TAR 아카이브를 Liberty에 배치합니다. 애플리케이션은 일반적으로 다음 디렉토리 구조를 갖습니다.
      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 애플리케이션을 ${wlp.install.dir}, ${wlp.user.dir}${server.output.dir}이 포함된 기본 readDir 디렉토리 중 하나에 두거나, 기본 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(deployVariable)을 참조하십시오.

  4. Node.js 서버를 설치하려는 호스트를 집합체 제어기에 등록하십시오.

    호스트를 등록하면 집합체 제어기가 호스트의 파일, 명령 및 기타 자원에 액세스할 수 있게 됩니다. 대상 호스트를 등록하려면 wlpn-collective registerHost 명령을 사용하십시오. 호스트가 이미 등록된 경우에는 updateHost 명령을 사용하여 등록 정보를 재설정할 수 있습니다.

    중요사항: wlpn-collective registerHost 또는 updateHost 명령을 멤버 서버를 배치하기 위해 나중에 사용할 사용자로서 실행해야 합니다. 예를 들어, root 사용자로서 명령을 실행한 후 나중에 다른 사용자로서 멤버를 배치하는 경우, DeployService가 파일을 /root/wlpn 디렉토리에 푸시할 권한이 없기 때문에 배치가 실패합니다.

    명령 --host, --port, --user--password 매개변수에 대한 값을 찾으려면 제어기의 server.xml 파일을 보십시오. 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의 최종 상태를 얻을 수도 있습니다. 전체 결과를 얻으려면 다음 정보를 사용하십시오. 리턴되는 stdoutstderr 정보가 문제점을 진단하는 데 도움이 될 수 있습니다.

  • 배치 조작의 전체 결과를 가져오십시오. {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