Politique des conteneurs¶
Cette politique protège la disponibilité de CMonChoix Platform contre les dérives de mémoire, CPU, processus et journaux. Elle est calibrée pour le VPS de production mesuré avec 4 vCPU et 12 Go de RAM.
Mesure de référence¶
Le 30 juillet 2026, la stack CCX consommait environ 1,15 Go de RAM au repos. Les principaux consommateurs étaient :
- MariaDB : environ 327 Mio ;
- Prometheus : environ 200 Mio ;
- WordPress : environ 183 Mio ;
- Grafana : environ 139 Mio ;
- Promtail : environ 115 Mio ;
- cAdvisor : environ 104 Mio ;
- Loki : environ 63 Mio.
Ces mesures sont un instantané, pas une capacité maximale. Le worker doit conserver une marge importante pendant les imports marchands.
Plafonds¶
| Service | Mémoire | CPU | PID |
|---|---|---|---|
| WordPress | 1 Gio | 1,5 | 256 |
| MariaDB | 2 Gio | 2 | 256 |
| Redis | 256 Mio | 0,5 | 64 |
| Worker | 3 Gio | 2,5 | 256 |
| Documentation | 128 Mio | 0,25 | 64 |
| Loki | 768 Mio | 1 | 256 |
| Promtail | 384 Mio | 0,75 | 128 |
| Prometheus | 1 Gio | 1 | 256 |
| Grafana | 512 Mio | 0,75 | 256 |
| Node Exporter | 128 Mio | 0,25 | 64 |
| cAdvisor | 512 Mio | 1 | 256 |
Le total théorique est inférieur à 10 Go. Les limites sont des plafonds, pas des réservations, et laissent de la capacité à Ubuntu, Nginx Proxy Manager, Portainer et aux pointes transitoires.
Toutes les valeurs peuvent être adaptées par les variables CCX_*_MEMORY_LIMIT, CCX_*_CPU_LIMIT et CCX_*_PIDS_LIMIT. Une modification exige de nouvelles mesures au repos et pendant un import complet.
Journaux¶
Chaque service utilise explicitement le pilote json-file avec rotation :
- taille maximale par fichier :
50m; - nombre maximal de fichiers :
5.
Les variables CCX_DOCKER_LOG_MAX_SIZE et CCX_DOCKER_LOG_MAX_FILES permettent un ajustement documenté.
Promtail monte /var/log et les journaux Docker en lecture seule.
Observabilité¶
Prometheus utilise le volume persistant prometheus_data sous /prometheus. Une recréation du conteneur ne doit donc plus supprimer son historique local.
Node Exporter monte la racine de l'hôte en lecture seule sous /host et utilise --path.rootfs=/host. Il observe ainsi l'hôte plutôt que le seul système de fichiers de son conteneur.
Images¶
Les onze images par défaut sont immuables. Chaque référence associe une version lisible à son RepoDigest SHA-256, collecté sur le VPS de production le 30 juillet 2026 :
| Service | Référence immuable |
|---|---|
| WordPress | wordpress:6.9.4-php8.3-apache@sha256:5e6511a69cac9b6a42a062ea882b978c9d10edb58aa51623d30e41d30b4d795d |
| Worker WP-CLI | wordpress:cli-2.12.0@sha256:dac35b8f34c6f4f1fafa0b32342642fa9eecd077bb0a8909b486c108874bd7f1 |
| MariaDB | mariadb:11.8.6@sha256:78a5047d3ba33975f183f183c2464cc7f1eab13ec8667e57cc9a5821d6da7577 |
| Redis | redis:7.4.9-alpine@sha256:6ab0b6e7381779332f97b8ca76193e45b0756f38d4c0dcda72dbb3c32061ab99 |
| Nginx docs | nginx:1.31-alpine@sha256:54f2a904c251d5a34adf545a72d32515a15e08418dae0266e23be2e18c66fefa |
| Loki | grafana/loki:2.9.0@sha256:b025a0220f390baaab01578aea2fe0ba677584d9f248c3fe5af15f84dd1de60d |
| Promtail | grafana/promtail:2.9.0@sha256:c2c423196c75a2c9c26f6fe0ba7200c3167334b14975747f5dcff678bd1a32e9 |
| Prometheus | prom/prometheus:v3.5.4@sha256:a75c5a35bc21d7afe69551eefa3cb1e1fb1775fe759408007a66b54ec3de1f29 |
| Grafana | grafana/grafana:13.1.0@sha256:121a7a9ece6dc10b969f1f96eed64b4f07dfac0d0b8abc070f7cb83bbde86f63 |
| Node Exporter | prom/node-exporter:v1.11.1@sha256:e9cff4fc67b1818f8c97adb115b9f12c9a54b533de86765d4a0effc01b357205 |
| cAdvisor | gcr.io/cadvisor/cadvisor:v0.55.1@sha256:3de2bd5203120b866d74a9b283b2ffb8ec382fbf9dc321814700c6ea6f44ec57 |
Les variables CCX_IMAGE_* restent disponibles pour un déploiement contrôlé, mais la CI refuse toute valeur rendue sans suffixe @sha256:<64 caractères hexadécimaux>. Un tag flottant, y compris latest, ne peut donc pas passer le contrat de production.
Mise à jour maîtrisée des images¶
Dependabot contrôle chaque semaine les dépendances Composer, les images Docker et les actions GitHub. Une proposition de mise à jour ne déclenche jamais un déploiement automatique.
Pour changer une image :
- créer une branche dédiée et identifier la version cible ainsi que son RepoDigest multi-architecture ;
- mettre à jour ensemble le tag et le SHA-256 dans le Compose et
.env.example; - examiner les notes de version, les changements incompatibles et les avis de sécurité ;
- laisser toute la CI passer, puis effectuer une sauvegarde et un test de restauration ;
- déployer une seule image ou un lot cohérent pendant une fenêtre contrôlée ;
- exécuter
make doctor, vérifier les métriques et conserver le commit précédent comme point de retour arrière.
Le retour arrière consiste à rétablir les références du commit précédent et à relancer docker compose up -d. Une migration de données irréversible exige son propre runbook avant approbation.
Validation¶
Le contrat statique est contrôlé avec :
make container-policy
Il vérifie les onze services :
- limites mémoire, CPU et PID ;
- politique
unless-stopped; no-new-privileges;- rotation des journaux ;
- persistance Prometheus ;
- montage hôte de Node Exporter ;
- lecture seule des journaux par Promtail ;
- empreinte SHA-256 immuable pour chaque image rendue.
Un résultat valide se termine par :
COMPOSE_POLICY_STATUS=PASS
COMPOSE_POLICY_SERVICES=11
COMPOSE_POLICY_PINNED_IMAGES=11
Après application du Compose, exécuter également :
make doctor
docker compose ps
docker stats --no-stream
Une limite ne doit être abaissée que sur la base de mesures répétées, notamment pendant un import complet et une reconstruction des projections.