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:
+71
-25
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user