Vereinheitliche Stack-Steuerung auf scripts/lab.sh
Eine einzige Quelle der Wahrheit fuer alle Stack-Aktionen statt doppelt gepflegter Verb-Tabellen in Makefile und PowerShell-Wrapper. - scripts/lab.sh: zentraler Dispatcher (bootstrap/up/redeploy/ proxy-reload/down/logs/reset/reset-hard/reset-origin) - workshop.ps1: switch-Tabelle kollabiert zu Delegation an lab.sh (kein --remove-orphans-Drift mehr zwischen den Oberflaechen) - Makefile entfernt: WSL/Ubuntu bringt make nicht standardmaessig mit, Doku-Verben (make X) passten nicht zur PowerShell-Mehrheit - bootstrap.sh: Logik inline, redundante bootstrap-unix.sh und bootstrap-wsl.sh entfernt - Doku/HTML: alle 32 "make X" -> "./scripts/lab.sh X", Prosa (macOS-make-Hinweis, PowerShell-Wrapper-Text) angepasst Verifiziert: bootstrap -> proxy-reload -> redeploy -> reset laufen end-to-end gegen den Stack, Basisrouten und Done-Checks gruen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,29 +0,0 @@
|
||||
.PHONY: bootstrap up down logs redeploy proxy-reload reset reset-hard reset-origin
|
||||
|
||||
bootstrap:
|
||||
./scripts/bootstrap.sh
|
||||
|
||||
up:
|
||||
./scripts/compose.sh up -d --build
|
||||
|
||||
redeploy:
|
||||
./scripts/compose.sh up -d --build --remove-orphans
|
||||
./scripts/compose.sh restart reverse-proxy
|
||||
|
||||
proxy-reload:
|
||||
./scripts/compose.sh restart reverse-proxy
|
||||
|
||||
down:
|
||||
./scripts/compose.sh down
|
||||
|
||||
logs:
|
||||
./scripts/compose.sh logs -f
|
||||
|
||||
reset:
|
||||
./scripts/reset-lab.sh
|
||||
|
||||
reset-hard:
|
||||
./scripts/reset-lab.sh --hard
|
||||
|
||||
reset-origin:
|
||||
./scripts/reset-lab.sh --hard-origin
|
||||
@@ -36,7 +36,7 @@ Basisrouten nach dem Start:
|
||||
Plattformhinweise:
|
||||
|
||||
- Linux: Docker Engine oder Docker Desktop
|
||||
- macOS: Docker Desktop (falls `make` fehlt -> `xcode-select --install`)
|
||||
- macOS: Docker Desktop
|
||||
- Windows: Docker Desktop + WSL Integration aktiv
|
||||
|
||||
## Schnellstart
|
||||
@@ -61,7 +61,7 @@ Option B (PowerShell Wrapper):
|
||||
./scripts/workshop.ps1 -Action bootstrap
|
||||
```
|
||||
|
||||
Der PowerShell-Wrapper braucht kein `make` und ruft Linux-Skripte direkt in WSL auf.
|
||||
Der PowerShell-Wrapper ruft intern `./scripts/lab.sh` in WSL auf - die gleiche Steuer-Oberflaeche wie unter Linux/WSL.
|
||||
|
||||
Falls PowerShell das Script blockiert:
|
||||
|
||||
@@ -91,20 +91,16 @@ Das Skript:
|
||||
- erstellt `.env` aus `.env.example` (falls nicht vorhanden)
|
||||
- startet den Stack
|
||||
|
||||
Hinweis zu Skriptnamen:
|
||||
|
||||
- `scripts/bootstrap.sh` ist der empfohlene Einstieg
|
||||
- intern nutzt es `scripts/bootstrap-unix.sh`
|
||||
- `scripts/bootstrap-wsl.sh` existiert nur noch als Kompatibilitaets-Wrapper
|
||||
|
||||
## Neu deployen / resetten
|
||||
|
||||
Alle Aktionen laufen ueber `./scripts/lab.sh <aktion>` (in WSL/Linux). Windows-PowerShell-Nutzer nehmen `./scripts/workshop.ps1 -Action <aktion>` - dahinter steckt dasselbe Skript.
|
||||
|
||||
```bash
|
||||
make redeploy
|
||||
make proxy-reload
|
||||
make reset
|
||||
make reset-hard
|
||||
make reset-origin
|
||||
./scripts/lab.sh redeploy
|
||||
./scripts/lab.sh proxy-reload
|
||||
./scripts/lab.sh reset
|
||||
./scripts/lab.sh reset-hard
|
||||
./scripts/lab.sh reset-origin
|
||||
```
|
||||
|
||||
- `redeploy`: build + restart aller Services
|
||||
@@ -113,7 +109,7 @@ make reset-origin
|
||||
- `reset-hard`: wie `reset`, plus lokale Git-Aenderungen verwerfen (falls Git-Repo)
|
||||
- `reset-origin`: wie `reset-hard`, aber bevorzugt Ruecksetzen auf `origin/main`
|
||||
|
||||
Hinweis: `make redeploy` startet zusaetzlich den Reverse Proxy neu, damit Nginx-Config-Aenderungen sicher aktiv sind.
|
||||
Hinweis: `redeploy` startet zusaetzlich den Reverse Proxy neu, damit Nginx-Config-Aenderungen sicher aktiv sind.
|
||||
|
||||
## Kurz testen
|
||||
|
||||
|
||||
+13
-13
@@ -12,7 +12,7 @@ Diese Aufgaben sind bewusst auf **manuelle Proxy-Konfiguration** ausgelegt.
|
||||
|
||||
Die meisten Teilnehmer arbeiten unter **Windows mit Docker Desktop + WSL**. Wichtig:
|
||||
|
||||
- **Stack steuern** (`make ...` oder der PowerShell-Wrapper `scripts/workshop.ps1`): geht aus PowerShell **oder** aus dem WSL-Terminal.
|
||||
- **Stack steuern** (`./scripts/lab.sh ...` in WSL oder der PowerShell-Wrapper `scripts/workshop.ps1`): geht aus PowerShell **oder** aus dem WSL-Terminal.
|
||||
- **Alle Challenge-Kommandos** (`curl`, `openssl`, `grep`, `wget`, `for`-Schleifen, `./scripts/compose.sh ...`): laufen im **WSL-Terminal (bash)**, nicht in PowerShell.
|
||||
- **Warnung:** In PowerShell ist `curl` ein Alias fuer `Invoke-WebRequest` und versteht die hier genutzten Flags (`-I`, `-k`, `--cacert`) **nicht**. Immer im WSL-Terminal testen.
|
||||
- Das Repo liegt im WSL-Dateisystem oder unter `/mnt/c/...`; arbeite am besten aus dem WSL-Terminal im Projektordner.
|
||||
@@ -20,7 +20,7 @@ Die meisten Teilnehmer arbeiten unter **Windows mit Docker Desktop + WSL**. Wich
|
||||
## Arbeitsmodus
|
||||
|
||||
1. Dateien anpassen (`proxy/nginx.conf`, `docker-compose.yml`).
|
||||
2. Deployen: nach reinen `nginx.conf`-Aenderungen reicht `make proxy-reload`; nach Aenderungen an `docker-compose.yml` (z. B. neue Ports oder Services) immer `make redeploy`, da der Container neu erstellt werden muss.
|
||||
2. Deployen: nach reinen `nginx.conf`-Aenderungen reicht `./scripts/lab.sh proxy-reload`; nach Aenderungen an `docker-compose.yml` (z. B. neue Ports oder Services) immer `./scripts/lab.sh redeploy`, da der Container neu erstellt werden muss.
|
||||
3. Testen mit `curl` / `openssl` / Wireshark.
|
||||
4. Bei Problemen: `./scripts/compose.sh logs reverse-proxy`.
|
||||
|
||||
@@ -29,7 +29,7 @@ Die meisten Teilnehmer arbeiten unter **Windows mit Docker Desktop + WSL**. Wich
|
||||
- Es wird **additiv in einer einzigen `proxy/nginx.conf`** gearbeitet: jede Challenge erweitert den Stand der vorherigen. Loesungen nicht wieder loeschen - die TLS-Challenges (10-12) bauen direkt aufeinander auf.
|
||||
- **Ausnahme Challenge 9** (Debugging): Diese ueberschreibt die `nginx.conf` bewusst. Vorher sichern (`cp proxy/nginx.conf proxy/nginx.conf.bak`), danach wiederherstellen.
|
||||
- Jede Angabe nennt einen **Ausgangszustand** (worauf baue ich auf) und einen **Zielzustand / Akzeptanz** (woran erkenne ich "fertig"). Der Done-Check ist die pruefbare Form des Zielzustands.
|
||||
- Komplett zuruecksetzen geht jederzeit mit `make reset` (Container/Volumes) bzw. `make reset-hard` (zusaetzlich lokale Datei-Aenderungen verwerfen).
|
||||
- Komplett zuruecksetzen geht jederzeit mit `./scripts/lab.sh reset` (Container/Volumes) bzw. `./scripts/lab.sh reset-hard` (zusaetzlich lokale Datei-Aenderungen verwerfen).
|
||||
|
||||
---
|
||||
|
||||
@@ -77,7 +77,7 @@ curl http://localhost:8080/service/b # -> "Reverse Proxy Target B"
|
||||
**Schritte (Muss)**
|
||||
- Service `backend-c` in Compose einbauen.
|
||||
- Upstream + Route `/service/c` in Nginx anlegen.
|
||||
- Deployen mit `make redeploy` (Compose-Aenderung -> Container-Neustart noetig).
|
||||
- Deployen mit `./scripts/lab.sh redeploy` (Compose-Aenderung -> Container-Neustart noetig).
|
||||
|
||||
**Zielzustand / Akzeptanz**
|
||||
- `/service/c` liefert Backend C.
|
||||
@@ -104,7 +104,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Reverse Proxy Target B"
|
||||
**Schritte (Muss)**
|
||||
- Route `/demo/a` anbieten, die auf Backend A fuehrt.
|
||||
- Entweder per rewrite oder per eigener proxy-Route loesen.
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Zielzustand / Akzeptanz**
|
||||
- `/demo/a` liefert dieselbe Antwort wie `/service/a` (Backend A), obwohl der externe Pfad ein anderer ist.
|
||||
@@ -138,7 +138,7 @@ curl http://localhost:8080/demo/a # -> "Reverse Proxy Target A"
|
||||
- `Cross-Origin-Opener-Policy: same-origin`
|
||||
- `Cross-Origin-Resource-Policy: same-origin`
|
||||
- Optional (Bonus): `Content-Security-Policy` fuer statische Seiten (mit Inline-Styles bewusst beruecksichtigen)
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Fallstrick (`add_header`-Vererbung)**
|
||||
- Header am besten **einmal im `server {}`-Block** setzen, dann gelten sie fuer alle Locations.
|
||||
@@ -167,7 +167,7 @@ curl -I http://localhost:8080/
|
||||
**Schritte (Muss)**
|
||||
- Route `/internal/status` bauen.
|
||||
- Nur `127.0.0.1` erlauben, alle anderen verbieten.
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Wichtiger Hinweis**
|
||||
- Host-Request ueber `localhost:8080` kommt aus Docker-Sicht oft **nicht** von `127.0.0.1`.
|
||||
@@ -198,7 +198,7 @@ curl -i http://localhost:8080/internal/status
|
||||
**Schritte (Muss)**
|
||||
- Eigenes `log_format` mit Upstream-Infos anlegen.
|
||||
- Access-Log auf das neue Format umstellen.
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Hinweis**
|
||||
- `log_format` gehoert in den `http {}`-Block (nicht in `server {}` oder `location {}`), sonst startet Nginx mit `"log_format" directive is not allowed here` nicht. `access_log` darf in `http`, `server` oder `location` stehen.
|
||||
@@ -232,7 +232,7 @@ curl http://localhost:8080/service/a
|
||||
- Zweite Instanz von Backend A (`backend-a2`) anlegen.
|
||||
- `upstream backend_a` auf beide Instanzen erweitern.
|
||||
- Mehrfach-Requests zeigen, dass beide Instanzen antworten.
|
||||
- Deployen mit `make redeploy` (Compose-Aenderung).
|
||||
- Deployen mit `./scripts/lab.sh redeploy` (Compose-Aenderung).
|
||||
|
||||
**Zielzustand / Akzeptanz**
|
||||
- Bei mehreren Aufrufen von `/service/a` antworten **beide** Instanzen (Round-Robin), also sowohl `Target A` als auch `Target A2`.
|
||||
@@ -261,7 +261,7 @@ done
|
||||
- Mit `proxy_hide_header` mindestens einen durchgereichten Backend-Header ausblenden
|
||||
(z. B. `ETag`, `Last-Modified`).
|
||||
- Kurz erklaeren, warum weniger Fingerprinting-Infos hilfreich sind.
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Abgrenzung zu Challenge 4**
|
||||
- Challenge 4 setzt aktive Schutz-Header.
|
||||
@@ -337,7 +337,7 @@ curl http://localhost:8080/service/b # -> "Reverse Proxy Target B"
|
||||
- CA + Server-Zertifikat fuer `localhost` mit SAN erstellen (`--subject-alt-name="DNS:localhost,IP:127.0.0.1"`).
|
||||
- Nur Runtime-Cert + Key bereitstellen (nicht die ganze PKI mounten).
|
||||
- Proxy auf `443` erweitern (Mapping `8443:443`) und TLS in Nginx aktivieren.
|
||||
- Mit `make redeploy` deployen (Compose-Aenderung -> Container-Neustart noetig).
|
||||
- Mit `./scripts/lab.sh redeploy` deployen (Compose-Aenderung -> Container-Neustart noetig).
|
||||
- Root-CA in den System-Trust-Store importieren.
|
||||
|
||||
**Zielzustand / Akzeptanz**
|
||||
@@ -376,7 +376,7 @@ curl --cacert certs/easyrsa/pki/ca.crt https://localhost:8443/service/a
|
||||
**Schritte (Muss)**
|
||||
- HTTP Requests auf HTTPS redirecten (`return 301 https://$host:8443$request_uri;`).
|
||||
- `/healthz` darf optional auf HTTP bleiben.
|
||||
- Deployen mit `make proxy-reload` (reine `nginx.conf`-Aenderung).
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload` (reine `nginx.conf`-Aenderung).
|
||||
|
||||
**Zielzustand / Akzeptanz**
|
||||
- HTTP-Aufrufe auf `8080` antworten mit `301` und `Location: https://localhost:8443/...`.
|
||||
@@ -409,7 +409,7 @@ curl -I http://localhost:8080/service/a
|
||||
- TLS auf 1.2/1.3 beschraenken (`ssl_protocols TLSv1.2 TLSv1.3;`).
|
||||
- HSTS setzen (`Strict-Transport-Security`).
|
||||
- Zertifikatskette pruefen und kurz erklaeren.
|
||||
- Deployen mit `make proxy-reload`.
|
||||
- Deployen mit `./scripts/lab.sh proxy-reload`.
|
||||
|
||||
**Hinweis**
|
||||
- Im HTTP-Basissetup ist HSTS absichtlich **noch nicht** aktiv. Das ist Teil der Aufgabe.
|
||||
|
||||
@@ -298,7 +298,7 @@ curl http://localhost:8080/service/b # -> "Target B"
|
||||
<details>
|
||||
<summary><span class="badge hard">Hard</span> 10) HTTPS von 0 (Easy-RSA)</summary>
|
||||
<p>Zertifikat fuer <code>localhost</code>, Port <code>8443:443</code>, Root-CA importiert.</p>
|
||||
<p><span class="kw">Wichtig:</span> Der neue Port ist eine Compose-Aenderung → mit <code>make redeploy</code> deployen, nicht nur <code>make proxy-reload</code>.</p>
|
||||
<p><span class="kw">Wichtig:</span> Der neue Port ist eine Compose-Aenderung → mit <code>./scripts/lab.sh redeploy</code> deployen, nicht nur <code>./scripts/lab.sh proxy-reload</code>.</p>
|
||||
<p><span class="kw">Warum wichtig:</span> TLS-Grundaufbau ist Voraussetzung fuer vertrauliche und manipulationssichere Kommunikation.</p>
|
||||
<p><span class="kw">Zielzustand:</span> Aufruf liefert Backend A <b>ohne</b> <code>-k</code> (kein SAN-/Zertifikatsfehler). Zertifikat mit SAN signieren!</p>
|
||||
<pre><code>curl https://localhost:8443/service/a # -> Backend A, KEIN "SSL certificate problem"</code></pre>
|
||||
|
||||
@@ -149,14 +149,14 @@
|
||||
</article>
|
||||
<article class="card">
|
||||
<h3>Neu deployen</h3>
|
||||
<pre><code>make redeploy
|
||||
make proxy-reload</code></pre>
|
||||
<pre><code>./scripts/lab.sh redeploy
|
||||
./scripts/lab.sh proxy-reload</code></pre>
|
||||
<p>PowerShell: <code>./scripts/workshop.ps1 -Action redeploy</code></p>
|
||||
</article>
|
||||
<article class="card">
|
||||
<h3>Reset</h3>
|
||||
<pre><code>make reset
|
||||
make bootstrap</code></pre>
|
||||
<pre><code>./scripts/lab.sh reset
|
||||
./scripts/lab.sh bootstrap</code></pre>
|
||||
<p>PowerShell: <code>./scripts/workshop.ps1 -Action reset</code></p>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
<section class="panel">
|
||||
<h1>Solutions Board (detailliert)</h1>
|
||||
<p>Hier stehen absichtlich konkrete Musterloesungen mit Snippets, Checks und typischen Stolperfallen.</p>
|
||||
<p><span class="kw">Workflow:</span> Nach jeder Konfig-Aenderung mindestens <code>make proxy-reload</code>, bei Compose-Aenderungen <code>make redeploy</code>.</p>
|
||||
<p><span class="kw">Workflow:</span> Nach jeder Konfig-Aenderung mindestens <code>./scripts/lab.sh proxy-reload</code>, bei Compose-Aenderungen <code>./scripts/lab.sh redeploy</code>.</p>
|
||||
<div class="top-links">
|
||||
<a class="pill" href="/">Startseite</a>
|
||||
<a class="pill" href="/challenges.html">Challenges</a>
|
||||
@@ -317,11 +317,11 @@ done</code></pre>
|
||||
<p><span class="kw">Ablauf:</span> Zuerst die eigene Config sichern (diese Challenge ueberschreibt sie!), dann die kaputte aktivieren, Fehler beheben und am Ende die eigene Config wiederherstellen.</p>
|
||||
<pre><code>cp proxy/nginx.conf proxy/nginx.conf.bak # 1. eigene Config sichern
|
||||
cp proxy/nginx.broken.conf proxy/nginx.conf # 2. kaputte aktivieren
|
||||
make proxy-reload
|
||||
./scripts/lab.sh proxy-reload
|
||||
./scripts/compose.sh logs reverse-proxy # 3. Fehler finden + fixen</code></pre>
|
||||
<p><span class="kw">Am Ende eigene Config zurueck:</span></p>
|
||||
<pre><code>cp proxy/nginx.conf.bak proxy/nginx.conf
|
||||
make proxy-reload</code></pre>
|
||||
./scripts/lab.sh proxy-reload</code></pre>
|
||||
<p><span class="kw">Konkrete Fehler und Fixes:</span></p>
|
||||
<ol>
|
||||
<li><span class="kw">Upstream-Mismatch:</span> <code>backend_a_typo</code> ist definiert, aber <code>backend_a</code> wird referenziert -> Namen angleichen.</li>
|
||||
@@ -357,7 +357,7 @@ cd certs/easyrsa
|
||||
volumes:
|
||||
- ./certs/live:/etc/nginx/certs:ro,z</code></pre>
|
||||
<p><span class="kw">Wichtig:</span> Nicht die komplette PKI in den Container mounten. Nur Runtime-Zertifikat + Key bereitstellen.</p>
|
||||
<p><span class="kw">Deploy:</span> Port- und Volume-Aenderungen sind Compose-Aenderungen → <code>make redeploy</code> (nicht <code>make proxy-reload</code>), sonst greift der neue Port nicht.</p>
|
||||
<p><span class="kw">Deploy:</span> Port- und Volume-Aenderungen sind Compose-Aenderungen → <code>./scripts/lab.sh redeploy</code> (nicht <code>./scripts/lab.sh proxy-reload</code>), sonst greift der neue Port nicht.</p>
|
||||
<p><span class="kw">Nginx TLS-Pfade:</span> <code>ssl_certificate /etc/nginx/certs/localhost.crt;</code> und <code>ssl_certificate_key /etc/nginx/certs/localhost.key;</code></p>
|
||||
<p><span class="kw">Check:</span> <code>curl https://localhost:8443/service/a</code> (ohne <code>-k</code> nach CA-Import)</p>
|
||||
</details>
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "[error] docker nicht gefunden. Bitte Docker installieren (Linux/macOS) oder Docker Desktop + WSL Integration aktivieren."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
echo "[error] Docker Daemon nicht erreichbar. Bitte Docker starten."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! "$SCRIPT_DIR/compose.sh" version >/dev/null 2>&1; then
|
||||
echo "[error] Weder docker compose noch docker-compose verfuegbar."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f .env ]]; then
|
||||
cp .env.example .env
|
||||
echo "[ok] .env aus .env.example erstellt"
|
||||
else
|
||||
echo "[skip] .env existiert bereits"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR/compose.sh" up -d --build
|
||||
|
||||
echo
|
||||
echo "[ok] Workshop-Stack laeuft"
|
||||
echo " Landing Page: http://localhost:8080"
|
||||
echo " Test (backend-a): curl http://localhost:8080/service/a"
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
echo "[warn] scripts/bootstrap-wsl.sh ist deprecated. Nutze bitte scripts/bootstrap.sh"
|
||||
"$SCRIPT_DIR/bootstrap-unix.sh"
|
||||
+32
-1
@@ -2,4 +2,35 @@
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
"$SCRIPT_DIR/bootstrap-unix.sh"
|
||||
PROJECT_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "[error] docker nicht gefunden. Bitte Docker installieren (Linux/macOS) oder Docker Desktop + WSL Integration aktivieren."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
echo "[error] Docker Daemon nicht erreichbar. Bitte Docker starten."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! "$SCRIPT_DIR/compose.sh" version >/dev/null 2>&1; then
|
||||
echo "[error] Weder docker compose noch docker-compose verfuegbar."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f .env ]]; then
|
||||
cp .env.example .env
|
||||
echo "[ok] .env aus .env.example erstellt"
|
||||
else
|
||||
echo "[skip] .env existiert bereits"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR/compose.sh" up -d --build
|
||||
|
||||
echo
|
||||
echo "[ok] Workshop-Stack laeuft"
|
||||
echo " Landing Page: http://localhost:8080"
|
||||
echo " Test (backend-a): curl http://localhost:8080/service/a"
|
||||
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Zentrale Steuer-Oberflaeche fuer den Workshop-Stack.
|
||||
# Eine einzige Quelle der Wahrheit fuer alle Aktionen - der PowerShell-Wrapper
|
||||
# (scripts/workshop.ps1) ruft genau dieses Skript in WSL auf.
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
usage() {
|
||||
echo "usage: lab.sh {bootstrap|up|redeploy|proxy-reload|down|logs|reset|reset-hard|reset-origin}"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
bootstrap) "$SCRIPT_DIR/bootstrap.sh" ;;
|
||||
up) "$SCRIPT_DIR/compose.sh" up -d --build ;;
|
||||
redeploy) "$SCRIPT_DIR/compose.sh" up -d --build --remove-orphans
|
||||
"$SCRIPT_DIR/compose.sh" restart reverse-proxy ;;
|
||||
proxy-reload) "$SCRIPT_DIR/compose.sh" restart reverse-proxy ;;
|
||||
down) "$SCRIPT_DIR/compose.sh" down ;;
|
||||
logs) "$SCRIPT_DIR/compose.sh" logs -f ;;
|
||||
reset) "$SCRIPT_DIR/reset-lab.sh" ;;
|
||||
reset-hard) "$SCRIPT_DIR/reset-lab.sh" --hard ;;
|
||||
reset-origin) "$SCRIPT_DIR/reset-lab.sh" --hard-origin ;;
|
||||
-h|--help|"") usage ;;
|
||||
*) echo "[error] unbekannte Aktion: $1"; usage; exit 2 ;;
|
||||
esac
|
||||
+1
-11
@@ -17,17 +17,7 @@ if (-not $repoWslPath) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
switch ($Action) {
|
||||
"bootstrap" { $linuxCommand = "./scripts/bootstrap.sh" }
|
||||
"up" { $linuxCommand = "./scripts/compose.sh up -d --build" }
|
||||
"redeploy" { $linuxCommand = "./scripts/compose.sh up -d --build --remove-orphans && ./scripts/compose.sh restart reverse-proxy" }
|
||||
"proxy-reload" { $linuxCommand = "./scripts/compose.sh restart reverse-proxy" }
|
||||
"down" { $linuxCommand = "./scripts/compose.sh down" }
|
||||
"logs" { $linuxCommand = "./scripts/compose.sh logs -f" }
|
||||
"reset" { $linuxCommand = "./scripts/reset-lab.sh" }
|
||||
"reset-hard" { $linuxCommand = "./scripts/reset-lab.sh --hard" }
|
||||
"reset-origin" { $linuxCommand = "./scripts/reset-lab.sh --hard-origin" }
|
||||
}
|
||||
$linuxCommand = "./scripts/lab.sh $Action"
|
||||
|
||||
$wslArgs = @()
|
||||
if ($Distro) {
|
||||
|
||||
Reference in New Issue
Block a user