Ein komplettes Proof-of-Concept: Maven-WAR → Tomcat → Traefik → Docker Compose. Die Anwendung misst Download- und Upload-Performance („raw“ und gzip) direkt im Browser und ist über den Pfad /speedtest/ erreichbar.
speedtest/– Maven-Projekt (Java 21, Jakarta Servlet API). EnthältSpeedTestServlet, einindex.jsp-Frontend undweb.xml, das/speedtest/als Welcome-Page registriert.tomcat/Dockerfile– Multi-Stage-Build: kompiliert das WAR mit Maven und kopiert es alsspeedtest.warin Tomcat.docker-compose.yml– startet Traefik + Tomcat, bietet denTRAEFIK_PORT-Override und routetPathPrefix(/speedtest)zum War-Context.traefik/traefik.yml– Traefik-Provider von Docker, kein TLS (kann erweitert werden).scripts/build.sh/scripts/push.sh– Helfer, um lokal zu bauen bzw. das Image in eine Registry zu pushen.
- Docker Engine + docker-compose-Plugin installiert (oder
docker composeüber CLI-Plugin wie v2.24.2). - Maven 3.8+ (benötigt zum Erstellen des WAR im lokalen Build).
- Zugang zu einer Registry (Docker Hub, GitLab, GHCR etc.) und
docker logindort, wenn du pushen willst.
cd ~/webstack./scripts/build.sh- Führt
mvn -f speedtest/pom.xml clean packageaus und baut das Docker-Imageregistry.example.com/roland/speedtest:latest(oder mitREGISTRY=...).
- Führt
TRAEFIK_PORT=8080 docker compose up -d- Standardmäßig auf Port 80, aber bei Port-Konflikt (z. B. wenn 80 von Windows/WSL genutzt wird) mit
TRAEFIK_PORT=8080starten. - Dadurch läuft Traefik auf z. B.
http://localhost:8080/und leitet/speedtest/weiter.
- Standardmäßig auf Port 80, aber bei Port-Konflikt (z. B. wenn 80 von Windows/WSL genutzt wird) mit
curl -I http://localhost:8080/speedtest/(oderhttp://localhost/speedtest/wenn Port 80 frei) – du solltest HTTP 200 + die HTML-Seite sehen.TRAEFIK_PORT=8080 docker compose downstoppt die Dienste.
- Traefik lauscht auf
${TRAEFIK_PORT:-80}und routet alles unter/speedtest/an den Tomcat-Service, der das WAR unter dem Kontext/speedtestbereitstellt. - Du brauchst keinen eigenen DNS-Eintrag oder Host-Header mehr;
http://localhost:{PORT}/speedtest/funktioniert. - Möchtest du HTTPS, kannst du zusätzliche EntryPoints, Middleware oder Labels ergänzen (
traefik/http/routers/speedtest.tls=true).
REGISTRY=registry.hub.docker.com/roland ./scripts/push.sh(vorherdocker login).- Das Skript baut das Image noch einmal mit dem gesetzten
REGISTRYund führtdocker compose push speedtestaus.
- Das Skript baut das Image noch einmal mit dem gesetzten
- Auf Zielsystem einfach
docker compose pull speedtestbzw.docker compose up -d --force-recreateausführen.
Tipp: Du kannst zusätzliche Tags erzeugen, indem du
docker build --tag $REGISTRY/speedtest:stable .manuell ergänzt und danndocker pushausführst.
mvn -f speedtest/pom.xml clean package– erzeugttarget/speedtest-1.0.0.war.sudo TRAEFIK_PORT=8080 docker compose build speedtest– baut das Multi-Stage-Docker-Image (registry.example.com/roland/speedtest:latest).sudo TRAEFIK_PORT=8080 docker compose up -d+curl -I http://localhost:8080/speedtest/→ 200 OK.- Das Frontend misst Upload/Download, nutzt
SpeedTestServletzur Rückgabe unkomprimierter und gzip-komprimierter Bytes sowie Upload-Metadaten.
- Bei Port 80-Sperre auf dem System (
docker compose upmeldetaddress already in use): setzeTRAEFIK_PORT=8080(oder einen freien Port) und greife überhttp://localhost:8080/speedtest/zu. - Die
scripts/push.sherwartetREGISTRYin der Umgebung; sonst landet das Image beiregistry.example.com/roland.
- Installiere
flyctl(https://fly.io/docs/hands-on/install-flyctl/), dannflyctl auth login. - Falls noch nicht vorhanden:
flyctl apps create openclaw-test-webstack --region fra. Das erzeugtfly.tomlmit dem App-Namen (die hier verteiltefly.tomlist eine Vorlage mit dem selben Namen, falls du den Namen anpassen willst, aktualisiere dieses Feld). flyctl deploy --config fly.tomlbaut dein Docker-Image (tomcat/Dockerfile) und deployed es nach Fly. Die Anwendung hört intern auf Port 8080, daher routet die Fly-Konfiguration/zuhttp://<app>.fly.dev/speedtest/.flyctl logszeigt die Tomcat-Logs,flyctl openöffnet die Live-URL. Für Updates einfach erneutflyctl deployausführen.
Tipp: Du kannst
flyctl deploy --build-arg TRAEFIK_PORT=8080anfügen, wenn du Traefik lokal für Tests mit einem anderen Port laufen lässt – auf Fly selbst wird Traefik nicht mehr benötigt, weil Tomcat direkt das WAR ausliefert.
- Registriere dich bei https://render.com und verbinde dein GitHub-Konto; das Repository
rPraml/openclaw-test-webstackhat alles, was Render braucht. - Ziehe den Button „New Web Service“ → wähle
Dockerals Environment und gib den Service-Namenopenclaw-test-webstack(oder einen deiner Wahl) an. Render liest dierender.yamlim Repo, deshalb brauchst du nur aufCreate Web Servicezu klicken und den Branchmasterzu bestätigen. - Render baut automatisch dein Docker-Image über
tomcat/Dockerfileund setzt die UmgebungsvariablePORT=8080, damit der Loadbalancer weiß, wohin er den Traffic schickt. Die Health-Check-URL/speedtest/stellt sicher, dass Traefik nicht mehr nötig ist. - Nach dem Deployment liefert Render eine URL (z. B.
https://openclaw-test-webstack.onrender.com/speedtest/). Die App wird bei jedem Push neu deployed, solangeAuto Deployaktiv ist.
Tipp: Wenn du eigene Registry-Images nutzt, kannst du statt
render.yamlauch die Render UI bedienen (Build Command:./scripts/build.sh, Start Command:docker run ...). Lass mich wissen, wenn du eine GitHub Action für automatischeflyctl-/Render-Deploys brauchst.