2.5 KiB
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:
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)
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)
- Öffne
https://10.100.30.11:8200 - Gehe zu
secret->apps. - Erstelle Secret
nextcloud. - 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.
apps:
- name: nextcloud
has_secrets: true # WICHTIG: Setze auf true, damit Ansible im Vault sucht!
4. Push & Deploy (GitOps)
- Commite und pushe deine Änderungen.
- 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):
-
Lookup: Ansible sieht
has_secrets: true. Es fragt Vault: "Gib mir alle Keys untersecret/apps/nextcloud." -
Generierung: Ansible nimmt diese Keys und erstellt eine
.envDatei im Zielordner auf dem Server (/opt/nextcloud/.env).Inhalt der .env:
DB_ROOT_PASSWORD=super-secret-root-pw DB_PASSWORD=user-db-pw -
Start: Ansible führt
docker compose up -daus. Docker Compose lädt automatisch die.envDatei im selben Ordner. Die Variablen${DB_ROOT_PASSWORD}in der YAML werden mit den Werten aus der.envgefüllt.
Ergebnis: Deine App läuft mit sicheren Passwörtern, die nie im Git standen.