Wildfly als Service auf Linux Debian Server einrichten

Wildfly Linux

Zuerst schaut ihr auf die Seite vom Wildfly und kopiert euch den Adresslink der Zip-Datei vom Download der Version die ihr haben möchtet. Ich habe die Anleitung für 2 Versionenen auspobiert.

Also wir wechseln in das Verzeichnis /opt/ und ziehen und die Zip-Datei mit dem Befehl wget:

cd /opt/
wget https://download.jboss.org/wildfly/14.0.1.Final/wildfly-14.0.1.Final.zip
unzip wildfly-14.0.1.Final.zip
rm wildfly-14.0.1.Final.zip
mv wildfly-14.0.1.Final/ wildfly

Doch bevor wir uns weiter mit der Wildfly-Installation beschäftigen, sollten wir prüfen ob und in welcher Version Java installiert ist. Mit java -verion könnt ihr das überprüfen. Falls Java bereits installiert ist und ihr die richtige Version habt, könnt ihr den kommenden Abschnitt überspringen und den folgenden Haken setzen.

Java installieren

Da wir ja sicherlich keine Lust haben für Java etwas zu bezahlen, installieren wir jetzt die OpenJDK Verion 11 die LTS (Long Time Support) hat. Dafür schauen wir auf jdk.java.net und downloaden das gewünschte *.tar.gz.

wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz -O /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz
tar xfvz /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz --directory /usr/lib/jvm
rm -f /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz

Bei mir ist es die 64-Bit-Verion 11.0.1 geworden. Jetzt muss die Version noch als Default für das Linux System gesetzt werden:

update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.1/bin/java 100
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-11.0.1/bin/javac 100
update-alternatives --config java
update-alternatives --config javac

Nach der Auswahl könnt ihr noch die Umgebungsvariablen setzen.

export JAVA_HOME="/usr/lib/jvm/jdk-11.0.1"
export PATH=$JAVA_HOME/bin:$PATH

wenn Ihr jetzt auf der Console java -verion eingebt, muss folgendes zu sehen sein.

openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

Nun dürfte dem ersten Start vom Wildfly nichts mehr im Wege stehen und das geht mit folgendem Befehl:

sh /opt/wildfly/bin/standalone.sh

Mit [Strg + c] könnt ihr ihn wieder beenden.

Der Wildfly besitzt ein Deployment-Ordner auf den er lauscht und alle *.ear oder *.war Dateien dort drinnen werden deployed (sogar zur Laufzeit). Der Ordner befindet sich hier: /opt/wildfly/standalone/deployments/

Wildfly als Service über Autostart automatisch hochfahren

Wir wollen den Wildfly in Zukunft nicht mehr per Hand starten und möchten einen automatisierten Ablauf haben in dem alles korrekt hochfährt und wir uns keine Gedanken mehr machen müssen, sollte der Server mal neu gestartet werden. Zunächst benötigen wir einen neuen User, der alleiniges Recht besitzt den Wildfly starten zu dürfen. Ich empfehle ihn direkt auch wildfly zu nennen, zum einen ist es für euch übersichtlich und klar welche Aufgabe der User hat und zum Anderen, ist der Default der JBOSS_USER-Umgebungsvariable zufälliger Weise wildfly. Ebenso ist der Pfad /opt/widlfly/, den ich eh schon für die Beispiele benutzt habe, ebenfalls der Default der Umgebungsvariable: JBOSS_HOME.

Wildfly-User erstellen und einrichten

Wie ich schon einmal erwähnt habe, sollte jede Anwendung die wir selbst installieren einen eigenen User bekommen, der alleiniges Recht hat sie zu benutzen.

adduser wildfly

Nun müssen wir sicher stellen, das dieser User volle Rechte auf den Wildfly-Ordner hat:

chown -cR wildfly:wildfly /opt/wildfly/

Der Wildfy hat für die Erstellung als Service bereits Konfigurationsdateien vorbereitet, die wir jetzt nur noch an die richtigen Stellen kopieren müssen:

cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly.conf /etc/default/wildfly
cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly-init-debian.sh /etc/init.d/wildfly

Bevor wir den Service das Erste Mal starten können, müssen wir noch die Logausgabe definieren: Auch hier gibt es wieder einen Default für die JBOSS_CONSOLE_LOG-Umgebungsvariable und zwar unter dem Pfad: /var/log/wildfly/console.log den wir zunächst erst einmal anlegen müssen! Alle Defaults zu den Umgebungsvariablen vom JBoss/Wildfly könnt ihr jetzt in der /etc/init.d/wildfly Datei nachlesen! Jetzt müssen wir wiederum dem wildfly-User volle Rechte auf diesen Ordner geben:

mkdir -p /var/log/wildfly/
chown -cR wildfly:wildfly /var/log/wildfly/

Um den Service jetzt zu starten, müssen wir ihn vorher noch aktivieren:

update-rc.d wildfly defaults
update-rc.d wildfly enable

Nun könnt ihr endlich den Wildfly über folgenden Befehl starten:

service wildfly start

Auch nach einem Neustart des Servers, sollte der Service aktiv sein. Testet das ganz einfach mit reboot und prüft danach mit service wildfly status ob unter Active: active (running) steht.

Verbindung zur Datenbank herstellen

Benutzername
Datenbankname
Datenbank Port

Wir wollen jetzt die Verbindung vom Applikationsserver zur Datenbank schaffen, damit unsere Java-EE Anwendung über einen eindeutigen JNDI-Namen den Zugriff erhält. Da wir uns für die PostgreSQL-Datenbank entschieden haben müssen wir dem Wildfly die Treiberinformationen von PostgreSQL liefern, da diese nicht standardmäßig dabei sind.

PostgreSQL-Driver-Jar dauerhaft im Wildfly einrichten

Hierfür können wir das CLI (Command Line Interface) von Wildfly nutzen! Eine Dokumentation zur Benutzung findet hier hier.

Doch zuerst laden wir den JDBC-Treiber für Postgres herunter. Dafür schauen wir auf der PostgreSQL-Seite nach welche jar wir benötigen (Da ich in diesem Beispiel Java 8 nutze, benötige ich die JDBC42-Version) und kopieren uns die Downloadadresse die wir für folgenden Befehl brauchen:

cd /tmp/
wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar

Dann kann mit dem CLI ein Modul mit dem Postgres-Treiber erzeugt und der Treiber unter einem einfachen Namen verwendbar gemacht machen.

/opt/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1
module add --name=org.postgresql --resources=/tmp/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api
/subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)
quit

Mit [Strg + d] kann das CLI ebenfalls verlassen werden.

Konfiguration der Datasource

Dafür kann wiederum das CLI verwendet werden.

/opt/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1
data-source add --jndi-name=java:jboss/datasources/mydatabase --name=mydatabase_DS --connection-url=jdbc:postgresql://localhost:5432/mydatabase --driver-name=postgres --user-name=psqluser --password=GEHEIM
quit

Dann könnt ihr beim erneuten starten des Wildflys

sh /opt/wildfly/bin/standalone.sh

überprüfen ob es geklappt hat und die Datasource geladen ist, indem ihr auf die Zeile Bound data source [java:jboss/datasources/mydatabase] achtet.

Wenn ja, dann könnt ihr durch kopieren eurer Java-EE Anwendung (*.ear/*.war) in das Verzeichnis /opt/wildfly/standalone/deployments/ ausprobieren, ob eure Anwendung korrekt hochfährt! Wichtig ist an dieser Stelle nur, das euer (EAR/WAR) mit derselben Java Version, die auch der Wildfly nutzt, gebaut wurde und dass in eurer persistence.xml der JNDI-Name steht, der in eurer Datasource auf dem Wildfly eingetragen wurde, damit die Verbindung steht!