Files
infrastructure/DEPLOY_APPS.md
Ubuntu 318c4da270 new file: DEPLOY_APPS.md
modified:   infrastructure/apps/traefik-edge/docker-compose.yml
2026-01-09 14:08:08 +00:00

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)

  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.

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:

    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.