For LINUX platformsFor Windows platforms

Despliegue de servidores Node.js utilizando API REST de despliegue

Puede desplegar aplicaciones Node.js como miembros de un colectivo utilizando las API REST DeployService. En esta documentación, un miembro de colectivo de Node.js se denomina servidor Node.js.

Antes de empezar

Determine los hosts de destino en los cuales desea instalar servidores Node.js. Instale Node.js V4 y el paquete npm apiconnect-collective-member en los hosts de destino. El mandato para instalar el soporte para servidores Node.js en Linux es:

npm install -g apiconnect-collective-member

[17.0.0.2 and later]Liberty admite las versiones 4.x y 6.x de Node.

[16.0.0.x][17.0.0.1]Liberty admite la versión 4.x de Node.

Tras instalar Node.js, ejecute node --version desde una línea de mandatos en el directorio de instalación de Node.js para asegurarse de que tiene una versión de Node soportada; por ejemplo:

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

Cada host de destino necesita RXA o SSH. Consulte Configuración de RXA para operaciones de colectivo de Liberty.

Procedimiento

  1. Establezca un nombre de usuario y una contraseña para el controlador colectivo en el archivo de controlador server.xml; por ejemplo:
    <collectiveController user="admin" password="adminpwd" />
  2. Añada una aplicación Node.js al controlador colectivo.
    1. Seleccione una aplicación Node.js para instalar. La aplicación debe tener sus dependencias resueltas.
      Desplegará en Liberty un archivo TAR comprimido de la aplicación del nodo con la extensión .tgz. Normalmente, la aplicación tiene la estructura de directorios siguientes:
      package/
            app.js
            package.json
            módulos_nodo/.. 
            server.json
      • app.js es la aplicación.
      • package.json tiene dependencias para la aplicación, como lo exige el npm Node.js.
      • módulos_nodo/.. Los directorios proporcionan inclusiones utilizadas por la aplicación, generadas a partir de package.json.
      • server.json es un archivo opcional que configura puertos y otros valores.

      Si desea más información sobre la aplicación que se va a desplegar, consulte la descripción del mandato pack en Mandatos apiconnect-collective-member wlpn-server y wlpn-collective.

    2. Haga que la aplicación Node.js esté disponible para el controlador.

      Complete alguna de las acciones siguientes:

      • Coloque la aplicación Node.js en uno de los directorios readDir, que incluyen ${wlp.install.dir}, ${wlp.user.dir} y ${server.output.dir}, o en un subdirectorio de un directorio readDir predeterminado.
      • Añada al archivo server.xml del controlador una sentencia remoteFileAccess que apunte a la ubicación de la aplicación Node.js. La primera sentencia readDir proporciona la ubicación de la aplicación Node.js. Este directorio es la variable de entrada applicationDir que se especifica para el despliegue de deployService en el paso 6. El directorio applicationDir está en el controlador. Las siguientes tres sentencias readDir vuelven a habilitar los directorios readDir predeterminados; por ejemplo:
        <remoteFileAccess>
           <readDir>/tmp/nodejsApplications</readDir>
           <!-- Las sentencias siguientes son necesarias para volver a
        habilitar los directorios readDir predeterminados. -->
           <readDir>${wlp.install.dir}</readDir>
           <readDir>${wlp.user.dir}</readDir>
           <readDir>${server.output.dir}</readDir>
        </remoteFileAccess>
  3. Asegúrese de que el archivo server.xml del controlador tiene sentencias que definen variables de despliegue; por ejemplo:
       <deployVariable name="wlpn.appPort"
    value="9090" increment="1"/> 
       <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

    Las variables de despliegue deben establecer valores que permiten a cada miembro tener un número de puerto exclusivo en los hosts de destino. Consulte DeployVariable (deployVariable).

  4. Registre el host en el cual desea instalar un servidor Node.js con el controlador colectivo.

    El registro de un host permite al controlador colectivo acceder a archivos, mandatos y otros recursos en el host. Utilice el mandato wlpn-collective registerHost para registrar el host de destino. Si un host ya está registrado, puede utilizar el mandato updateHost para restablecer la información de registro.

    Importante: Asegúrese de que ejecuta el mandato wlpn-collective registerHost o updateHost como el usuario que utilizará posteriormente para desplegar el servidor del miembro. Por ejemplo, si ejecuta el mandato como el usuario root y, después, despliega más tarde un miembro como un usuario diferente, el despliegue falla porque DeployService no tiene los derechos para colocar un archivo en el directorio /root/wlpn.

    Consulte el archivo server.xml del controlador para buscar los valores para los parámetros --host, --port, --user y --password del mandato. Para no utilizar un archivo de claves privado SSH como, por ejemplo, para hosts de destino en sistemas operativos Linux o Windows, incluya un usuario y una contraseña de inicio de sesión del sistema operativo estableciendo los parámetros --rpcUser y --rpcUserPassword. El usuario especificado por --rpcUser debe tener derechos de sistema operativo sobre la ubicación de despliegue de destino. Asegúrese de que el mandato incluye --autoAcceptCertificates.

    wlpn-collective registerHost
    host_destino
    --host=host_controlador
    --port=puerto_HTTPS_controlador 
    --user=admin_controlador
    --password=contraseña_admin_controlador
    --rpcUser=usuario_so
    --rpcUserPassword=contraseña_usuario_so
    --autoAcceptCertificates

    Para obtener más información, consulte Mandatos apiconnect-collective-member wlpn-server y wlpn-collective.

  5. Revise las reglas de despliegue disponibles.
    1. Invoque una API REST que devuelva las reglas de despliegue disponibles en la estructura JSON. Utilice una herramienta que pueda invocar las API REST para obtener las reglas de despliegue disponibles.
      GET
      https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/rule 

      La invocación devuelve las reglas de despliegue en la estructura JSON; por ejemplo:

      [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. Si es necesario, cree sus propias reglas de despliegue añadiendo DeployRules a la configuración de controlador. Consulte la Regla de despliegue (deployRule.
  6. Despliegue el servidor Node.js.

    Utilice una herramienta que pueda invocar las API REST para desplegar el servidor Node.js. La regla de despliegue contiene variables que pueden especificar valores de entrada para la invocación como, por ejemplo, el servidor Node.js para utilizar y el nombre de contenedor que se creará. El cuerpo de retorno contiene una señal que puede utilizar para solicitar el estado y los resultados.

    POST
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/deploy
    
    {
       "rule":"Regla de servidor Node.js",
       "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" }
       ]
    }
    Atención: La variable applicationDir es una vía de acceso de directorio codificado en UTF-8. La variable applicationDir es la ubicación de la aplicación Node.js en el controlador colectivo.

    Utilice la señal de retorno, que podría parecerse a {"id":3}, para obtener el estado y los resultados. Puede obtener el resultado en formato JSON.

Qué hacer a continuación

Solicite y revise el estado y los resultados del despliegue.

  • Obtenga una lista de señales de despliegue para operaciones de despliegue solicitadas.
    GET
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/deploy
  • Obtenga un estado abreviado de las operaciones de despliegue. Utilice la señal del paso 6 para {token}. De esta forma, para una señal de retorno {"id":3} del paso 6, utilice 3 para el valor {token}.
    GET
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/{token}/status 
    Durante el despliegue, la API devuelve IN_PROGRESS:
    {"status":{"host_destino":"IN_PROGRESS"}}
    Tras el despliegue, la API devuelve FINISHED:
    {"status":{"host_destino":"FINISHED"}}

    También puede obtener un estado final de ERROR si el despliegue tiene problemas. Utilice la información siguiente para obtener información para obtener los resultados completos. La información de stdout y stderr que se devuelve puede ayudarle a diagnosticar problemas.

  • Obtenga los resultados completos de una operación de despliegue. Utilice la señal del paso 6 para {token}. De esta forma, para una señal de retorno {"id":3} del paso 6, utilice 3 para el valor {token}.
    GET
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/{token}/results
    Una vez completado el despliegue, los resultados contienen información sobre la operación. El ejemplo siguiente muestra resultados para FINISHED:
    {"results":[{"nombre_host":"host_destino","status":"FINISHED","result":0,"stdout":"salida_estándar_despliegue",
    "stderr":"err_estándar_despliegue",
    "deployedArtifactName":"nombre_servidor_de_vars_entrada",
    "deployedUserDir":"directorio_host_destino_para_servidor_desplegado"}]}
Anule el despliegue del servidor Node.js. No tendrá que especificar una regla de despliegue. La regla utilizada para el despliegue se ha almacenado durante el despliegue. Puede utilizar la regla para la anulación del despliegue. Se utiliza la tupla de nombre de host, directorio de usuario y nombre de servidor para anular el despliegue del servidor. Esta tuple se muestra en las páginas de servidor en la herramienta Explorar de Centro de administración.
  • Anule el despliegue de un servidor Node.js.
    POST
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"/root/wlpn",     
       "serverName":"myServerName"
    }
  • Obtenga una lista de señales para operaciones de anulación de despliegue.
    GET
    https://host_controlador:puerto_controlador/ibm/api/collective/v1/deployment/undeploy
    Para obtener el estado y los resultados, siga pasos similares a despliegues.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_deployservice_nodejs.html