Configurer les variables d'environnement Python
Les variables d'environnement séparent la configuration du code : le même programme tourne en local, en test et en production avec des valeurs différentes, sans modification ni secret dans le dépôt. Sur l'hébergement d'applications, elles se définissent dans le panneau et sont injectées au démarrage du processus.
Lire une variable
import os
token = os.environ["DISCORD_TOKEN"]
port = int(os.environ.get("PORT", "8000"))
debug = os.environ.get("DEBUG", "false").lower() == "true"os.environ["X"] lève KeyError si la variable manque : c'est souvent souhaitable pour un secret obligatoire, à condition d'afficher un message clair. os.environ.get("X", "defaut") fournit une valeur de repli. Convertissez explicitement les entiers et les booléens ; une chaîne "false" est vraie en Python si vous la testez directement.
Ne mettez jamais de secret comme valeur par défaut dans le code. Un jeton écrit en dur finit dans Git, dans une archive ou dans une capture d'écran.
Panneau et fichier .env local
Dans le panneau, les variables sont associées au service et appliquées au redémarrage. Modifier une valeur ne change pas le processus en cours.
En local, utilisez un fichier .env non versionné :
DISCORD_TOKEN=votre-jeton-local
DATABASE_URL=postgresql://utilisateur:mot-de-passe@localhost:5432/base
DEBUG=trueAvec python-dotenv, chargez-le uniquement en développement :
from dotenv import load_dotenv
load_dotenv()Par défaut, load_dotenv ne remplace pas une variable déjà présente : en production, les valeurs du panneau restent prioritaires. Ne commitez pas .env ; versionnez un .env.example avec les noms et des valeurs vides.
Rotation des secrets
Un secret doit pouvoir changer sans redéploiement de code. Pour un jeton Discord, créez-en un nouveau dans le portail, mettez à jour la variable, redémarrez, vérifiez la connexion, puis révoquez l'ancien. Pour une base, créez un utilisateur ou un mot de passe de remplacement, testez, puis retirez l'ancien accès.
Si un secret a fuité dans Git, le supprimer du dernier commit ne suffit pas : il reste dans l'historique et dans les clones. Considérez-le comme compromis et révoquez-le.
Moindre privilège et journalisation
- Un secret par service, pas un jeton partagé entre plusieurs applications.
- Droits minimaux pour l'utilisateur de base.
- Aucune variable sensible dans les journaux ni dans une réponse HTTP.
- Accès au panneau protégé par un mot de passe fort et la double authentification quand elle est disponible.
Vérifier
Après un changement, redémarrez et confirmez dans le journal que la configuration est chargée sans afficher les valeurs. Testez la fonction qui dépend du secret (connexion au bot, requête à la base). Retirez temporairement une variable en environnement de test pour vérifier que l'échec est explicite et non silencieux.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Héberger un bot Discord PythonConfigurer discord.py, les intents, la reconnexion et la protection du jeton.
- Lire les logs d'une application PythonComprendre stdout, stderr, le module logging et les tracebacks dans la console du panneau.
- Déployer une API FastAPIDémarrer Uvicorn correctement, exposer une route de santé et maîtriser la documentation.