Aller au contenu

Bonnes pratiques d'exploitation

Cette page rassemble les réflexes à adopter au quotidien pour exploiter CMonChoix sans créer de dette invisible ni prendre de risque inutile.

À quoi sert cette page ?

Les autres pages Operations expliquent des procédures précises. Celle-ci répond à une question plus simple : « Comment travailler proprement sur le VPS et la production ? »

Elle est particulièrement utile lorsqu'on débute sur le projet, car elle donne les habitudes à prendre avant même de connaître tous les détails techniques.


1. Comprendre avant d'agir

Avant toute intervention, répondre à quatre questions :

  1. Quel est le symptôme observé ?
  2. Quelle couche semble responsable ?
  3. L'action envisagée lit-elle ou écrit-elle des données ?
  4. Comment vérifier que l'intervention a réellement fonctionné ?

Si une de ces réponses manque, il vaut mieux commencer par un diagnostic en lecture seule.


2. Toujours savoir où l'on se trouve

Avant une commande Git, Docker, WP-CLI ou make, vérifier le répertoire courant et la branche active.

Sur le VPS, le dépôt est exploité depuis :

/mnt/data/cmonchoix-platform

Une commande exécutée dans le mauvais répertoire peut viser un autre fichier docker-compose, un autre dépôt ou simplement échouer de façon trompeuse.

Pour Git :

pwd
git status --short
git branch --show-current
git rev-parse HEAD

Ces commandes sont en lecture seule.


3. Ne pas confondre code et données

Le code est versionné dans Git.

Les données de production vivent principalement dans les volumes, MariaDB, uploads et autres stockages persistants.

Un rollback Git ne restaure donc pas automatiquement les données modifiées par une migration ou une écriture métier.

C'est une distinction fondamentale avant tout déploiement ou incident.


4. Privilégier les mécanismes officiels

Lorsqu'une procédure versionnée existe, l'utiliser au lieu d'inventer une commande manuelle équivalente.

Exemples :

make doctor

pour vérifier le runtime, ou :

CCX_BACKUP_ROOT=/chemin/absolu make backup

pour créer une sauvegarde.

Pourquoi ? Parce qu'une commande officielle encode généralement plusieurs contrôles que l'on pourrait oublier en reproduisant l'opération à la main.


5. Lecture avant écriture

Quand un problème apparaît, suivre ce principe :

observer → auditer → comprendre → simuler → écrire

Une requête SQL de lecture, un git diff, docker compose ps ou un audit ne doivent pas être remplacés immédiatement par une commande destructive.

Une intervention qui modifie l'état du système doit être explicitement identifiée comme telle.


6. Faire un seul changement logique à la fois

Si l'on modifie simultanément plusieurs choses, il devient difficile de savoir laquelle a corrigé ou aggravé le problème.

Préférer :

petit changement
    ↓
validation
    ↓
changement suivant

C'est aussi la raison pour laquelle les refactorings, migrations et activations de marchands doivent être progressifs.


7. Préparer le retour arrière avant l'intervention

Avant une action risquée, connaître :

  • le commit stable précédent ;
  • la sauvegarde utilisable ;
  • les données touchées ;
  • la procédure de rollback ou de reconstruction ;
  • le test qui confirmera le retour à la normale.

Le meilleur moment pour réfléchir au rollback est avant d'en avoir besoin.


8. Ne jamais modifier le code directement dans un conteneur

Les conteneurs sont des environnements d'exécution.

Le code canonique est celui du dépôt Git. Modifier un fichier directement dans un conteneur crée une différence invisible qui disparaîtra au prochain redémarrage ou déploiement.

Le flux correct est :

Git → validation → déploiement → conteneur

Pas l'inverse.


9. Garder le dépôt propre

Avant un déploiement ou une intervention importante :

git status --short

Une sortie vide signifie qu'aucune modification locale suivie ou non suivie n'est détectée.

Un dépôt sale ne doit pas être considéré comme un état normal de production, car il devient difficile de savoir si le code exécuté correspond réellement au commit Git annoncé.


10. Mesurer avant d'optimiser

Une lenteur perçue n'indique pas automatiquement où se trouve le problème.

Avant d'optimiser, mesurer :

  • durée totale ;
  • nombre d'éléments traités ;
  • CPU ;
  • mémoire ;
  • requêtes SQL ;
  • temps de réponse ;
  • évolution par rapport à une mesure précédente.

Une optimisation sans mesure avant/après n'est pas démontrée.


11. Ne pas déplacer une règle métier pour gagner du temps

Une optimisation ou un dépannage ne justifie jamais de mettre une règle métier :

  • dans le Frontend ;
  • dans le Runtime ;
  • dans une requête SQL isolée ;
  • dans un Adapter ;
  • dans un script d'exploitation.

La responsabilité doit rester dans la couche qui possède la vérité métier.


12. Sauvegarder avant une intervention sur des données critiques

Avant une migration, une réparation ou une opération SQL destructive, disposer d'une sauvegarde récente et testée.

Créer une archive ne suffit pas. Voir Sauvegarde et contrôle de restauration.


13. Conserver les preuves en cas de problème

Lors d'un incident, ne pas supprimer trop vite :

  • logs ;
  • identifiants de run ;
  • dumps ou exports de diagnostic ;
  • métriques ;
  • état Git ;
  • messages d'erreur exacts.

Ces éléments permettent de comprendre la cause au lieu de seulement constater le symptôme.


14. Vérifier systématiquement après une intervention

Une opération n'est pas terminée au moment où la commande rend la main.

Il faut vérifier le résultat attendu.

Selon le cas :

make doctor

puis contrôler les métriques, logs, runs, projections ou pages concernées.

Un exit code 0 signifie seulement que la commande pense avoir terminé correctement. Il ne prouve pas que le résultat métier attendu est correct.


15. Documenter pendant que l'information est fraîche

Une modification significative doit mettre à jour la documentation dans le même chantier.

Ne pas compter sur la mémoire quelques semaines plus tard.

Pour une intervention opérationnelle importante, conserver :

  • pourquoi elle a été faite ;
  • ce qui a été modifié ;
  • les commandes utilisées ;
  • comment elle a été validée ;
  • comment revenir en arrière.

16. Savoir quand demander une seconde vérification

Une seconde lecture est particulièrement utile avant :

  • restauration de production ;
  • requête SQL destructive ;
  • suppression de volumes ;
  • changement de secrets ;
  • migration importante ;
  • activation d'un nouveau marchand ;
  • modification d'une source de vérité métier.

Plus une action est difficile à annuler, plus le niveau de preuve attendu doit être élevé.


Anti-patterns à reconnaître

Un anti-pattern est une habitude qui semble pratique à court terme mais produit généralement des problèmes à long terme.

À éviter :

  • « Je corrige directement en base et on verra après » ;
  • « Je modifie le frontend pour que ça ait l'air correct » ;
  • « Je redémarre tout Docker sans savoir quel service pose problème » ;
  • « Je change trois choses puis je teste » ;
  • « La sauvegarde existe, donc elle doit être restaurable » ;
  • « La commande n'a pas affiché d'erreur, donc tout va bien » ;
  • « Cette procédure est dans une vieille note, donc elle est forcément encore active ».

Routine minimale avant une intervention

[ ] Je suis dans le bon dépôt
[ ] Je connais la branche et le commit
[ ] Le dépôt est propre
[ ] Je sais si l'action lit ou écrit
[ ] Je connais le composant responsable
[ ] J'ai une sauvegarde si des données critiques sont touchées
[ ] Je sais comment revenir en arrière
[ ] Je sais comment valider le résultat

Routine minimale après une intervention

[ ] La commande a terminé sans erreur
[ ] Les contrôles techniques passent
[ ] Le comportement fonctionnel attendu est vérifié
[ ] Les métriques/logs ne montrent pas de nouvelle anomalie
[ ] Le dépôt est dans l'état attendu
[ ] La documentation est à jour

Voir aussi