Saltar a contenido

Configuraciones de stacks

Traducción automática del original francés.

Ubicaciones

Qué Dónde
Archivo de configuración principal /opt/docker/<stack>/docker-compose.yml en el host
Documentación de la stack 10-stacks/<stack>/README.md en el vault
Registro de decisiones 10-stacks/<stack>/decisions.md en el vault
Secretos cifrados 00-infra/secrets/<hôte>/<stack>.enc.env en el vault

10-stacks/<stack>/compose.yml es un enlace simbólico inactivo

En el vault, este archivo apunta a /opt/docker/<stack>/docker-compose.yml — una ruta que solo existe en el host. No se lee desde vm-claude.

Consecuencia útil: modificar el archivo mediante SSH es suficiente, ya que el vault ya está actualizado, ya que solo contiene un enlace. No hay nada que sincronizar.

La regla que distingue los dos casos:

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

Esqueleto de un servicio

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. El nombre del servicio es el que Caddy utilizará como nombre de host: reverse_proxy monservice:8080.
  2. Nunca latest. Una etiqueta de versión y su huella: la etiqueta indica lo que se quería, la huella indica lo que se obtuvo.
  3. on-failure:5 en vm-docker y vm-compute-01, always en otros lugares — ver Ciclo de vida.
  4. Regla de dimensionamiento: tres veces el consumo observado en reposo.
  5. infrastructure_network para todo lo que Caddy necesita acceder; authentik_backend_network además, si el servicio se comunica con Authentik.
  6. Dockhand actualiza las imágenes mediante opt-out. Sin esta etiqueta, una imagen construida localmente sería reemplazada por un espacio vacío.
  7. Sin estas dos líneas, un contenedor "hablador" llenaría el disco del host.

Lo que un archivo de configuración Compose nunca debe contener

  • Ningún dato en texto plano. Los valores residen en .env en el host, cifrados en el cofre con SOPS + edad. Los nombres de las variables siguen siendo legibles: un git diff indica qué secreto ha cambiado, pero nunca su valor.
  • Ningún .env leído ni copiado al cofre. Esto se hace intencionadamente.
  • Ningún puerto expuesto que nadie necesite. Si Caddy está en la misma red, se conecta al contenedor por su nombre: ports: solo proporciona una superficie adicional.

La forma del parque para una variable obligatoria, que falla de forma ruidosa en lugar de iniciarse parcialmente:

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

Principalmente up -d

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

config interpola las variables y valida el esquema. Si falta una variable, aparece inmediatamente, en lugar de generar un contenedor que se inicia pero no sirve para nada.

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