For LINUX platformsFor Windows platforms

Déploiement des serveurs Node.js à l'aide des API REST de déploiement

Vous pouvez déployer des applications Node.js comme membres d'une collectivité à l'aide des API REST DeployService. Un membre de collectivité Node.js est appelé un serveur Node.js dans cette documentation.

Avant de commencer

Déterminez les hôtes cibles sur lesquels vous souhaitez installer des serveurs Node.js. Installez Node.js V4 et le package npm apiconnect-collective-member sur les hôtes cibles. La commande permettant d'installer une prise en charge pour les serveurs Node.js sur Linux est :

npm install -g apiconnect-collective-member

[17.0.0.2 and later]Liberty prend en charge les versions Node 4.x et 6.x.

[16.0.0.x][17.0.0.1]Liberty prend en charge la version Node 4.x.

Après avoir installé Node.js, exécutez node --version à partir d'une ligne de commande dans le répertoire d'installation Node.js afin de vous assurer que vous avez une version de Node prise en charge, par exemple :

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

Chaque hôte cible nécessite RXA ou SSH. Voir Configuration de RXA pour les opérations de collectivité Liberty.

Procédure

  1. Définissez un nom d'utilisateur et un mot de passe pour le contrôleur de collectivité dans le fichier server.xml du contrôleur, par exemple :
    <collectiveController user="admin" password="adminpwd" />
  2. Ajoutez une application Node.js au contrôleur de collectivité.
    1. Sélectionnez une application Node.js à installer. L'application doit avoir résolu ses dépendances.
      Vous allez déployer sur Liberty une archive TAR compressée d'application de noeud avec l'extension .tgz. L'application possède généralement la structure de répertoire suivante :
      package/
            app.js
            package.json
            node_modules/.. 
            server.json
      • app.js est l'application.
      • package.json possède des dépendances pour l'application, comme requis par le npm Node.js.
      • Les répertoires node_modules/.. fournissent des éléments include utilisés par l'application que génère package.json.
      • server.json est un fichier facultatif qui configure les ports et d'autres paramètres.

      Pour en savoir plus sur l'application à déployer, voir la description de la commande pack dans Commandes apiconnect-collective-member wlpn-server et wlpn-collective.

    2. Rendez l'application Node.js disponible pour le contrôleur.

      Effectuez l'une des actions suivantes :

      • Placez l'application Node.js dans l'un des répertoires readDir par défaut (${wlp.install.dir}, ${wlp.user.dir} ou ${server.output.dir}) ou dans l'un de leurs sous-répertoires.
      • Ajoutez au fichier server.xml du contrôleur une instruction remoteFileAccess pointant vers l'endroit où vous avez placé l'application Node.js. La première instruction readDir fournit cet emplacement. Ce répertoire est la variable d'entrée applicationDir qui est spécifiée pour le déploiement deployService à l'étape 6. Le répertoire applicationDir se trouve sur le contrôleur. Les trois instructions readDir suivantes réactivent les répertoires readDir par défaut ; par exemple :
        <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. Assurez-vous que le fichier server.xml du contrôleur contient des instructions qui définissent les variables de déploiement ; par exemple :
       <deployVariable name="wlpn.appPort" value="9090" increment="1"/> 
       <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

    Les variables de déploiement doivent définir des valeurs qui permettent à chaque membre d'avoir un numéro de port unique sur les hôtes cible. Consultez DeployVariable (deployVariable).

  4. Enregistrez l'hôte sur lequel vous souhaitez installer un serveur Node.js avec le contrôleur de collectivité.

    L'enregistrement d'un hôte permet au contrôleur de collectivité d'accéder aux fichiers, aux commandes et aux autres ressources de l'hôte. Utilisez la commande wlpn-collective registerHost pour enregistrer l'hôte cible. Si un hôte est déjà enregistré, vous pouvez utiliser la commande updateHost pour réinitialiser les informations d'enregistrement.

    Important : Vérifiez que vous exécutez la commande wlpn-collective registerHost ou updateHost avec le nom d'utilisateur que vous utiliserez plus tard pour déployer le serveur membre. Par exemple, si vous exécutez la commande avec le nom d'utilisateur root et déployer ensuite un membre avec un nom d'utilisateur différent, le déploiement échouera car DeployService n'a pas les droits nécessaires pour envoyer un fichier au répertoire /root/wlpn.

    Consultez le fichier server.xml du contrôleur pour trouver les valeurs des paramètres --host, --port, --user et --password de la commande. Pour ne pas utiliser un fichier de clé privée, comme pour les hôtes cibles sur les systèmes d'exploitation Linux ou Windows, incluez un nom d'utilisateur et un mot de passe du système d'exploitation en définissant les paramètres --rpcUser et --rpcUserPassword. L'utilisateur spécifié par --rpcUser doit disposer de droits de système d'exploitation sur l'emplacement de déploiement cible. Vérifiez que la commande inclut --autoAcceptCertificates.

    wlpn-collective registerHost targetHost --host=controllerHost --port=controllerHTTPSPort 
    --user=controllerAdmin --password=controllerAdminPassword --rpcUser=osUser --rpcUserPassword=osUserPassword --autoAcceptCertificates

    Pour plus d'informations, voir Commandes apiconnect-collective-member wlpn-server et wlpn-collective.

  5. Examinez les règles de déploiement disponibles.
    1. Appelez une API REST renvoyant les règles de déploiement disponibles dans la structure JSON. Utiliser un outil capable d'appeler les API REST pour obtenir les règles de déploiement disponibles.
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule 

      L'appel renvoie les règles de déploiement dans la structure JSON, par exemple :

      [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 nécessaire, créez vos propres règles de déploiement en ajoutant DeployRules à votre configuration de contrôleur. Consultez Règle de déploiement (deployRule).
  6. Déployez le serveur Node.js.

    Utiliser un outil capable d'appeler les API REST pour déployer le serveur Node.js. La règle de déploiement contient des variables qui peuvent spécifier les valeurs d'entrée de l'appel, par exemple le serveur Node.js à utiliser et le nom du conteneur à créer. Le corps du retour contient un jeton que vous pouvez utiliser pour les demandes d'état et de résultats.

    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" }
       ]
    }
    Avertissement : La variable applicationDir est un chemin de répertoire codé UTF-8. La variable applicationDir est l'emplacement de l'application Node.js sur le contrôleur de collectivité.

    Utilisez le jeton de retour, par exemple {"id":3}, pour obtenir l'état et les résultats. La sortie peut être obtenue au format JSON.

Que faire ensuite

Demande et révision de l'état et des résultats du déploiement.

  • Obtenez une liste des jetons de déploiement pour les opérations de déploiement sollicitées.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
  • Obtenez un état abrégé des opérations de déploiement. Utilisez le jeton de l'étape 6 pour {token}. Par conséquent, pour un jeton de retour {"id":3} obtenu à l'étape 6, utilisez 3 pour {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/status 
    Durant le déploiement, l'API renvoie IN_PROGRESS:
    {"status":{"target_host":"IN_PROGRESS"}}
    Après le déploiement, l'API renvoie FINISHED:
    {"status":{"target_host":"FINISHED"}}

    Vous pouvez également obtenir un état final de ERROR si le déploiement présente des problèmes. Utilisez les informations suivantes pour obtenir des résultats complets. Les informations stdout et stderr qui sont renvoyées peuvent vous aider à diagnostiquer les problèmes.

  • Obtenez les résultats complets d'une opération de déploiement. Utilisez le jeton de l'étape 6 pour {token}. Par conséquent, pour un jeton de retour {"id":3} obtenu à l'étape 6, utilisez 3 pour {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/results
    Une fois le déploiement terminé, les résultats contiennent des informations sur l'opération. L'exemple suivant affiche les résultats de 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"}]}
Annulez le déploiement du serveur Node.js. Vous n'avez pas besoin de spécifier une règle de déploiement. La règle utilisée pour le déploiement a été enregistrée lors du déploiement. Vous pouvez utiliser la règle pour l'annulation du déploiement. Le tuple serveur du nom d'hôte, du répertoire utilisateur et du nom de serveur est utilisé pour annuler le déploiement du serveur. Ce tuple s'affiche sur les pages serveur de l'outil Explore de Centre d'administration.
  • Annulez le déploiement d'un serveur Node.js.
    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"/root/wlpn",     
       "serverName":"myServerName"
    }
  • Obtenez une liste des jetons pour les opérations d'annulation de déploiement.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    Pour obtenir le statut et les résultats, les étapes à suivre sont similaires à celles des déploiements.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_deployservice_nodejs.html