feat: route alles unter w-make.com — admin/api ohne Subdomain

- Traefik-Routing: /admin und /v1/* auf updates-api (prioritaet 150/200)
- Portfolio fängt restliches w-make.com ab (prioritaet 100)
- Subdomain updates.w-make.com entfällt
- Admin-HTML: Kicker aktualisiert zu w-make.com
- deploy-vps.sh: updates-api wird jetzt auch gebaut und deployed
This commit is contained in:
Jan Wagner
2026-08-22 18:05:59 +02:00
parent 78b857a80c
commit 820a2f8241
4 changed files with 87 additions and 43 deletions
+71 -25
View File
@@ -1,19 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# deploy-w-make-portfolio.sh # deploy-w-make.sh
# Deployment-Script für w-make.com Portfolio auf free-warez.win VPS # Deployment-Script für w-make.com (Portfolio + Updates-API)
# Generiert von Jcode am 2026-08-22 # Generiert von Jcode am 2026-08-22
set -euo pipefail set -euo pipefail
echo "🚀 W-Make Portfolio Deployment" echo "🚀 W-Make.com Deployment"
echo "================================" echo "========================="
echo "" echo ""
# 1. Zum Projekt-Verzeichnis navigieren # 1. Zum Projekt-Verzeichnis navigieren
if [ -d "/home/eldov/projects/w-make-portfolio" ]; then if [ -d "/home/eldov/projects/w-make-portfolio" ]; then
PROJECT_DIR="/home/eldov/projects/w-make-portfolio" PROJECT_DIR="/home/eldov/projects/w-make-portfolio"
elif [ -d "/opt/w-make-portfolio" ]; then elif [ -d "/opt/containers/w-make-portfolio" ]; then
PROJECT_DIR="/opt/w-make-portfolio" PROJECT_DIR="/opt/containers/w-make-portfolio"
elif [ -d "/srv/w-make-portfolio" ]; then elif [ -d "/srv/w-make-portfolio" ]; then
PROJECT_DIR="/srv/w-make-portfolio" PROJECT_DIR="/srv/w-make-portfolio"
else else
@@ -42,48 +42,94 @@ echo ""
echo "✨ Neue Commits:" echo "✨ Neue Commits:"
git log --oneline -5 git log --oneline -5
# 5. Docker Image neu bauen # 5. .env für updates-api prüfen
echo "" echo ""
echo "🔨 Baue Docker Image neu (w-make-portfolio)..." echo "🔑 Prüfe .env für updates-api..."
docker-compose build w-make-portfolio if [ ! -f ".env" ]; then
echo "⚠️ .env nicht gefunden, erstelle mit Placeholder..."
echo "UPDATES_ADMIN_TOKEN=$(openssl rand -hex 32)" > .env
echo "SMTP_PASS=placeholder" >> .env
echo " ⚠️ Bitte UPDATES_ADMIN_TOKEN und SMTP_PASS in .env anpassen!"
else
echo "✅ .env existiert"
fi
# 6. Container neu starten # 6. Docker Images neu bauen
echo ""
echo "🔨 Baue Docker Images neu..."
docker-compose build w-make-portfolio
docker-compose build updates-api
# 7. Container neu starten
echo "" echo ""
echo "🔄 Starte Container neu..." echo "🔄 Starte Container neu..."
docker-compose up -d w-make-portfolio docker-compose up -d w-make-portfolio
docker-compose up -d updates-api
# 7. Warte auf Startup # 8. Warte auf Startup
echo "" echo ""
echo "⏳ Warte 5 Sekunden auf Container-Start..." echo "⏳ Warte 8 Sekunden auf Container-Start..."
sleep 5 sleep 8
# 8. Health-Check # 9. Health-Checks
echo "" echo ""
echo "🏥 Health-Check:" echo "🏥 Health-Checks:"
if curl -sf http://localhost:3000/api/health > /dev/null 2>&1; then if curl -sf http://localhost:3000/api/health > /dev/null 2>&1; then
echo "✅ Health-Endpoint erreichbar" echo "✅ Portfolio Health-Endpoint erreichbar"
curl -s http://localhost:3000/api/health | python3 -m json.tool curl -s http://localhost:3000/api/health | python3 -m json.tool
else else
echo "⚠️ Health-Endpoint nicht erreichbar (möglicherweise noch am Starten)" echo "⚠️ Portfolio Health-Endpoint nicht erreichbar (möglicherweise noch am Starten)"
fi fi
# 9. Container-Logs anzeigen if curl -sf http://localhost:8080/healthz > /dev/null 2>&1; then
echo "✅ Updates-API Health-Endpoint erreichbar"
curl -s http://localhost:8080/healthz | python3 -m json.tool
else
echo "⚠️ Updates-API Health-Endpoint nicht erreichbar"
fi
# 10. Traefik Routing validieren
echo ""
echo "🌐 Routing-Tests:"
echo -n " https://w-make.com → "
if curl -sf -o /dev/null https://w-make.com 2>/dev/null; then
echo "✅ 200 OK"
else
echo "⚠️ Nicht erreichbar"
fi
echo -n " https://w-make.com/admin → "
if curl -sf -o /dev/null https://w-make.com/admin 2>/dev/null; then
echo "✅ Erreichbar (Authelia-Redirect oder 401)"
else
echo "⚠️ Nicht erreichbar"
fi
echo -n " https://w-make.com/v1/updates → "
if curl -sf -o /dev/null https://w-make.com/v1/updates 2>/dev/null; then
echo "✅ Erreichbar"
else
echo "⚠️ Nicht erreichbar"
fi
# 11. Container-Logs anzeigen
echo "" echo ""
echo "📋 Container-Logs (letzte 20 Zeilen):" echo "📋 Container-Logs (letzte 20 Zeilen):"
docker-compose logs --tail=20 w-make-portfolio docker-compose logs --tail=20 w-make-portfolio
# 10. Status-Zusammenfassung
echo "" echo ""
echo "================================" docker-compose logs --tail=20 updates-api
# 12. Status-Zusammenfassung
echo ""
echo "========================="
echo "✅ Deployment abgeschlossen!" echo "✅ Deployment abgeschlossen!"
echo "" echo ""
echo "Nächste Schritte:" echo "Nächste Schritte:"
echo "1. Prüfe https://w-make.com im Browser" echo "1. Prüfe https://w-make.com im Browser"
echo "2. Validiere die neuen Änderungen:" echo "2. Prüfe https://w-make.com/admin (Authelia-Login)"
echo " - Hero: 'Wenn Zahlen zwischen Schichten verschwinden...'" echo "3. Prüfe https://w-make.com/v1/updates (API)"
echo " - Demo-CTA nach Hero-Section"
echo " - CTA-Box mit Benefit-Liste (✓)"
echo "" echo ""
echo "Bei Problemen:" echo "Bei Problemen:"
echo " docker-compose logs -f w-make-portfolio" echo " docker-compose logs -f w-make-portfolio"
echo " docker-compose logs -f w-make-updates-api"
echo "" echo ""
+14 -16
View File
@@ -57,23 +57,21 @@ services:
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=proxy" - "traefik.docker.network=proxy"
- "traefik.http.routers.w-make-updates.rule=Host(`updates.w-make.com`)" # Öffentliche API-Routen (hohe Priorität, before portfolio)
- "traefik.http.routers.w-make-updates.priority=10" - "traefik.http.routers.w-make-api.rule=Host(`w-make.com`) && (PathPrefix(`/v1`) || PathPrefix(`/feed.xml`))"
- "traefik.http.routers.w-make-updates.entrypoints=websecure" - "traefik.http.routers.w-make-api.priority=150"
- "traefik.http.routers.w-make-updates.tls=true" - "traefik.http.routers.w-make-api.entrypoints=websecure"
- "traefik.http.routers.w-make-updates.tls.certresolver=http_resolver" - "traefik.http.routers.w-make-api.tls=true"
- "traefik.http.routers.w-make-updates.middlewares=default@file,crowdsec-bouncer-plugin@file" - "traefik.http.routers.w-make-api.tls.certresolver=http_resolver"
- "traefik.http.routers.w-make-api.middlewares=default@file,crowdsec-bouncer-plugin@file"
- "traefik.http.services.w-make-updates.loadbalancer.server.port=8080" - "traefik.http.services.w-make-updates.loadbalancer.server.port=8080"
- "traefik.http.middlewares.wmake-updates-authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.w-make.com" # Admin-UI (höchste Priorität, Authelia-Schutz)
- "traefik.http.middlewares.wmake-updates-authelia.forwardauth.trustForwardHeader=true" - "traefik.http.routers.w-make-admin.rule=Host(`w-make.com`) && PathPrefix(`/admin`)"
- "traefik.http.middlewares.wmake-updates-authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups" - "traefik.http.routers.w-make-admin.priority=200"
- "traefik.http.routers.w-make-updates-admin.rule=Host(`updates.w-make.com`) && (PathPrefix(`/admin`) || PathPrefix(`/v1/admin`))" - "traefik.http.routers.w-make-admin.entrypoints=websecure"
- "traefik.http.routers.w-make-updates-admin.priority=200" - "traefik.http.routers.w-make-admin.tls=true"
- "traefik.http.routers.w-make-updates-admin.entrypoints=websecure" - "traefik.http.routers.w-make-admin.tls.certresolver=http_resolver"
- "traefik.http.routers.w-make-updates-admin.tls=true" - "traefik.http.routers.w-make-admin.middlewares=default@file,crowdsec-bouncer-plugin@file"
- "traefik.http.routers.w-make-updates-admin.tls.certresolver=http_resolver"
- "traefik.http.routers.w-make-updates-admin.middlewares=default@file,crowdsec-bouncer-plugin@file,wmake-updates-authelia@docker"
- "traefik.http.routers.w-make-updates-admin.service=w-make-updates"
networks: networks:
- proxy - proxy
+1 -1
View File
@@ -62,7 +62,7 @@
<body> <body>
<header> <header>
<div> <div>
<p class="kicker">Authelia · updates.w-make.com</p> <p class="kicker">Authelia · w-make.com</p>
<h1>Links-Verwaltung</h1> <h1>Links-Verwaltung</h1>
</div> </div>
<button class="ghost" id="new-btn" type="button">Neuer Link</button> <button class="ghost" id="new-btn" type="button">Neuer Link</button>
+1 -1
View File
@@ -62,7 +62,7 @@
<body> <body>
<header> <header>
<div> <div>
<p class="kicker">Authelia · updates.w-make.com</p> <p class="kicker">Authelia · w-make.com</p>
<h1>Produkt-Updates</h1> <h1>Produkt-Updates</h1>
</div> </div>
<button class="ghost" id="new-btn" type="button">Neues Update</button> <button class="ghost" id="new-btn" type="button">Neues Update</button>