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
- 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" />
- 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>
- Dodaj aplikację Node.js do kontrolera kolektywu.
- 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.
- Ustaw aplikację Node.js dostępną dla kontrolera.
Wykonaj jedną z następujących czynności:
- 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).
- 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.
- Przejrzyj dostępne reguły wdrażania.
- 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"
}
]}
- W razie potrzeby utwórz własne reguły wdrażania, dodając program
DeployRules do konfiguracji kontrolera. Patrz Deploy Rule (deployRule.
- 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ń.