## 🚀 Step-by-Step Installationsanleitung (From Scratch) Diese Anleitung geht davon aus, dass du einen frischen Server (Ubuntu/Debian) mit öffentlicher IP hast und deine lokalen Tools (Flux CLI, kubectl, sops, age) installiert sind. ### Schritt 1: Kubernetes (K3s) auf dem Server installieren Logge dich per SSH auf deinem Server ein und installiere ein frisches K3s. Wir nutzen K3s mit dem Standard-Traefik-Ingress. ```bash # Auf dem Server ausführen: curl -sfL https://get.k3s.io | sh - # Kubeconfig kopieren und Berechtigungen setzen (für den lokalen Zugriff) sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config sudo chown $USER ~/.kube/config ``` *Kopiere dir den Inhalt der `~/.kube/config` auf deinen lokalen Rechner, damit dein lokales `kubectl` den Server steuern kann. Vergiss nicht, die IP `127.0.0.1` in der Datei durch die öffentliche IP deines Servers zu ersetzen.* ### Schritt 2: Den SOPS-Verschlüsselungs-Key generieren Damit Flux deine verschlüsselten Passwörter (SMTP, Datenbank) im Cluster lesen kann, braucht es einen privaten Schlüssel. Wir nutzen `age`. ```bash # Auf deinem lokalen Rechner ausführen: # 1. Key generieren age-keygen -o age.agekey # 2. Den Public Key (steht in der Datei) in die .sops.yaml des Repos eintragen! # 3. Den Private Key als Secret in den Cluster laden (in den flux-system Namespace) cat age.agekey | kubectl create secret generic sops-age \ --namespace=flux-system \ --from-file=age.agekey=/dev/stdin ``` ### Schritt 3: Das Git-Repository vorbereiten Stelle sicher, dass deine GitOps-Struktur gepusht ist und du ein Personal Access Token (PAT) für dein Git-Repository hast (bei GitHub/GitLab). * Das Token benötigt Lese- und Schreibrechte auf das Repository. ### Schritt 4: Flux Bootstrap (Der Startschuss) Das ist der magische Befehl. Er installiert den Flux-Controller in deinem Cluster und verbindet ihn mit deinem Repository. Ab diesem Moment übernimmt Flux das Steuer. **Für GitHub:** ```bash export GITHUB_TOKEN="dein-personal-access-token" export GITHUB_USER="dein-github-username" flux bootstrap github \ --owner=$GITHUB_USER \ --repository=dein-repo-name \ --branch=main \ --path=prod/gitops/clusters/matrix \ --personal ``` **Für Gitea/GitLab/Generisches Git (wie in deinem Setup scheinbar genutzt):** ```bash flux bootstrap git \ --url=https://rohana.axion1337.de/sorb/axion1337.chat-gitops.git \ --branch=main \ --path=prod/gitops/clusters/matrix \ --username=dein-git-user \ --password=dein-git-token ``` ### Schritt 5: Zurücklehnen und beobachten Flux klont jetzt dein Repo, liest die Kustomizations und wendet sie in der richtigen Reihenfolge an (`infra-apps` -> `production-apps`). Du kannst den Fortschritt live verfolgen: ```bash # Zeigt den GitOps-Sync-Status: flux get kustomizations --watch # Zeigt das Helm-Deployment der Element Server Suite: flux get helmreleases -n matrix --watch # Zeigt, wie die Pods hochfahren: kubectl get pods -n matrix -w ``` Sobald alle Pods auf `Running` stehen und die Zertifikate über Let's Encrypt validiert wurden (`kubectl get certificate -n matrix`), ist dein Matrix-Stack unter `https://axion1337.chat` erreichbar.