Vous voulez être en mesure de changer les paramètres, les secrets, les variables d'environnement et autres en fonction de la branche git dans laquelle vous vous trouvez et en vous appuyant sur différents fichiers de paramètres, c'est bien mais dans une situation d'entreprise, vous voudriez cacher toutes vos informations sensibles du repo. Ce n'est pas une bonne pratique de sécurité d'exposer toutes les variables d'environnement, les secrets de tous les environnements (développement, staging, production, qa etc.) à tous les développeurs. Ce qui suit devrait permettre d'atteindre 2.
- isolement des paramètres en fonction de leur environnement de déploiement
- cacher les informations sensibles du repo git
Mon run.sh
#!/bin/bash
# default environment
export DJANGO_ENVIRONMENT="develop"
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ $BRANCH == "main" ]; then
export DJANGO_ENVIRONMENT="production"
elif [ $BRANCH == "release/"* ]; then
export DJANGO_ENVIRONMENT="staging"
else
# for all other branches (feature, support, hotfix etc.,)
echo ''
fi
echo "
BRANCH: $BRANCH
ENVIRONMENT: $DJANGO_ENVIRONMENT
"
python3 myapp/manage.py makemigrations
python3 myapp/manage.py migrate --noinput
python3 myapp/manage.py runserver 0:8000
Mon vars.py (ou secrets.py ou n'importe quel nom) dans le même dossier que settings.py de django
vars = {
'develop': {
'environment': 'develop',
'SECRET_KEY': 'mysecretkey',
"DEBUG": "True"
},
'production': {
'environment': 'production',
'SECRET_KEY': 'mysecretkey',
"DEBUG": "False"
},
'staging': {
'environment': 'staging',
'SECRET_KEY': 'mysecretkey',
"DEBUG": "True"
}
}
puis dans settings.py faites simplement ce qui suit
from . import vars # container environment specific vars
import os
DJANGO_ENVIRONMENT = os.getenv("DJANGO_ENVIRONMENT") # declared in run.sh
envs = vars.vars[DJANGO_ENVIRONMENT] # SECURITY WARNING: keep the secret key
used in production secret!
SECRET_KEY = envs["SECRET_KEY"]
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = envs["DEBUG"]
Laissez les développeurs avoir leurs propres vars.py dans leur machine locale mais pendant le déploiement, votre pipeline cicd peut insérer le vars.py réel avec les valures réelles ou un script devrait l'insérer. Si vous utilisez gitlab cicd, vous pouvez stocker l'intégralité de vars.py comme une variable d'environnement.
1 votes
Regardez ici : stackoverflow.com/questions/88259/ et ici code.djangoproject.com/wiki/SplitSettings