Vai al contenuto

Configurazione dello stack

Traduzione automatica dell'originale francese.

Posizioni

Cosa Dove
File Compose canonico /opt/docker/<stack>/docker-compose.yml sull'host
Documentazione dello stack 10-stacks/<stack>/README.md nel vault
Registro delle decisioni 10-stacks/<stack>/decisions.md nel vault
Chiavi crittografate 00-infra/secrets/<hôte>/<stack>.enc.env nel vault

10-stacks/<stack>/compose.yml è un collegamento simbolico inattivo

Nel vault, questo file punta a /opt/docker/<stack>/docker-compose.yml — un percorso che esiste solo sull'host. Non può essere letto da vm-claude.

Conseguenza utile: modificare il file tramite SSH è sufficiente, il vault è già aggiornato poiché contiene solo un collegamento. Non è necessario sincronizzare nulla.

La regola che distingue i due casi:

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

Struttura di un servizio

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. Il nome del servizio è quello che Caddy utilizzerà come nome host: reverse_proxy monservice:8080.
  2. Mai latest. Un tag di versione e il suo hash: il tag indica ciò che si è voluto, l'hash indica ciò che si è ottenuto.
  3. on-failure:5 su vm-docker e vm-compute-01, always altrove — vedere Ciclo di vita.
  4. Regola di dimensionamento: tre volte il consumo osservato in idle.
  5. infrastructure_network per tutto ciò che Caddy deve raggiungere; authentik_backend_network in più, se il servizio comunica con Authentik.
  6. Dockhand aggiorna le immagini tramite opt-out. Senza questo tag, un'immagine costruita localmente verrebbe sostituita da un vuoto.
  7. Senza queste due righe, un container verboso riempie il disco dell'host.

Cosa un file Compose non dovrebbe mai contenere

  • Nessun dato esplicito. I valori risiedono nel .env sull'host, cifrati nel vault con SOPS + età. I nomi delle variabili rimangono leggibili: un git diff indica quale segreto è stato modificato, ma non il suo valore.
  • Nessun .env letto o copiato nel vault. Sono deliberatamente esclusi.
  • Nessuna porta pubblicata di cui nessuno ha bisogno. Se Caddy è sulla stessa rete, si connette al container tramite il suo nome: ports: aggiunge solo un'ulteriore interfaccia.

La forma per una variabile obbligatoria, che fallisce in modo evidente invece di avviarsi parzialmente:

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

Prima di tutto up -d

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

config interpola le variabili e convalida lo schema. Se manca una variabile, appare immediatamente, invece di generare un container che si avvia ma non ha alcuna utilità.

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