Gestion des environnements dev, préproduction, production

Cet article vous propose une méthode de gestion du fichier settings.py de python pour déployer facilement et rapidement avec GIT depuis l’environnement de développement, en préproduction puis en production sans rien changer dans le code.

La façon la plus intéressante de gérer les variables du fichier settings.py de Django est sans doute d’utiliser les variables d’environnement. Je parlerai de ces variables dans un autre article. Toutefois, que faire si l’environnement de pré-production et l’environnement de production sont hébergés sur le même serveur apache ? Je vous propose une solution que j’ai mise en place et qui me fait gagner un temps précieux.

Pour distinguer les environnements, on utilise un fichier env.py qu’on place dans le répertoire d’application django, donc au même niveau que le settings.py. Dans ce fichier, on placera simplement une variable ENV qui prendra les valeurs ‘dev’, ‘preprod’ et ‘prod’ suivant l’environnement dans lequel on est. Par exemple sur l’environnement de développement :

ENV = 'dev'
# ENV = 'preprod'
# Env = 'prod'

Dans le settings.py, importer le « module » env.py. Il est alors possible de tester l’environnement chaque fois que nécessaire pour définir les variables propres à chaque environnement (bases de données, DEBUG = True ou False, ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, etc.

from .env import ENV
...

if ENV == 'dev':
    print('Environnement de développement')
elif ENV == 'preprod':
    print('Environnement de préproduction')
else:
    print('Environnement de production')

N’oubliez pas ensuite de mettre env.py dans votre .gitignore, et de créer à la main le fameux env.py dans chaque environnement avec la valeur adéquate. Ensuite c’est le bonheur. On push les mises à jour sur Github ou un autre serveur GIT et on déploie la pré-prod avec un simple git pull, de même que la production.

Simple, mais efficace je trouve.