Hilla-Anwendungen als JAR-Datei deployen

René Wilby | 10.06.2024 Min. Lesezeit

Hilla-Anwendung für Deployment bauen

Eine Hilla-Anwendung, die über die Hilla-CLI erstellt wurde, kann via Maven (oder Gradle) für das Deployment als JAR-Datei gebaut werden:

./mvnw clean package -Pproduction

Die erstellte JAR-Datei enthält alle erforderlichen Klassen, Abhängigkeiten und das Frontend-Bundle. Da eine Hilla-Anwendung ein klassisches Spring Boot-Projekt ist, enthält die erstellte JAR-Datei auch einen integrierten Server, der die Hilla-Anwendung bereitstellt, sobald die JAR-Datei ausgeführt wird.

Alternativ kann eine Hilla-Anwendung auch als WAR-Datei gebaut und über einen Servlet Container deployed werden.

Hilla-Anwendung als JAR-Datei ausführen

Die gebaute Hilla-Anwendung my-app kann in einer kompatiblen Java-Laufzeitumgebung folgendermaßen ausgeführt werden:

java -jar target/my-app.jar

Spring Boot-spezifische Konfigurationen können hierbei bei Bedarf als Umgebungsvariablen gesetzt bzw. übersteuert werden. So kann bspw. das Log-Level beim Start der Anwendung folgendermaßen angepasst werden:

java -jar -Dlogging.level.com.vaadin=DEBUG target/my-app.jar

Docker-Image für Hilla-Anwendung erstellen

Das Deployment von Anwendungen findet häufig auf Basis von Containern statt. Daher bietet es sich an für die Hilla-Anwendung ein Dockerfile zu erstellen. Das Dockerfile sollte im Basis-Verzeichnis der Hilla-Anwendung liegen und folgenden Inhalt haben:

FROM eclipse-temurin:21-jre

COPY target/*.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app.jar"]

Das Dockerfile enthält die erforderliche Java-Laufzeitumgegbung, die JAR-Datei, die in das Docker-Image kopiert wird, und die Konfiguration für den Port, über den die Anwendung Anfragen erhalten kann. Der ENTRYPOINT zeigt auf die JAR-Datei im Docker-Image, die beim Start des Containers ausgeführt wird.

Docker-Image lokal erstellen

Das Docker-Image kann lokal mit Docker oder Podman erstellt werden:

docker|podman build --tag my-app .

Der Befehl wird im Basis-Verzeichnis der Hilla-Anwendung ausgeführt. Der . zeigt dabei auf das selbige Verzeichnis und das darin befindliche Dockerfile.

Das Docker-Image ist anschließend lokal verfügbar und verwendbar.

Docker-Container lokal starten

Auf Basis des erstellten Docker-Images kann ein Docker-Container mit der Hilla-Anwendung gestartet werden:

docker|podman run -it --rm --publish 8080:8080 my-app

Hilla-Anwendung über fly.io deployen

Mit Hilfe der erstellen Dockerfile kann eine Hilla-Anwendung sehr einfach über einen Dienst wie fly.io deployed werden. Die Registrierung bei fly.io ist kostenlos, erfordert jedoch die Angabe von Kreditkarten-Daten. Fly.io bietet einen kostenlosen Hobby-Plan, über den man kostenlos Anwendungen mit eingeschränkten Ressourcen deployen kann. Die Anwendung ist anschließend über https://<unique-app-identifier>.fly.dev erreichbar. Die erforderliche Konfiguration von IP-Adressen, DNS, SSL-Zertifikat usw. übernimmt dabei fly.io.

Der Weg zum Deployment ist in https://fly.io/docs/hands-on/ ausführlich beschrieben.

Zunächst wird die flyctl installiert. Unter macOS kann dies bspw. mit brew erfolgen:

brew install flyctl

Anschließend wird ein neues Konto bei fly.io erstellt oder ein bestehendes Konto verknüpft:

fly auth signup

Vor dem ersten Deployment wird eine Deployment-Konfiguration für fly.io erstellt. Dies erfolgt über den Befehl:

fly launch --dockerfile Dockerfile

Die vorgeschlagenen Einstellungen können übernommen werden. Eine .dockerignore sollte zunächst nicht erstellt werden, da dies ansonsten das Kopieren der JAR-Datei vorerst verhindern würde.

Die Deployment-Konfiguration legt die flyctl in der Datei fly.toml ab. Diese Datei kann bei Bedarf editiert werden.

app = '<unique-app-identifier>'
primary_region = 'ams'

[build]
  dockerfile = 'Dockerfile'

[http_service]
  internal_port = 8080
  force_https = true
  auto_stop_machines = true
  auto_start_machines = true
  min_machines_running = 0
  processes = ['app']

[[vm]]
  size = 'shared-cpu-1x'
  memory = '512mb'

Das eigentliche Deployment der Hilla-Anwendung erfolgt dann mittels:

fly deploy

Das Dockerfile und die JAR-Datei werden auf einen Build-Server von fly.io hochgeladen. Das Erstellen des Docker-Images passiert bei fly.io. Fly.io legt das erstellte Docker-Image in einer eigenen Registry ab und startet anschließend die Hilla-Anwendung als Docker-Container. Nach erfolgreichem Start kann die Anwendung im Browser über https://<unique-app-identifier>.fly.dev aufgerufen werden.

Hilla-Anwendung aktualisieren

Ergeben sich Änderungen am Code der Hilla-Anwendung muss diese erneut gebaut und anschließend erneut deployed werden:

./mvnw clean package -Pproduction
fly deploy

Fazit

Eine Hilla-Anwendung kann sehr einfach für das Deployment als JAR-Datei gebaut werden. Mit Hilfe eines passenden Dockerfile steht dem Deployment über einen Dienst wie fly.io nichts im Weg. Die offizielle Dokumentation von Hilla bietet weitere Anleitungen für das Deployment von Hilla-Anwendungen, z.B. zu AWS, GCP, Azure oder Heroku.