rPraml/openclaw-test-webstack

★ 0Forks 0JavaGitHub ↗Compare

README

Speedtest-Webstack

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.

Inhalt

  • speedtest/ – Maven-Projekt (Java 21, Jakarta Servlet API). Enthält SpeedTestServlet, ein index.jsp-Frontend und web.xml, das /speedtest/ als Welcome-Page registriert.
  • tomcat/Dockerfile – Multi-Stage-Build: kompiliert das WAR mit Maven und kopiert es als speedtest.war in Tomcat.
  • docker-compose.yml – startet Traefik + Tomcat, bietet den TRAEFIK_PORT-Override und routet PathPrefix(/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.

Voraussetzungen

  • 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 login dort, wenn du pushen willst.

Projekt aufsetzen

  1. cd ~/webstack
  2. ./scripts/build.sh
    • Führt mvn -f speedtest/pom.xml clean package aus und baut das Docker-Image registry.example.com/roland/speedtest:latest (oder mit REGISTRY=...).
  3. 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=8080 starten.
    • Dadurch läuft Traefik auf z. B. http://localhost:8080/ und leitet /speedtest/ weiter.
  4. curl -I http://localhost:8080/speedtest/ (oder http://localhost/speedtest/ wenn Port 80 frei) – du solltest HTTP 200 + die HTML-Seite sehen.
  5. TRAEFIK_PORT=8080 docker compose down stoppt die Dienste.

Traefik & Routing

  • Traefik lauscht auf ${TRAEFIK_PORT:-80} und routet alles unter /speedtest/ an den Tomcat-Service, der das WAR unter dem Kontext /speedtest bereitstellt.
  • 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 Push

  1. REGISTRY=registry.hub.docker.com/roland ./scripts/push.sh (vorher docker login).
    • Das Skript baut das Image noch einmal mit dem gesetzten REGISTRY und führt docker compose push speedtest aus.
  2. Auf Zielsystem einfach docker compose pull speedtest bzw. docker compose up -d --force-recreate ausführen.

Tipp: Du kannst zusätzliche Tags erzeugen, indem du docker build --tag $REGISTRY/speedtest:stable . manuell ergänzt und dann docker push ausführst.

Tests & Checks

  • mvn -f speedtest/pom.xml clean package – erzeugt target/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 SpeedTestServlet zur Rückgabe unkomprimierter und gzip-komprimierter Bytes sowie Upload-Metadaten.

Hinweise

  • Bei Port 80-Sperre auf dem System (docker compose up meldet address already in use): setze TRAEFIK_PORT=8080 (oder einen freien Port) und greife über http://localhost:8080/speedtest/ zu.
  • Die scripts/push.sh erwartet REGISTRY in der Umgebung; sonst landet das Image bei registry.example.com/roland.

Fly.io Deployment

  1. Installiere flyctl (https://fly.io/docs/hands-on/install-flyctl/), dann flyctl auth login.
  2. Falls noch nicht vorhanden: flyctl apps create openclaw-test-webstack --region fra. Das erzeugt fly.toml mit dem App-Namen (die hier verteilte fly.toml ist eine Vorlage mit dem selben Namen, falls du den Namen anpassen willst, aktualisiere dieses Feld).
  3. flyctl deploy --config fly.toml baut dein Docker-Image (tomcat/Dockerfile) und deployed es nach Fly. Die Anwendung hört intern auf Port 8080, daher routet die Fly-Konfiguration / zu http://<app>.fly.dev/speedtest/.
  4. flyctl logs zeigt die Tomcat-Logs, flyctl open öffnet die Live-URL. Für Updates einfach erneut flyctl deploy ausführen.

Tipp: Du kannst flyctl deploy --build-arg TRAEFIK_PORT=8080 anfü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.

Render Deployment (kostenlose Demo)

  1. Registriere dich bei https://render.com und verbinde dein GitHub-Konto; das Repository rPraml/openclaw-test-webstack hat alles, was Render braucht.
  2. Ziehe den Button „New Web Service“ → wähle Docker als Environment und gib den Service-Namen openclaw-test-webstack (oder einen deiner Wahl) an. Render liest die render.yaml im Repo, deshalb brauchst du nur auf Create Web Service zu klicken und den Branch master zu bestätigen.
  3. Render baut automatisch dein Docker-Image über tomcat/Dockerfile und setzt die Umgebungsvariable PORT=8080, damit der Loadbalancer weiß, wohin er den Traffic schickt. Die Health-Check-URL /speedtest/ stellt sicher, dass Traefik nicht mehr nötig ist.
  4. Nach dem Deployment liefert Render eine URL (z. B. https://openclaw-test-webstack.onrender.com/speedtest/). Die App wird bei jedem Push neu deployed, solange Auto Deploy aktiv ist.

Tipp: Wenn du eigene Registry-Images nutzt, kannst du statt render.yaml auch die Render UI bedienen (Build Command: ./scripts/build.sh, Start Command: docker run ...). Lass mich wissen, wenn du eine GitHub Action für automatische flyctl-/Render-Deploys brauchst.

Issues