From fd2b6f00ff8c34739d01eaeff1cfa506a0f2d4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Untersch=C3=BCtz?= Date: Wed, 26 Nov 2025 19:09:00 +0100 Subject: [PATCH 1/2] add domain "escape-from-school.de" --- k8s/ingress.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index 2f3855c..98e21ff 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -11,9 +11,20 @@ spec: tls: - hosts: - ${APP_URL} # Wird von CI ersetzt + - "escape-from-school.de" secretName: game-tls-secret rules: - - host: ${APP_URL} # Wird von CI ersetzt + - host: ${APP_URL} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: escape-game + port: + number: 80 + - host: "escape-from-school.de" http: paths: - path: / From e9595b49b1c5716931556c77a3c5f732aaff1e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Untersch=C3=BCtz?= Date: Wed, 26 Nov 2025 19:20:39 +0100 Subject: [PATCH 2/2] add domain "escape-from-school.de" --- .github/workflows/deploy.yaml | 66 ++++++++++++++++++++--------------- k8s/ingress.yaml | 13 +------ 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 25c5194..3ca96db 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -3,7 +3,8 @@ on: [push] env: REGISTRY: git.zb-server.de - BASE_DOMAIN: zb-server.de + # WICHTIG: Deine echte Haupt-Domain + BASE_DOMAIN: escape-from-school.de jobs: build-and-deploy: @@ -13,30 +14,44 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 - # 2. Variablen vorbereiten (VEREINFACHT & KORRIGIERT) + # 2. Variablen vorbereiten (MIT HAUPT-DOMAIN LOGIK) - name: Prepare Environment Variables id: prep run: | - # Wir nehmen einfach den vollen Repo-Namen (z.B. "User/Repo") und machen ihn klein - # Das ist sicherer als cut und owner einzeln zu holen + # 1. Repo und Branch Namen säubern + # Voller Pfad für Docker Image (z.B. "user/escape-teacher") FULL_IMAGE_PATH=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') - # Repo Name für K8s (nur der Teil nach dem /) + # Nur der Projektname für K8s (z.B. "escape-teacher") REPO_LOWER=$(echo "$FULL_IMAGE_PATH" | cut -d'/' -f2) - # Branch Name säubern + # Branch Name säubern (Sonderzeichen zu Bindestrichen) BRANCH_LOWER=$(echo "${{ gitea.ref_name }}" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g') - # Namespace und URL bauen - TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" - APP_URL="${TARGET_NS}.${{ env.BASE_DOMAIN }}" + # 2. Logik: Ist es der Haupt-Branch? + if [ "$BRANCH_LOWER" = "main" ] || [ "$BRANCH_LOWER" = "master" ]; then + # PRODUKTION: + # URL ist direkt die Domain (ohne Subdomain) + APP_URL="${{ env.BASE_DOMAIN }}" + # Namespace ist nur der Projektname (ohne Branch-Suffix) + TARGET_NS="${REPO_LOWER}" + echo "Mode: PRODUCTION (Root Domain)" + else + # ENTWICKLUNG: + # URL ist repo-branch.domain.de + APP_URL="${REPO_LOWER}-${BRANCH_LOWER}.${{ env.BASE_DOMAIN }}" + # Namespace ist repo-branch + TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" + echo "Mode: DEVELOPMENT (Subdomain)" + fi # Image Tag (Commit Hash) IMAGE_TAG="${{ gitea.sha }}" - # Debug Ausgabe (damit du siehst, ob es geklappt hat) - echo "DEBUG: Image Path is: $FULL_IMAGE_PATH" - echo "DEBUG: Target NS is: $TARGET_NS" + # Debug Ausgabe + echo "DEBUG: Branch: $BRANCH_LOWER" + echo "DEBUG: Namespace: $TARGET_NS" + echo "DEBUG: URL: $APP_URL" # In Gitea Actions Environment schreiben echo "FULL_IMAGE_PATH=$FULL_IMAGE_PATH" >> $GITHUB_ENV @@ -45,20 +60,16 @@ jobs: echo "APP_URL=$APP_URL" >> $GITHUB_ENV echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV - # 3. Kaniko Build (Mit DEBUG Fix) + # 3. Kaniko Build - name: Build and Push with Kaniko uses: aevea/action-kaniko@v0.12.0 with: registry: ${{ env.REGISTRY }} - # username/password werden oft nicht gebraucht, wenn Gitea Actions Runner - # im selben Netzwerk ist, aber sicher ist sicher: username: ${{ gitea.actor }} password: ${{ secrets.PACKAGE_TOKEN }} - # Hier war der Fehler: Wir nutzen jetzt die vereinfachte Variable image: ${{ env.FULL_IMAGE_PATH }} tag: ${{ env.IMAGE_TAG }} cache: true - # WICHTIG bei selbst-signierten oder internen Gitea Instanzen: extra_args: --skip-tls-verify-pull --insecure # 4. Setup Kubectl (Interner Trick) @@ -72,24 +83,23 @@ jobs: echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config chmod 600 $HOME/.kube/config - # Internal DNS Trick + # Internal DNS Trick (für Kommunikation innerhalb des Clusters) sed -i 's|server: https://.*:6443|server: https://kubernetes.default.svc:443|g' $HOME/.kube/config # 5. Deploy to Kubernetes - name: Deploy to Kubernetes run: | - # Namespace + # Namespace erstellen (falls nicht existiert) kubectl create namespace ${{ env.TARGET_NS }} --dry-run=client -o yaml | kubectl apply -f - - # Platzhalter ersetzen - # Wir bauen den vollen Image-Pfad für die Ersetzung + # Vollen Image Pfad bauen FULL_IMAGE_URL="${{ env.REGISTRY }}/${{ env.FULL_IMAGE_PATH }}:${{ env.IMAGE_TAG }}" - # Ingress + # 1. Ingress anpassen (Hier wird die URL eingesetzt!) sed -i "s|\${APP_URL}|${{ env.APP_URL }}|g" k8s/ingress.yaml - # App Deployment & Secrets - # HINWEIS: Falls du keine Secrets hast, nimm Fallback-Werte oder entferne die Zeilen + # 2. App Deployment anpassen (Image & Secrets) + # Nutze Secrets oder Fallback-Werte ADMIN_USER="${{ secrets.ADMIN_USER || 'lehrer' }}" ADMIN_PASS="${{ secrets.ADMIN_PASS || 'geheim123' }}" @@ -97,15 +107,15 @@ jobs: sed -i "s|\${ADMIN_USER}|$ADMIN_USER|g" k8s/app.yaml sed -i "s|\${ADMIN_PASS}|$ADMIN_PASS|g" k8s/app.yaml - # Apply - echo "Deploying to Namespace: ${{ env.TARGET_NS }}" + # Anwenden + echo "Deploying Resources to Namespace: ${{ env.TARGET_NS }}" kubectl apply -f k8s/redis.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/app.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/ingress.yaml -n ${{ env.TARGET_NS }} - # Force Update + # Force Update (damit das neue Image sicher geladen wird) kubectl rollout restart deployment/escape-game -n ${{ env.TARGET_NS }} # 6. Summary - name: Summary - run: echo "🚀 Deployed to https://${{ env.APP_URL }}" \ No newline at end of file + run: echo "🚀 Deployed successfully to https://${{ env.APP_URL }}" \ No newline at end of file diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index 98e21ff..49294ec 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -10,21 +10,10 @@ spec: ingressClassName: traefik tls: - hosts: - - ${APP_URL} # Wird von CI ersetzt - - "escape-from-school.de" + - ${APP_URL} secretName: game-tls-secret rules: - host: ${APP_URL} - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: escape-game - port: - number: 80 - - host: "escape-from-school.de" http: paths: - path: /