Dla platform LINUXDla platform Windows

Wdrażanie serwerów Node.js przy użyciu interfejsów REST API wdrażania

Aplikacje Node.js można wdrażać jako elementy kolektywu przy użyciu interfejsów REST API DeployService . Element kolektywu Node.js jest nazywany w tej dokumentacji serwerem Node.js .

Zanim rozpoczniesz

Funkcja stabilizowana: Zarządzanie procesami Node.js za pomocą kolektywów Liberty jest stabilizowane. V8 to ostateczna wersja obsługiwanej wersji Node.js dla członków kolektywu Liberty . W przypadku środowisk infrastruktury lokalnej lub własnej należy używać kontenerów Docker , które są udostępniane i zarządzane przez produkt IBM Cloud® Private. W przypadku obsługiwanych środowisk należy używać kontenerów Docker w produkcie IBM Cloud Kubernetes Service.

Określ hosty docelowe, na których mają zostać zainstalowane serwery Node.js . Zainstaluj pakiet Node.js V4 i pakiet npm apiconnect-collective-member na hostach docelowych. Komenda do zainstalowania obsługi dla serwerów Node.js w systemie Linux jest następująca:

npm install -g apiconnect-collective-member

Liberty obsługuje wersje węzła 4.x i 6.x.

Po zainstalowaniu środowiska Node.jsuruchom program node --version z poziomu wiersza komend w katalogu instalacyjnym Node.js , aby upewnić się, że dostępna jest obsługiwana wersja węzła, na przykład:

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

Każdy host docelowy wymaga RXA lub SSH. Patrz sekcja Konfigurowanie operacji kolektywu RXA dla serwera Liberty.

Procedura

  1. Aby zarejestrować użytkownika i hasło dla hosta kontrolera, należy dodać element collectiveController do pliku server.xml kontrolera, na przykład:
    <collectiveController user="admin" password="adminpwd" />
  2. Dodaj składnik scalingController w pliku server xml kontrolera.
    Opcja scalingController jest wymagana dla serwerów Node.js , które są częścią kolektywu.
        <featureManager>
    	 ...
            <feature>scalingController-1.0</feature>
        </featureManager>
    Uwaga: Włączenie opcji scalingController spowoduje również włączenie funkcji automatycznego skalowania. Jeśli automatyczne skalowanie nie jest wymagane, należy wyłączyć to zachowanie, dodając następujący plik do pliku server xml kontrolera.
      <scalingDefinitions>
        <defaultScalingPolicy enabled="false"/>
      </scalingDefinitions>
  3. Dodaj aplikację Node.js do kontrolera kolektywu.
    1. Wybierz aplikację Node.js do zainstalowania. Aplikacja musi mieć rozstrzygnięte zależności.
      W produkcie Liberty zostanie wdrożone skompresowane archiwum TAR aplikacji węzła z rozszerzeniem .tgz . Aplikacja zwykle ma następującą strukturę katalogów:
      package/
            app.js
            package.json
            node_modules/.. 
            server.json
      • app.js jest aplikacją.
      • Program package.json ma zależności od aplikacji zgodnie z wymaganiami Node.js npm.
      • Katalogi node_modules/.. udostępniają używane przez aplikację aplikacje wygenerowane z poziomu produktu package.json.
      • server.json jest opcjonalnym plikiem, który konfiguruje porty i inne ustawienia.

      Więcej informacji na temat wdrażania aplikacji zawiera opis komendy pack w pliku apiconnect-collective-member wlpn-server and wlpn-collective commands.

    2. Ustaw aplikację Node.js dostępną dla kontrolera.

      Wykonaj jedną z następujących czynności:

      • Umieść aplikację Node.js w jednym z domyślnych katalogów produktu readDir , do których należą ${wlp.install.dir}, ${wlp.user.dir}i ${server.output.dir}, lub w podkatalogu domyślnego katalogu readDir .
      • Dodaj do pliku kontrolera server.xml plik remoteFileAccess , który wskazuje na położenie aplikacji Node.js . Pierwsza instrukcja readDir udostępnia położenie aplikacji Node.js . Ten katalog jest zmienną wejściową applicationDir , która jest określona dla wdrożenia deployService w kroku 6. Katalog applicationDir znajduje się na kontrolerze. Następne trzy instrukcje readDir ponownie włączają domyślne katalogi produktu readDir , na przykład:
        <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>
  4. Upewnij się, że plik kontrolera server.xml zawiera instrukcje, które definiują zmienne wdrażania, na przykład:
       <deployVariable name="wlpn.appPort" value="9090" increment="1"/> 
       <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

    Zmienne wdrażania muszą ustawiać wartości, które pozwalają każdemu członkowi mieć unikalny numer portu na hostach docelowych. Patrz DeployVariable (deployVariable).

  5. Zarejestruj host, na którym ma zostać zainstalowany serwer Node.js z kontrolerem kolektywu.

    Zarejestrowanie hosta umożliwia kontrolerowi kolektywu dostęp do plików, komend i innych zasobów na hoście. Użyj komendy wlpn-collective registerHost , aby zarejestrować host docelowy. Jeśli host jest już zarejestrowany, można użyć komendy updateHost w celu zresetowania informacji rejestracyjnych.

    Ważne: Upewnij się, że uruchomiono komendę wlpn-collective registerHost lub updateHost jako użytkownik, który będzie później używany do wdrażania serwera elementów. Jeśli na przykład użytkownik uruchomił komendę jako użytkownik produktu root , a następnie wdroł element jako inny użytkownik, wdrożenie nie powiedzie się, ponieważ usługa DeployService nie ma uprawnień do przekazania pliku do katalogu /root/wlpn .

    Aby znaleźć wartości dla parametrów --host, --port, --useri --password , należy przejrzeć plik server.xml kontrolera. Aby nie używać pliku kluczy prywatnych SSH, na przykład hostów docelowych w systemach operacyjnych Linux® lub Windows, należy podać nazwę użytkownika i hasło logowania do systemu operacyjnego, ustawiając parametry --rpcUser i --rpcUserPassword . Użytkownik określony przez produkt --rpcUser musi mieć uprawnienia systemu operacyjnego do docelowego miejsca wdrożenia. Upewnij się, że komenda zawiera --autoAcceptCertificates.

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

    Więcej informacji na ten temat zawiera sekcja apiconnect-collective-member wlpn-server and wlpn-collective commands.

  6. Przejrzyj dostępne reguły wdrażania.
    1. Wywołaj interfejs API usług REST, który zwraca dostępne reguły wdrażania w strukturze JSON.
      Użyj narzędzia, które może wywoływać interfejsy REST API w celu uzyskania dostępnych reguł wdrażania.
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule 

      Wywołanie zwraca reguły wdrażania w strukturze JSON, na przykład:

      {"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. W razie potrzeby utwórz własne reguły wdrażania, dodając program DeployRules do konfiguracji kontrolera. Patrz Deploy Rule (deployRule.
  7. Wdróż serwer Node.js .

    Użyj narzędzia, które może wywoływać interfejsy REST API w celu wdrożenia serwera Node.js . Reguła wdrażania zawiera zmienne, które mogą określać wartości wejściowe dla wywołania, takie jak serwer theNode.js, który ma być używany, oraz nazwę kontenera, który ma zostać utworzony. Treść zwrotu zawiera znacznik, którego można użyć do żądania statusu i wyników.

    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" }
       ]
    }
    
    Uwaga: Zmienna applicationDir jest ścieżką do katalogu zakodowaną w formacie UTF-8 . Zmienna applicationDir jest położeniem aplikacji Node.js na kontrolerze kolektywu.

    Aby uzyskać status i wyniki, należy użyć znacznika zwracanego, który może być podobny do {"id":3}. Dane wyjściowe można pobrać w formacie JSON.

Co dalej

Zażądaj i przejrzyj status wdrożenia i wyniki.

  • Pobieranie listy znaczników wdrażania dla żądanych operacji wdrażania.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
    
  • Uzyskaj krótki status operacji wdrażania. Użyj znacznika z kroku 6 dla {token}. W związku z tym w przypadku znacznika zwrotu {"id":3} z kroku 6 należy użyć produktu 3 dla produktu {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/status 
    
    Podczas wdrażania zwracane są funkcje APIIN_PROGRESS:
    {"status":{"target_host":"IN_PROGRESS"}}
    Po wdrożeniu zwracane są funkcje APIFINISHED:
    {"status":{"target_host":"FINISHED"}}

    Można również uzyskać status końcowyERRORJeśli wdrożenie ma problemy. Aby uzyskać pełne wyniki, należy skorzystać z poniższych informacji. Zwracane informacje o stdout i stderr mogą pomóc w zdiagnozowaniu problemów.

  • Pobierz kompletne wyniki operacji wdrażania. Użyj znacznika z kroku 6 dla {token}. W związku z tym w przypadku znacznika zwrotu {"id":3} z kroku 6 należy użyć produktu 3 dla produktu {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/results
    Po zakończeniu wdrażania wyniki zawierają informacje na temat operacji. Poniższy przykład przedstawia wyniki dlaFINISHED:
    {"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"}]}
Zdeinstaluj serwer Node.js . Nie ma potrzeby określania reguły wdrażania. Reguła używana do wdrożenia została zapisana w czasie wdrażania. Istnieje możliwość użycia reguły do anulowania wdrożenia. Do anulowania wdrożenia serwera używana jest krotka serwera nazwy hosta, katalogu użytkownika i serwera. Ta krotka jest wyświetlana na stronach serwera w narzędziu eksploracji Centrum administracyjnego.
  • Zdeinstaluj serwer Node.js .
    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"/root/wlpn",     
       "serverName":"myServerName"
    }
  • Pobierz listę tokenów dla operacji anulowania wdrożenia.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    Aby uzyskać status i wyniki, wykonaj kroki podobne do wdrożeń.