new file: DEPLOY_APPS.md
modified: infrastructure/apps/traefik-edge/docker-compose.yml
This commit is contained in:
93
DEPLOY_APPS.md
Normal file
93
DEPLOY_APPS.md
Normal 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.
|
||||||
|
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user