new file: DEPLOY_APPS.md

modified:   infrastructure/apps/traefik-edge/docker-compose.yml
This commit is contained in:
Ubuntu
2026-01-09 14:08:08 +00:00
parent 120deabb4d
commit 318c4da270
2 changed files with 95 additions and 2 deletions

93
DEPLOY_APPS.md Normal file
View File

@@ -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/<app-name>`.
### Manuell anlegen (via CLI)
```bash
export VAULT_ADDR='https://10.100.30.11:8200'
export VAULT_TOKEN='<Dein-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/<server-name>.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.

View File

@@ -8,8 +8,8 @@ services:
- no-new-privileges:true - no-new-privileges:true
environment: environment:
- TZ=Europe/Berlin - TZ=Europe/Berlin
- CF_ZONE_API_TOKEN=${CF_ZONE_API_TOKEN} - CF_ZONE_API_TOKEN=${CLOUDFLARE_API_KEY}
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} - CF_DNS_API_TOKEN=${CLOUDFLARE_EMAIL}
command: command:
# --- DEBUGGING AKTIVIEREN --- # --- DEBUGGING AKTIVIEREN ---
- "--log.level=DEBUG" # Setzt das Log-Level auf DEBUG (Fehlersuche) - "--log.level=DEBUG" # Setzt das Log-Level auf DEBUG (Fehlersuche)