Java EE Wildfly verteilen

Hallo zusammen,

ich brauche mal eure Hilfe. Gegeben sind ca 30 Kunden, welche meine entwickelte Java EE App bekommen sollen. Nun hab ich noch keine Idee, wie ich Wildfly 30 x aufsetze. Aktuell würde ich es so machen:

Eine nackige Wildflyversion so konfigurieren, dass alles drin ist, Datasource (wäre aber bei jedem Kunden identisch, aber eigentlich nicht tragisch), Systemproperties usw.
Diese verpacken und als Vorlage nehmen. Nun einen neuen vServer aufsetzen lassen und darauf dann den Wildfly entpacken und fertig konfigurieren. Da brauch ich viel zu lange, hat jemand eine bessere Lösung?

Klingt nach einem usecase für Docker. Vielleicht hilft dir das hier weiter: http://rmpestano.github.io/blog/posts/a-simple-javaee-docker-example.html

1 „Gefällt mir“

Docker sagt mein Serveranbieter auch, aber da hab ich null Plan von. Aber ich schau mir das mal an. Ist auch für das Verteilen von Updates einfacher oder? Angenommen ich bau was in der App um, dann müsste ich jedem Kunden das .war senden oder aber die Updates selber machen. Docker kann das automatisch hab ich mal irgendwo aufgeschnappt bzw mit sehr wenig aufwand

Was du dafür brauchst ist eine Docker Registry. Dort legst du dann dein fertiges container image ab und kannst dann von deinen verschiedenen Server das image abholen. Solange du keine Version angibst, zieht er immer die letzte. Sprich ein docker run ... nimmt immer die aktuellste Version. Es gibt verschiedene Anbieter für docker registries im Web, der bekannteste ist docker hub, aber der kostet wenn du eine private registry haben willst. Mein Tipp ist gitlab.Da hast du alles for free, also Docker Registry, Code Repository und Continuous Integration. Damit kannst du dir zum Beispiel bauen, dass immer wenn du neuen Code eincheckst, dass dann ein Build angetriggert wird, der am Ende ein Docker Image ausspuckt und in der Registry ablegt.

1 „Gefällt mir“

Das klingt perfekt! Gitlab ist privat oder für jedermann einsehbar? Wer kann mich darin schulen und was kostet es? So ein kleiner crashkurs wäre toll

Edit
Könnte ich es auch so einrichten, dass ein Built angestoßen wird und auf einem Test wildfly die aktualisierte Version geholt wird (nicht von den produktiven!) so können die letzten Änderungen getestet werden ehe es verteilt wird.

Gitlab kannst du in deinem Fall kostenlos mit private repository nutzen, solange dir 2000 Minuten Buildzeit pro Monat reichen.

Wo genau musst du anfangen? Du weißt wie git funktioniert? Wie baust du jetzt deine Applikation, mit maven, gradle…? Hast du Erfahrungen mit build-servern wie zum Beispiel Jenkins?

nutze maven, git (Bitbucket), Jenkins naja nicht wirklich. bin soeben dabei Docker image zu bauen und hab mir ein Dockerfile angelegt.

derzeit wird das gebaut, mal sehen ob es dann auch ausgeführt wird. Hab erst in Bitbucket gesehen, dass es da auch Pipelines für Docker gibt. Da kann man wohl auch seine images bauen lassen, aber das hab ich nicht kapiert mit .yml ?!

wuhuu test läuft

dockerfile
FROM jboss/wildfly
ADD my app.war /opt/jboss/wildfly/standalone/deployments/

sooo nun muss in dem wildfly nur noch eine datasource angelegt werden und weitere Einstellungen. Gibts da was einfaches oder muss ich ein eigenes wildfly mit entsprechenden Änderungen in das Image packen?

Zu deiner Wildflyfrage, ich hab schon länger nichts damit gemacht. Aber ist die configuration nicht auch nur eine einfache xml-Datei? Du kannst du dann genau so hinzufügen, wie du deine war hinzufügst.

Zu dem anderen. Ich hab mir gerade mal bitbucket angeschaut. Was Bitbucket nicht hat, ist eine container-registry. Das ist der Ort, in dem du dann dein fertiges Image ablegen kannst und von dort kann es dann auch wieder runter geladen werden. Jetzt hast du mit docker build das in deiner lokalen registry abgelegt. Damit machst du es dann für andere verfügbar. Das ist vergleichbar mit deinem lokalen .m2 Verzeichnis und mavencentral.

Das mit dem yml ist auf gitlab ähnlich aber relative einfach, wenn man es mal verstanden hat. Hier ist ein Beispiel wie man eine Springbootanwendung mit gitlab-ci baut und dann in die registry pusht. Zusätzlich deployen sie das in einem Kubernatis-Cluster, aber der Teil brauchst du nicht. Vielleicht kannst du das einfach auf deine Sachen anpassen.

Nur so am Rande:

Wenn Du Dein Projekt mit Maven baust, kannst Du http://dmp.fabric8.io/ verwenden, um im Maven-Build-Prozess direkt das Image zu erstellen.