Für LINUX-PlattformenFür Windows-Plattformen

Node.js-Server mit REST-Implementierungs-APIs implementieren

Mit den DeployService-REST-APIs können Sie Node.js-Anwendungen als Member eines Verbunds implementieren. Ein Node.js-Verbundmember wird in dieser Dokumentation auch als Node.js-Server bezeichnet.

Vorbereitende Schritte

Legen Sie die Zielhosts fest, auf denen Sie Node.js-Server installieren möchten. Installieren Sie Node.js V4 und das NPM-Paket apiconnect-collective-member auf den Zielhosts. Mit dem folgenden Befehl wird die Unterstützung für Node.js-Server unter Linux installiert:

npm install -g apiconnect-collective-member

[17.0.0.2 und höher]Liberty Unterstützt Node Version 4.x und Node Version 6.x.

[16.0.0.x][17.0.0.1]Liberty unterstützt Node Version 4.x.

Führen Sie nach der Installation von Node.js den Befehl node --version in der Befehlszeile im Installationsverzeichnis von Node.js aus, um sicherzustellen, dass eine unterstützte Node-Version installiert ist, z. B.:

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

Jeder Zielhost benötigt RXA oder SSH. Weitere Informationen hierzu finden Sie unter RXA für Operationen des Liberty-Verbunds einrichten.

Vorgehensweise

  1. Legen Sie einen Benutzernamen und ein Kennwort für den Verbundcontroller in der Controllerdatei server.xml fest:
    <collectiveController user="admin" password="adminpwd" />
  2. Fügen Sie dem Verbundcontroller eine Node.js-Anwendung hinzu.
    1. Wählen Sie eine zu installierende Node.js-Anwendung aus. Die Abhängigkeiten der Anwendung müssen aufgelöst sein.
      Se implementieren ein komprimiertes TAR-Archiv für eine Knotenanwendung, das die Erweiterung .tgz hat, in Liberty. Die Anwendung hat gewöhnlich die folgende Verzeichnisstruktur:
      package/
            app.js
            package.json
            Knotenmodule/.. 
            server.json
      • app.js ist die Anwendung.
      • package.json hat gemäß Node.js-NPM Abhängigkeiten für die Anwendung.
      • Knotenmodule/..-Verzeichnisse enthalten Include-Anweisungen, die von der Anwendung verwendet und aus package.json generiert werden.
      • server.json ist eine optionale Datei, die Ports und weitere Einstellungen konfiguriert.

      Weitere Informationen zu der zu implementierenden Anwendung finden Sie in der Beschreibung des Befehls pack im Abschnitt wlpn-server- und wlpn-collective-Befehle für apiconnect-collective-member.

    2. Stellen Sie dem Controller die Node.js-Anwendung zur Verfügung.

      Führen Sie eine der folgenden Aktionen aus:

      • Speichern Sie die Node.js-Anwendung in einem der readDir-Standardverzeichnisse (${wlp.install.dir}, ${wlp.user.dir} und ${server.output.dir}) oder in einem Unterverzeichnis eines readDir-Standardverzeichnisses.
      • Fügen Sie der Controllerdatei server.xml eine remoteFileAccess-Anweisung hinzu, die auf das Verzeichnis der Node.js-Anwendung verweist. Die erste readDir-Anweisung gibt die Position der Node.js-Anwendung an. Dieses Verzeichnis ist die Eingabevariable applicationDir, die für die deployService-Implementierung in Schritt 6 angegeben wurde. Das Verzeichnis applicationDir befindet sich auf dem Controller. Die nächsten drei readDir-Anweisungen aktivieren die Standardverzeichnisse readDir erneut. Beispiel:
        <remoteFileAccess>
           <readDir>/tmp/nodejsApplications</readDir>
           <!-- Die folgenden Anweisungen sind erforderlich, um die readDir-Standardverzeichnisse wieder zu aktivieren. -->
           <readDir>${wlp.install.dir}</readDir>
           <readDir>${wlp.user.dir}</readDir>
           <readDir>${server.output.dir}</readDir>
        </remoteFileAccess>
  3. Stellen Sie sicher, dass die Datei server.xml Anweisungen enthält, die die Implementierungsvariablen definieren, z. B.:
       <deployVariable name="wlpn.appPort" value="9090" increment="1"/>
       <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

    Die Implementierungsvariablen müssen Werte setzen, die es jedem Member ermöglichen, eine eindeutige Portnummer auf den Zielhosts zu haben. Weitere Informationen finden Sie unter DeployVariable (deployVariable).

  4. Registriert den Host, auf dem Sie einen Node.js-Server mit dem Verbundcontroller installieren möchten.

    Die Registrierung eines Hosts ermöglicht dem Verbundcontroller, auf Dateien, Befehle und andere Ressourcen auf dem Host zuzugreifen. Verwenden Sie zum Registrieren des Zielhosts den wlpn-collective-Befehl registerHost. Wenn bereits ein Host registriert ist, können Sie den Befehl updateHost verwenden, um die Registrierungsinformationen neu zu definieren.

    Wichtig: Sie müssen den wlpn-collective-Befehl registerHost bzw. updateHost unter dem Benutzernamen ausführen, den Sie später auch für die Implementierung des Member-Servers verwenden. Wenn Sie den Befehl beispielsweise als Benutzer root ausführen und ein Member später unter einem anderen Benutzernamen implementieren, schlägt die Implementierung fehl, weil DeployService nicht berechtigt ist, eine Datei mit Push in das Verzeichnis /root/wlpn zu übertragen.

    Suchen Sie in der Datei server.xml des Controllers nach den Werten für die Parameter --host, --port, --user und --password. Definieren Sie mit den Parametern --rpcUser und --rpcUserPassword einen Benutzer und ein Kennwort für die Betriebssystemanmeldung, damit keine SSH-Datei mit privatem Schlüssel wie für Zielhosts mit Linux- oder Windows-Betriebssystemen verwendet werden muss. Der mit --rpcUser angegebene Benutzer muss die Betriebssystemberechtigungen für die Position des Implementierungsziels besitzen. Stellen Sie sicher, dass der Befehl --autoAcceptCertificates enthält.

    wlpn-collective registerHost Zielhost --host=Controller-Host --port=HTTPS-Port_des_Controllers
    --user=Controlleradministrator --password=Kennwort_des_Controlleradministrators --rpcUser=Betriebssystembenutzer --rpcUserPassword=Kennwort_des_Betriebssystembenutzers --autoAcceptCertificates

    Weitere Informationen finden Sie im Artikel wlpn-server- und wlpn-collective-Befehle für apiconnect-collective-member.

  5. Sehen Sie sich die verfügbaren Implementierungsregeln an.
    1. Rufen Sie eine REST-API auf, die die verfügbaren Implementierungsregeln in JSON-Struktur zurückgibt. Verwenden Sie ein Tool, das REST-APIs aufrufen kann, um die verfügbaren Implementierungsregeln abzurufen.
      GET https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/rule

      Der Aufruf gibt die Implementierungsregeln in einer JSON-Struktur zurück, z. B.:

      [16.0.0.3 und höher]
      {"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. Erstellen Sie bei Bedarf eigene Implementierungsregeln, indem Sie DeployRules zu Ihrer Controllerkonfiguration hinzufügen. Weitere Informationen finden Sie unter Deploy Rule (deployRule).
  6. Implementieren Sie den Node.js-Server.

    Verwenden Sie ein Tool, das REST-APIs aufrufen kann, um den Node.js-Server zu implementieren. Die Implementierungsregel enthält Variablen, die Sie verwenden können, um Eingabewerte für den Aufruf anzugeben, wie z. B. den zu verwendenden Node.js-Server und den Namen des zu erstellenden Containers. Der Hauptteil der Rückgabe enthält ein Token, das Sie zum Anfordern von Status und Ergebnissen verwenden können.

    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" }
       ]
    }
    Achtung: Die Variable applicationDir ist ein UTF-8-codierter Verzeichnispfad. Die Variable applicationDir ist die Position der Node.js-Anwendung auf dem Verbundcontroller.

    Verwenden Sie das Rückgabetoken, z. B. {"id":3}, um den Status und die Ergebnisse abzurufen. Sie können die Ausgabe im JSON-Format abrufen.

Nächste Schritte

Fordern Sie den Implementierungsstatus und die Ergebnisse an und überprüfen Sie sie.

  • Rufen Sie eine Liste der Implementierungstoken für angeforderte Implementierungsoperationen ab.
    GET https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/deploy
  • Rufen Sie den Kurzstatus der Implementierungsoperationen ab. Verwenden Sie das Token aus Schritt 6 für {token}. Verwenden Sie daher für ein {"id":3}-Rückgabetoken aus Schritt 6 für {token} den Wert 3.
    GET https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/{token}/status 
    Während der Implementierung gibt die API IN_PROGRESS zurück:
    {"status":{"Zielhost":"IN_PROGRESS"}}
    Nach der Implementierung gibt die API FINISHED zurück:
    {"status":{"Zielhost":"FINISHED"}}

    Sie können auch den Endstatus ERROR erhalten, wenn bei der Implementierung Probleme aufgetreten sind. Verwenden Sie die folgenden Informationen, um die vollständigen Ergebnisse abzurufen: Die zurückgegebenen stdout- und stderr-Informationen können Ihnen bei der Diagnose der Probleme helfen.

  • Rufen Sie die vollständigen Ergebnisse einer Implementierungsoperation ab. Verwenden Sie das Token aus Schritt 6 für {token}. Verwenden Sie daher für ein {"id":3}-Rückgabetoken aus Schritt 6 für {token} den Wert 3.
    GET https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/{token}/results 
    Nach Abschluss der Implementierung enthalten die Ergebnisse Informationen zur Operation. Das folgende Beispiel zeigt die Ergebnisse für FINISHED:
    {"results":[{"Hostname":"Zielhost","status":"FINISHED","result":0,"stdout":"stdout_für_Implementierung", "stderr":"stderr_für_Implementierung", "deployedArtifactName":"Servername_aus_Eingabevariablen", "deployedUserDir":"Zielhostverzeichnis_für_implementierten_Server"}]}
Deimplementieren Sie den Node.js-Server. Sie müssen keine Implementierungsregel angeben. Die für die Implementierung verwendete Regel wurde zur Implementierungszeit gespeichert. Sie können die Regel für die Deimplementierung verwenden. Das Servertupel (Hostname, Benutzerverzeichnis und Servername) wird für die Deimplementierung des Servers verwendet. Das Tupel wird auf Serverseiten im Tool "Untersuchen" des Admin Center angezeigt.
  • Deimplementieren Sie einen Node.js-Server.
    POST https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"/root/wlpn",     
       "serverName":"myServerName"
    }
  • Rufen Sie eine Liste der Token für Deimplementierungsoperationen ab.
    GET https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/undeploy
    Zum Abrufen des Status und der Ergebnisse führen Sie ähnliche Schritte wie für Implementierungen ab.

Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twlp_deployservice_nodejs.html