Add docs/TASKS.md: - Completed tasks (6): K3S, Flux, ESS, Themes, Desktop Scripts, Monitoring, TURN - In Progress: Authentik Stage 2 (pending manual config) - Backlog (15+): Element Call Fork, PostgreSQL migration, NetworkPolicies, etc. - Security hardening: Host/Cluster/App layer recommendations - Milestones: Track progress from M1 (Basic) to M7 (Enterprise) Enhance devcontainer.json: - Add gruntfuggly.todo-tree extension for task tree view - Add ms-vscode.makefile-tools for build automation - Add GitHub.copilot for development assistance - Configure todo-tree to highlight TASKS.md and deployment guides Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
🐳 DevContainer für ESS Community GitOps
Dieses DevContainer-Setup ermöglicht dir, auf macOS, Windows und Linux einheitlich zu entwickeln.
🚀 Schnelstart
VSCode mit Remote Containers Extension
-
VSCode Extension installieren:
- Öffne VSCode → Extensions → Suche nach
Dev Containers(Microsoft) - Installiere sie
- Öffne VSCode → Extensions → Suche nach
-
GitOps Verzeichnis öffnen:
cd "april mit Ansible/prod/gitops" code . -
DevContainer starten:
- Klick auf
><Symbol unten links in VSCode - Wähle
Reopen in Container - Warte, bis das Image gebaut wurde (~3-5 Min beim ersten Mal)
- Klick auf
Alternative: Docker + CLI
docker build -t ess-gitops .devcontainer
docker run -it --rm \
-v ~/.kube:/home/vscode/.kube \
-v ~/.ssh:/home/vscode/.ssh \
-v ~/.age:/home/vscode/.age \
-v /var/run/docker.sock:/var/run/docker.sock \
ess-gitops
📦 Enthaltene Tools
- kubectl - Kubernetes CLI
- flux - FluxCD GitOps Controller CLI
- helm - Kubernetes Package Manager
- sops - Secret Operations (Verschlüsselung)
- age - Modern File Encryption
- docker - Container CLI (über Host-Socket)
- git - Versionskontrolle
- jq/yq - JSON/YAML Processing
- zsh + oh-my-zsh - Shell mit Plugins
🔐 Wichtige Verzeichnis-Binds
Der Container mountet automatisch:
| Host | Container | Zweck |
|---|---|---|
~/.kube |
/home/vscode/.kube |
Kubernetes Config |
~/.ssh |
/home/vscode/.ssh |
SSH Keys |
~/.age |
/home/vscode/.age |
Age Encryption Keys |
/var/run/docker.sock |
/var/run/docker.sock |
Docker Daemon (für docker Befehle) |
⚙️ Kubeconfig Einrichten
-
Host-Machine (z.B. macOS):
# Stelle sicher, dass ~/.kube/config existiert und den richtigen Cluster enthält kubectl get nodes -
Im Container:
kubectl get nodes # Sollte jetzt auch dein Cluster zeigen kubectl config current-context
🔐 SOPS + Age Setup
Damit du Secrets bearbeiten kannst, brauchst du den privaten age-Key. Dieser ist in .sops.yaml konfiguriert.
Schritt 1: Age-Key bereitstellen
# Host-Machine: Key-Datei erstellen
mkdir -p ~/.age
# Füge deinen privaten Key ein (Format: "age-secret-key-...")
echo "age-secret-key-xxx..." > ~/.age/keys.txt
chmod 600 ~/.age/keys.txt
Schritt 2: Im Container konfigurieren
Der Container mounted ~/.age automatisch. Setze die Umgebungsvariable:
# Im Container-Terminal (SOPS_AGE_KEY_FILE ist bereits automatisch gesetzt!)
# Jetzt kannst du Secrets bearbeiten (wird transparent ver-/entschlüsselt):
sops apps/production/custom-configs/mas-secrets.sops.yaml
Schritt 3: VSCode Integration (optional)
Um die Umgebungsvariable beim Start zu setzen, nutze die .devcontainer/devcontainer.json:
"remoteEnv": {
"KUBECONFIG": "/home/vscode/.kube/config",
"SOPS_AGE_KEY_FILE": "/home/vscode/.age/keys.txt"
}
Wie es funktioniert
.sops.yamldefiniert, dass Secrets mitageverschlüsselt werden- Beim Öffnen mit
sops <datei>wird die Datei entschlüsselt → du editierst den plaintext in deinem Editor - Beim Speichern wird alles wieder automatisch verschlüsselt
- Wichtig: Niemals den plaintext-Buffer commiten!
📝 Nach Container-Start: Git Hooks Installieren
Wichtig für die ConfigMap Auto-Sync (verhindert Merge-Konflikte):
./scripts/install-hooks.sh
Mehr Details: docs/ops-configmap-sync.md
📝 Nützliche Befehle
# Status des Deployments
kubectl get pods -n matrix
flux get helmreleases -A
# Secrets bearbeiten (mit verschlüsselung)
sops apps/production/custom-configs/mas-secrets.sops.yaml
# FluxCD Sync erzwingen
flux reconcile kustomization production-apps --with-source
# Zertifikate debuggen
kubectl get certificate -n matrix
kubectl describe certificate matrix-ingress -n matrix
# HelmRelease Status prüfen
flux describe helmrelease matrix-stack -n matrix
🛠️ Anpassungen für Windows/WSL2
Falls du Windows nutzt:
- Docker Desktop installieren (mit WSL2 Backend)
- VSCode mit WSL Extension öffnen
- Im WSL Terminal:
cd /mnt/c/path/to/projekt code . - Dann
Dev Containers: Reopen in Container
Das funktioniert seamless, weil Docker Desktop unter WSL2 läuft.
🔧 Troubleshooting
Problem: SOPS_AGE_KEY_FILE not found
Lösung: Key muss in ~/.age/keys.txt auf der Host-Machine sein:
# Host
mkdir -p ~/.age
echo "your-age-private-key" > ~/.age/keys.txt
Der Container mountet ~/.age automatisch → sollte dann funktionieren.
Problem: kubectl: connection refused
Lösung: ~/.kube/config muss auf Host vorhanden sein:
# Host
kubectl get nodes # Test, ob Zugriff existiert
# Dann Container neustarten
Problem: HelmChart is not ready: stat ... no such file or directory
Siehe README.md → Issue 1. Kontrolliere:
HelmRepositorynutzttype: oci- URL ist
oci://ghcr.io/element-hq/ess-helm
Problem: values don't meet the specifications of the schema
Siehe README.md → Issue 2. Häufige Fehler:
tls:darf nicht imingress:Block seinserverNamemuss auf Root-Ebene dervaluesstehen- Komponenten-Namen:
camelCase(z.B.elementWeb,matrixAuthenticationService)
Problem: Let's Encrypt 403 Order's status is processing
Siehe README.md → Issue 3. Kurz:
wellKnownDelegation: enabled: falsesetzen- Oder
.well-known/matrix/servermanuell aufelementWebweiterleiten
📚 Weitere Ressourcen
- Dev Containers Docs
- FluxCD Dokumentation
- SOPS Anleitung
- Projekt-README:
README.md(Architektur, Issues, Best Practices) - Setup-Docs:
docs/setup/ - Install-Guide:
docs/install.md