diff --git a/DEPLOY_APPS.md b/DEPLOY_APPS.md new file mode 100644 index 0000000..50a4a98 --- /dev/null +++ b/DEPLOY_APPS.md @@ -0,0 +1,93 @@ +# Deploying Docker Apps with Secrets (GitOps & Vault) + +Dieses Dokument erklärt, wie du eine neue Docker-Anwendung hinzufügst und wie der Secret-Flow von Vault bis in den Container funktioniert. + +--- + +## 1. App erstellen (Lokal) + +Lege einen neuen Ordner unter `infrastructure/apps/` an, z.B. `nextcloud`. +Erstelle dort eine `docker-compose.yml`. + +### Secrets nutzen +Statt Passwörter hardzucoden, nutze Umgebungsvariablen (`${VAR_NAME}`). + +**Beispiel `infrastructure/apps/nextcloud/docker-compose.yml`:** +```yaml +services: + db: + image: mariadb + environment: + - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} # Kommt aus Vault/.env + - MYSQL_PASSWORD=${DB_PASSWORD} # Kommt aus Vault/.env +``` + +--- + +## 2. Secrets in Vault anlegen + +Damit Ansible die Variablen (`DB_ROOT_PASSWORD`, etc.) kennt, müssen sie in Vault liegen. +Jede App hat ihren eigenen Pfad: `secret/apps/`. + +### Manuell anlegen (via CLI) +```bash +export VAULT_ADDR='https://10.100.30.11:8200' +export VAULT_TOKEN='' # Root- oder Admin-Token + +vault kv put secret/apps/nextcloud \ + DB_ROOT_PASSWORD="super-secret-root-pw" \ + DB_PASSWORD="user-db-pw" +``` + +### Manuell anlegen (via UI) +1. Öffne `https://10.100.30.11:8200` +2. Gehe zu `secret` -> `apps`. +3. Erstelle Secret `nextcloud`. +4. Füge Key-Value Paare hinzu. + +--- + +## 3. App zuweisen (Deployment Config) + +Sage dem Server, dass er die App starten soll. +Editiere `infrastructure/deployments/.yml`. + +```yaml +apps: + - name: nextcloud + has_secrets: true # WICHTIG: Setze auf true, damit Ansible im Vault sucht! +``` + +--- + +## 4. Push & Deploy (GitOps) + +1. Commite und pushe deine Änderungen. +2. Warte 5 Minuten (automatischer Pull) oder starte manuell via Ansible (Push). + +--- + +## 5. Was passiert im Hintergrund? (Der Flow) + +Hier geschieht die Magie, wenn Ansible läuft (egal ob Push oder Pull): + +1. **Lookup:** + Ansible sieht `has_secrets: true`. + Es fragt Vault: "Gib mir alle Keys unter `secret/apps/nextcloud`." + +2. **Generierung:** + Ansible nimmt diese Keys und erstellt eine `.env` Datei im Zielordner auf dem Server (`/opt/nextcloud/.env`). + + *Inhalt der .env:* + ```env + DB_ROOT_PASSWORD=super-secret-root-pw + DB_PASSWORD=user-db-pw + ``` + +3. **Start:** + Ansible führt `docker compose up -d` aus. + Docker Compose lädt automatisch die `.env` Datei im selben Ordner. + Die Variablen `${DB_ROOT_PASSWORD}` in der YAML werden mit den Werten aus der `.env` gefüllt. + +**Ergebnis:** Deine App läuft mit sicheren Passwörtern, die nie im Git standen. + diff --git a/infrastructure/apps/traefik-edge/docker-compose.yml b/infrastructure/apps/traefik-edge/docker-compose.yml index cf80c72..51cd92a 100644 --- a/infrastructure/apps/traefik-edge/docker-compose.yml +++ b/infrastructure/apps/traefik-edge/docker-compose.yml @@ -8,8 +8,8 @@ services: - no-new-privileges:true environment: - TZ=Europe/Berlin - - CF_ZONE_API_TOKEN=${CF_ZONE_API_TOKEN} - - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} + - CF_ZONE_API_TOKEN=${CLOUDFLARE_API_KEY} + - CF_DNS_API_TOKEN=${CLOUDFLARE_EMAIL} command: # --- DEBUGGING AKTIVIEREN --- - "--log.level=DEBUG" # Setzt das Log-Level auf DEBUG (Fehlersuche)