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
Liberty prend en charge les versions Node 4.x et 6.x.
![[16.0.0.x]](../ng_v1600x.gif)
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
- 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" />
- Ajoutez une application Node.js au contrôleur de collectivité.
- 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.
- Rendez l'application Node.js disponible pour le contrôleur.
Effectuez l'une des actions suivantes :
- 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).
- 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.
- Examinez les règles de déploiement disponibles.
- 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]](../ng_v16003plus.gif)
{"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"
}
]}
- 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).
- 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.