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