Ga naar inhoud

Configuratie van stacks

Machinevertaling van het Franse origineel.

Locaties

Wat Waar
Canonisch Compose-bestand /opt/docker/<stack>/docker-compose.yml op de host
Documentatie van de stack 10-stacks/<stack>/README.md in de vault
Beslissingslogboek 10-stacks/<stack>/decisions.md in de vault
Versleutelde geheimen 00-infra/secrets/<hôte>/<stack>.enc.env in de vault

10-stacks/<stack>/compose.yml is een symbolische link die niet meer bestaat

In de vault verwijst dit bestand naar /opt/docker/<stack>/docker-compose.yml — een pad dat alleen op de host bestaat. Het wordt niet gelezen vanaf vm-claude.

Handige consequentie: het bewerken van het bestand via SSH is voldoende, de vault is al up-to-date omdat het alleen een link bevat. Er is niets om te synchroniseren.

De controle die de twee gevallen onderscheidt:

ls -la 10-stacks/<stack>/compose.yml
# une flèche `->`  : lien symbolique, rien à faire
# pas de flèche    : vrai fichier, à synchroniser par scp

Skelet van een service

services:
  monservice:                          # (1)!
    image: monimage:1.4.2@sha256:...   # (2)!
    container_name: monservice
    restart: on-failure:5              # (3)!
    cpus: 0.5
    mem_limit: 256m                    # (4)!
    security_opt:
      - no-new-privileges:true
    networks:
      - infrastructure_network         # (5)!
    labels:
      - dockhand.update=false          # (6)!
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080/healthz"]
      interval: 30s
      timeout: 5s
      retries: 3
    logging:
      driver: json-file
      options:
        max-size: 50m
        max-file: "3"                  # (7)!

networks:
  infrastructure_network:
    external: true
  1. De naam van de service is de naam die Caddy gebruikt als hostnaam: reverse_proxy monservice:8080.
  2. Nooit latest. Een versie-tag en zijn hash: de tag geeft aan wat we wilden, de hash geeft aan wat we daadwerkelijk hebben.
  3. on-failure:5 op vm-docker en vm-compute-01, always elders — zie Levenscyclus.
  4. Regel voor schaal: drie keer het gemiddelde verbruik in rust.
  5. infrastructure_network voor alles wat Caddy moet aanspreken; authentik_backend_network, bovendien als de service communiceert met Authentik.
  6. Dockhand update de images via opt-out. Zonder deze label zou een lokaal gebouwde image worden vervangen door een lege image.
  7. Zonder deze twee regels, vult een communicatieve container de schijf van de host.

Wat een Compose-bestand nooit mag bevatten

  • Geen expliciete informatie. De waarden leven in .env op de host, versleuteld in de vault met SOPS + leeftijd. De namen van de variabelen blijven leesbaar: een git diff toont welke geheime waarde is veranderd, maar niet de waarde zelf.
  • Geen .env die worden gelezen of gekopieerd naar de vault. Dit is opzettelijk.
  • Geen open poort die niemand nodig heeft. Als Caddy op hetzelfde netwerk staat, verbindt het zich met de container via zijn naam: ports: voegt alleen maar een extra interface toe.

De structuur voor een verplicht veld, die op een onhandige manier faalt in plaats van te starten:

environment:
  - API_TOKEN=${API_TOKEN:?rendu SOPS absent - voir 00-infra/secrets/README.md}

Voordat alles up -d

docker compose -f /opt/docker/<stack>/docker-compose.yml config

config vult de variabelen in en valideert het schema. Een ontbrekende variabele verschijnt direct, in plaats van een container te creëren die start en nutteloos is.

Dernière vérification de cette page : 2026-08-29