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.