docker-compose-infra.md 3.7 KB


name: docker-compose-infra category: meta public: false database: optional hosting_hints:

  • vps
  • bare-metal
  • homelab audit_stack:
  • analyze
  • code-clean
  • cso
  • doc plugins: context7: no ui-ux-pro-max: no gstack: no ---

Docker Compose Infrastructure

Stack docker-compose orchestrant services externes (DB, cache, reverse proxy, monitoring, apps déployables) — pas de code applicatif au root. Exemple : stack homelab / VPS / environnement local partagé.

Detection signals

Strong signals (×3)

  • FILE: docker-compose.yml OR docker-compose.yaml
  • FILE: compose.yml OR compose.yaml (syntaxe moderne)
  • FILE: plusieurs docker-compose.*.yml (override, prod, dev)

Medium signals (×2)

  • FILE: .env.example avec vars de services (POSTGRES_PASSWORD, REDIS_PASSWORD, etc.)
  • DIR: configs/ OR conf/ OR volumes/ avec configs de services (nginx.conf, redis.conf, postgresql.conf)
  • FILE: Makefile avec cibles docker (up:, down:, restart:, logs:)
  • DIR: traefik/ OR nginx/ OR caddy/ (reverse proxy configs)
  • FILE: .dockerignore

Weak signals (×1)

  • DIR: scripts/ avec scripts d'init DB / backup
  • FILE: backup.sh OR restore.sh
  • DIR: data/ (gitignored, volumes montés)

Counter-signals (exclusion)

  • FILE: package.json AVEC deps applicatives (react/next/express/...) → c'est une app, pas de l'infra-only
  • FILE: pyproject.toml AVEC [project.scripts] → app Python
  • FILE: Cargo.toml → app Rust
  • DIR: src/ significatif avec code métier → c'est une app, pas du pur infra

Implications

  • Hébergement : VPS / bare-metal / homelab (Raspberry Pi, NAS)
  • Base de données : souvent incluse dans la stack (Postgres/MySQL/Redis/Mongo)
  • SEO/GEO : N/A
  • Surface sécurité : GRANDE — secrets, ports exposés, privilèges containers
  • UI/UX : N/A

Typical pain points

  • .env committé avec credentials
  • Images :latest (pas de versions pinnées) → upgrades casse-stack
  • privileged: true abusif
  • Ports exposés sur 0.0.0.0 sans firewall (DB accessible Internet !)
  • Pas de healthchecks
  • Pas de restart policy
  • Volumes non nommés (data perdue à la recréation)
  • Pas de backup automatique (cron, restic, borg)
  • Logs non centralisés ni rotés
  • Reverse proxy sans TLS (Let's Encrypt absent)
  • Network default bridge avec tous services (pas d'isolation)
  • User root dans containers (privilege escalation)
  • Resources limits absents (un service OOM-kill les autres)
  • Secrets en environment (visibles docker inspect)
  • Images Dockerfile non custom : postgres:15 nu sans hardening

Interview questions (adaptive)

En plus du set minimum business :

  • OS host : Ubuntu / Debian / CoreOS / autre ?
  • Services principaux dans la stack (DB / cache / reverse proxy / monitoring / apps) ?
  • Reverse proxy : Traefik / Caddy / nginx / aucun ?
  • TLS : Let's Encrypt / certs custom / aucun ?
  • Secrets management : .env / Docker secrets / Vault / autre ?
  • Backup strategy : aucun / manuel / automatisé (quoi ?) ?
  • Monitoring / logs : Portainer / Grafana / Loki / ELK / aucun ?
  • Uptime monitoring externe : UptimeRobot / BetterStack / aucun ?
  • Mise à jour des images : manuelle / Watchtower / Renovate / aucune ?
  • Restrictions réseau (firewall, fail2ban) ?
  • Multi-env : dev + prod séparés ?

Plugin recommendations

  • context7 : OFF (Docker/Compose stable)
  • ui-ux-pro-max : OFF
  • gstack : OFF

Example project layout

docker-compose.yml
docker-compose.prod.yml    (override prod)
.env.example
.dockerignore
Makefile                    (up:/down:/logs:/backup:)
configs/
  nginx/
    default.conf
  traefik/
    traefik.yml
    dynamic.yml
  postgres/
    init.sql
scripts/
  backup.sh
  restore.sh
volumes/                    (gitignored data)
README.md