Sévérité : ÉlevéePython (Flask, FastAPI)

Erreur 500 après mise en production (variable d'environnement manquante)

```text
KeyError: 'DATABASE_URL'
sqlite3.OperationalError: unable to open database file
```

Détecter

Juste après une mise en production, certaines pages renvoient 500 ; la page d'accueil fonctionne. Aucune erreur en préproduction.

Symptômes

Juste après une mise en production, certaines pages renvoient 500 ; la page d'accueil fonctionne. Aucune erreur en préproduction.

Environnement

Application Python (Flask/Gunicorn) derrière NGINX, configuration par variables d'environnement dans un fichier EnvironmentFile systemd.

Cause racine

La nouvelle version lit une variable introduite dans le code mais absente du fichier d'environnement de production (ajoutée seulement en préproduction), ou pointe vers un chemin inaccessible au compte de service.

Diagnostic

  1. Journaux applicatifs (journalctl -u webapp) : trace complète de l'exception.
  2. Environnement effectif du processus : sudo cat /proc/$(pgrep -f gunicorn | head -1)/environ | tr '\0' '\n'.
  3. Comparer les fichiers d'environnement préproduction / production.

Solution

Ajouter la variable manquante, vérifier droits et chemin de la ressource, redémarrer le service et rejouer les parcours en erreur.

Commandes

systemctl cat webapp | grep EnvironmentFile
sudo -u webapp test -w /var/lib/webapp/app.db && echo ok
systemctl restart webapp && curl -s -o /dev/null -w "%{http_code}\n" localhost:8000/orders

Prévention

Validation de la configuration au démarrage (l'application refuse de démarrer si une variable obligatoire manque), .env.example à jour, parité des environnements, smoke tests post-déploiement.