Sie können Liberty-Server als Member eines Verbunds mithilfe der DeployService-REST-APIs implementieren.
Vorbereitende Schritte
Erstellen und
packen Sie einen zu implementierenden
Liberty-Server.
- Wenn Sie keinen vorhandenen Server zum Packen haben, führen Sie den Befehl create aus, um
einen neuen Server zu erstellen.
./server create member1
- Wenn Sie einen vorhandenen Server zum Packen haben, stellen Sie sicher, dass der Server, den Sie packen möchten, gestoppt ist.
- Führen Sie den Befehl package aus, um das Serverpaket zu erstellen.
./server package member1
Der Befehl erstellt beispielsweise ein Serverpaket mit dem Namen member1.zip.
Stellen Sie sicher, dass der Zielhost für RXA (Remote Execution Agent, Fernausführungsagent) konfiguriert ist. Weitere Informationen hierzu finden Sie unter RXA für Operationen des Liberty-Verbunds einrichten.
Stellen Sie auch sicher, dass der Zielhost das cURL-Dienstprogramm, ein Dekomprimierungsdienstprogramm (unzip) und Java-Unterstützung für das jar-Dienstprogramm in der Umgebung (path) eines Benutzers mit Betriebssystemberechtigungen für die Position des Implementierungsziels hat. Dieser Benutzer muss mit dem für --rpcUser (ein RPC-Benutzer, Remote Procedure Call) übereinstimmen, der während der Hostregistrierung verwendet wurde. Sie registrieren einen Host in Schritt 3.
Vorgehensweise
- Fügen Sie die Anweisung collectiveController der Controllerdatei server.xml hinzu. Legen Sie für user den Wert für die Administrator-ID des Controllers und für password das entsprechende Kennwort fest. Verwenden Sie beispielsweise die Werte aus der Anweisung <quickStartSecurity userName="admin" userPassword="adminpwd" /> in der Controllerdatei server.xml.
<collectiveController user="admin" password="adminpwd" />
- Sehen Sie sich die verfügbaren Implementierungsregeln an.
- 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:
{
-"id": "Liberty Server Rule",
-"description": "Deploy rule for Liberty servers.",
-"type": "Liberty",
-"deployCommands": "curl -X GET https://${wlp.admin.host}:${wlp.admin.port}/IBMJMXConnectorREST/file/${serverPackageDir}%2F${serverPackage} --user ${wlp.admin.user}:${wlp.admin.password} -k --create-dirs -o ${targetDir}/${serverPackage}.tmp --verbose && unzip ${targetDir}/${serverPackage}.tmp -d ${targetDir}/${serverPackage} && ${targetDir}/${serverPackage}/${binDir}/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} --useHostCredentials --createConfigFile=${targetDir}/${serverPackage}/wlp/usr/servers/${serverName}/configDropins/defaults/additionalConfig.xml --autoAcceptCertificates",
-"undeployCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName}; ${targetDir}/${serverPackage}/${binDir}/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": "${targetDir}/${serverPackage}/${binDir}/server start ${serverName}",
-"stopCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName}",
-"restartCommands": "${targetDir}/${serverPackage}/${binDir}/server stop ${serverName} && ${targetDir}/${serverPackage}/${binDir}/server start ${serverName}",
-"inputVariables": [
-{
-"name": "targetDir",
-"type": "filePath",
-"description": "The target directory for the Liberty server package to be installed.",
-"displayName": "Target Directory"},
-{
-"name": "keystorePassword",
-"type": "password",
-"description": "Password for keystores of the deployed server",
-"displayName": "Keystore Password"},
-{
-"name": "serverPackage",
-"type": "file",
-"description": "Name of the Liberty server package to install.",
-"displayName": "Server Package File"},
-{
-"name": "serverPackageDir",
-"type": "filePath",
-"description": "Location of directory on the controller containing the server package to deploy.",
-"displayName": "Package directory"}],
-"name": "Liberty Server",
-"default": true,
-"runtimeTypes": [
-{
-"displayName": "Liberty"}],
-"packageType": "Server Package"}
- Erstellen Sie bei Bedarf eigene Implementierungsregeln, indem Sie DeployRules zu Ihrer
Controllerkonfiguration hinzufügen. Weitere Informationen finden Sie unter Deploy Rule (deployRule).
- Stellen Sie dem Controller das Serverpaket zur Verfügung.
Führen Sie eine der folgenden Aktionen aus:
- Speichern Sie das Serverpaket 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 des Serverpakets verweist. Die erste readDir-Anweisung gibt die Position des Serverpakets an. Diese Verzeichnis entspricht der Eingabevariable serverPackageDir, die für die deployService-Implementierung in Schritt 4 angegeben wurde. Das Verzeichnis serverPackageDir befindet sich im Controllerhost. Die nächsten drei readDir-Anweisungen aktivieren die Standardverzeichnisse readDir erneut. Beispiel:
<remoteFileAccess>
<readDir>/tmp/serverPackageDir</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>
- Registrieren Sie den Host, auf dem Sie einen Liberty-Server beim 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 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 registerHost- bzw. den updateHost-Befehl 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/wlp zu übertragen.
collective registerHost Zielhost --host=Controller-Host --port=HTTPS-Port_des_Controllers
--user=Controlleradministrator --password=Kennwort_des_Controlleradministrators --rpcUser=Betriebssystembenutzer --rpcUserPassword=Kennwort_des_Betriebssystembenutzers --autoAcceptCertificates --hostWritePath=Zielverzeichnis
- --host, --port, --user und --password sind erforderlich. Die Werte für diese Parameter finden Sie in der Controllerdatei server.xml.
- Wenn der ferne Zielhost SSH nicht unterstützt oder Sie keine SSH-Schlüssel, wie z. B. für Zielhosts in Linux- oder Windows-Betriebssystemen, verwenden möchten, ist die Angabe von --rpcUser und --rpcUserPassword erforderlich. Setzen Sie --rpcUser auf einen Anmeldebenutzernamen für das Betriebssystem und geben Sie für --rpcUserPassword das zugehörige Kennwort an. Der mit --rpcUser angegebene Benutzer muss die Betriebssystemberechtigungen für die Position des Implementierungsziels besitzen.
- --autoAcceptCertificates ist erforderlich.
- --hostWritePath=Verzeichnis ist erforderlich. Der Verzeichniswert für --hostWritePath muss dem in den Implementierungsregeln angegebenen Wert für targetDir oder einem übergeordneten Verzeichnis von targetDir auf dem Host entsprechen, auf dem Sie einen Liberty-Server installieren möchten. Sie können mehr als einen --hostWritePath-Parameter angegeben, z. B.: --hostWritePath=/dir1
--hostWritePath=/dir2
Weitere Informationen zu den Befehlen registerHost und updateHost finden Sie im Artikel Host-Computer werden bei einem Liberty-Verbund registriert.
- Implementieren Sie den Liberty-Server.
Verwenden Sie ein Tool, das REST-APIs aufrufen kann, um den Liberty-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 Liberty-Server. 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":"Liberty Server Rule",
"hosts":["Zielhostname"],
"variables": [
{ "name":"serverPackage","value":"member.zip" },
{ "name":"targetDir","value":"%2Fhome%2Fszhou%2Fdeploy" },
{ "name":"keystorePassword","value":"Kennwort" },
{ "name":"serverPackageDir","value":"%2Fusr%2Ftest%2Fsource" }
]
}
Achtung: Die Variablen targetDir und serverPackageDir sind UTF-8-codierte Verzeichnispfade. Die Variable
serverPackageDir gibt die Position der ZIP-Datei mit dem Liberty-Serverpaket auf dem Verbundcontroller an.
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 also für das Rückgabetoken {"id":3} aus Schritt
3 für {token}.
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
Liberty-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 Liberty-Server.
POST https://Controller-Host:Controller-Port/ibm/api/collective/v1/deployment/undeploy
{
"host": "myHostName",
"userDir":"myUserDir",
"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.